@@ -7,41 +7,96 @@ ISO_DIR="${BUILD_DIR}/iso"
77KERNEL_BIN=" ${ROOT_DIR} /target/x86_64-rint/debug/rint-kernel"
88LIMINE_DIR=" ${BUILD_DIR} /limine"
99
10- mkdir -p " ${ISO_DIR} /boot" " ${LIMINE_DIR} "
10+ mkdir -p " ${ISO_DIR} /boot" " ${ISO_DIR} /EFI/BOOT " " ${ LIMINE_DIR}"
1111
12+ # 必需:xorriso
1213if ! command -v xorriso > /dev/null; then
1314 echo " Please install xorriso (sudo apt-get install xorriso)" >&2
1415 exit 1
1516fi
17+
18+ # 可选:QEMU(CI 中不强制)
1619if ! command -v qemu-system-x86_64 > /dev/null; then
17- echo " Please install QEMU (sudo apt-get install qemu-system-x86)" >&2
18- exit 1
20+ echo " Warning: QEMU not found (sudo apt-get install qemu-system-x86). ISO build will continue without QEMU." >&2
1921fi
2022
21- # Build limine from upstream if missing
23+ # 获取 Limine binary release 并运行 configure
2224if [ ! -d " ${LIMINE_DIR} /.git" ]; then
23- git clone --depth=1 https://github.com/limine-bootloader/limine.git " ${LIMINE_DIR} "
24- make -C " ${LIMINE_DIR} " -j
25+ git clone https://codeberg.org/Limine/Limine.git --branch=v10.6.2-binary --depth=1 " ${LIMINE_DIR} "
26+ (cd " ${LIMINE_DIR} " && ./configure)
27+ fi
28+
29+ # 解析 Limine 产物路径(bin 或 share)
30+ find_limine_file () {
31+ local fname=" $1 "
32+ local candidates=(
33+ " ${LIMINE_DIR} /bin/${fname} "
34+ " ${LIMINE_DIR} /share/${fname} "
35+ " ${LIMINE_DIR} /${fname} "
36+ )
37+ for p in " ${candidates[@]} " ; do
38+ if [ -f " $p " ]; then
39+ echo " $p "
40+ return 0
41+ fi
42+ done
43+ return 1
44+ }
45+
46+ UEFI_CD_BIN=" $( find_limine_file ' limine-uefi-cd.bin' ) " || { echo " Missing limine-uefi-cd.bin" ; exit 1; }
47+ BIOS_CD_BIN=" $( find_limine_file ' limine-bios-cd.bin' ) " || { echo " Missing limine-bios-cd.bin" ; exit 1; }
48+ BIOS_SYS_BIN=" $( find_limine_file ' limine-bios.sys' ) " || { echo " Missing limine-bios.sys" ; exit 1; }
49+ BOOTX64_EFI=" $( find_limine_file ' BOOTX64.EFI' ) " || { echo " Missing BOOTX64.EFI" ; exit 1; }
50+
51+ # 选择配置文件:优先使用 limine.conf;若只存在 limine.cfg,复制为 limine.conf 并提示
52+ CONFIG_SRC=" "
53+ if [ -f " ${ROOT_DIR} /limine.conf" ]; then
54+ CONFIG_SRC=" ${ROOT_DIR} /limine.conf"
55+ elif [ -f " ${ROOT_DIR} /limine.cfg" ]; then
56+ echo " Warning: using limine.cfg as limine.conf (please migrate to limine.conf format per USAGE.md)" >&2
57+ CONFIG_SRC=" ${ROOT_DIR} /limine.cfg"
58+ else
59+ echo " Missing limine.conf (or limine.cfg). Please add a config per CONFIG.md." >&2
60+ exit 1
2561fi
2662
27- # Build kernel
63+ # 编译内核(按需改为 --release 并同步 KERNEL_BIN)
2864cargo +nightly build -Z build-std=core,compiler_builtins,alloc --target kernel/x86_64-rint.json
2965
30- # Prepare ISO contents
66+ # 准备 ISO 内容(对齐 USAGE.md)
3167cp " ${KERNEL_BIN} " " ${ISO_DIR} /boot/kernel.bin"
32- cp " ${ROOT_DIR} /limine.cfg" " ${ISO_DIR} /limine.cfg"
33- cp " ${LIMINE_DIR} /limine-bios.sys" " ${ISO_DIR} /limine-bios.sys"
34- cp " ${LIMINE_DIR} /limine-bios-cd.bin" " ${ISO_DIR} /limine-bios-cd.bin"
35- cp " ${LIMINE_DIR} /limine-bios-pc.bin" " ${ISO_DIR} /limine-bios-pc.bin"
36-
37- # Create ISO
38- xorriso -as mkisofs \
39- -b limine-bios-cd.bin \
40- -no-emul-boot -boot-load-size 4 -boot-info-table \
41- --efi-boot limine-bios-pc.bin \
42- -o " ${BUILD_DIR} /rint-m1.iso" " ${ISO_DIR} "
43-
44- # Deploy limine to ISO
45- " ${LIMINE_DIR} /limine-deploy" " ${BUILD_DIR} /rint-m1.iso"
46-
47- echo " ISO created: ${BUILD_DIR} /rint-m1.iso"
68+
69+ # 将 limine.conf 和 limine-bios.sys 放在 ISO 根目录(USAGE.md 支持 root/limine/boot/boot/limine)
70+ cp " ${CONFIG_SRC} " " ${ISO_DIR} /limine.conf"
71+ cp " ${BIOS_SYS_BIN} " " ${ISO_DIR} /limine-bios.sys"
72+
73+ # CD 引导镜像放到 boot/ 目录,便于在 xorriso 中用相���路径引用
74+ cp " ${BIOS_CD_BIN} " " ${ISO_DIR} /boot/limine-bios-cd.bin"
75+ cp " ${UEFI_CD_BIN} " " ${ISO_DIR} /boot/limine-uefi-cd.bin"
76+
77+ # 复制 UEFI 可执行到 EFI/BOOT
78+ cp " ${BOOTX64_EFI} " " ${ISO_DIR} /EFI/BOOT/BOOTX64.EFI"
79+
80+ # 生成混合 BIOS/UEFI ISO(完全按 USAGE.md 推荐参数)
81+ xorriso -as mkisofs -R -r -J \
82+ -b boot/limine-bios-cd.bin \
83+ -no-emul-boot -boot-load-size 4 -boot-info-table -hfsplus \
84+ -apm-block-size 2048 \
85+ --efi-boot boot/limine-uefi-cd.bin \
86+ -efi-boot-part --efi-boot-image --protective-msdos-label \
87+ " ${ISO_DIR} " -o " ${BUILD_DIR} /rint-m1.iso"
88+
89+ # 对生成的镜像执行 bios-install(替代旧版的 limine-deploy)
90+ LIMINE_CLI=" "
91+ if [ -x " ${LIMINE_DIR} /bin/limine" ]; then
92+ LIMINE_CLI=" ${LIMINE_DIR} /bin/limine"
93+ elif command -v limine > /dev/null; then
94+ LIMINE_CLI=" $( command -v limine) "
95+ else
96+ echo " Limine CLI not found. Ensure ./configure produced bin/limine or install Limine to PATH." >&2
97+ exit 1
98+ fi
99+
100+ " ${LIMINE_CLI} " bios-install " ${BUILD_DIR} /rint-m1.iso"
101+
102+ echo " ISO created and installed with Limine: ${BUILD_DIR} /rint-m1.iso"
0 commit comments