|
@@ -4,6 +4,8 @@
|
|
|
# echo "请以sudo权限运行"
|
|
|
# exit
|
|
|
#fi
|
|
|
+GENERATE_ISO=0
|
|
|
+IN_DOCKER=0
|
|
|
|
|
|
# 第一个参数如果是--notbuild 那就不构建,直接运行
|
|
|
if [ ! "$1" == "--nobuild" ]; then
|
|
@@ -11,9 +13,18 @@ if [ ! "$1" == "--nobuild" ]; then
|
|
|
if [ "$1" == "--docker" ]; then
|
|
|
echo "使用docker构建"
|
|
|
sudo bash tools/build_in_docker.sh
|
|
|
+ GENERATE_ISO=0
|
|
|
+ elif [ "$1" == "--current_in_docker" ]; then
|
|
|
+ echo "运行在docker内"
|
|
|
+ IN_DOCKER=1
|
|
|
+ make all -j 16
|
|
|
+ make clean
|
|
|
+ GENERATE_ISO=1
|
|
|
else
|
|
|
+
|
|
|
make all -j 16
|
|
|
make clean
|
|
|
+ GENERATE_ISO=1
|
|
|
fi
|
|
|
fi
|
|
|
|
|
@@ -29,60 +40,70 @@ iso='./DragonOS.iso'
|
|
|
iso_folder='./iso/'
|
|
|
root_folder="$(pwd)"
|
|
|
|
|
|
-# toolchain
|
|
|
-OS=`uname -s`
|
|
|
-if [ "${OS}" == "Linux" ]; then
|
|
|
- GRUB_PATH="$(dirname $(which grub-file))"
|
|
|
-elif [ "${OS}" == "Darwin" ]; then
|
|
|
- GRUB_PATH="$(pwd)/tools/grub-2.06/build/grub/bin"
|
|
|
-fi
|
|
|
-export PATH="${GRUB_PATH}:$PATH"
|
|
|
-
|
|
|
-# ==============检查文件是否齐全================
|
|
|
+if [ "${GENERATE_ISO}" == "1" ]; then
|
|
|
+ echo "开始生成iso..."
|
|
|
|
|
|
+ # toolchain
|
|
|
+ OS=`uname -s`
|
|
|
+ if [ "${OS}" == "Linux" ]; then
|
|
|
+ GRUB_PATH="$(dirname $(which grub-file))"
|
|
|
+ elif [ "${OS}" == "Darwin" ]; then
|
|
|
+ GRUB_PATH="$(pwd)/tools/grub-2.06/build/grub/bin"
|
|
|
+ fi
|
|
|
+ export PATH="${GRUB_PATH}:$PATH"
|
|
|
|
|
|
-bins[0]=${kernel}
|
|
|
+ # ==============检查文件是否齐全================
|
|
|
|
|
|
-for file in ${bins[*]};do
|
|
|
-if [ ! -x $file ]; then
|
|
|
- echo "$file 不存在!"
|
|
|
- exit
|
|
|
- fi
|
|
|
-done
|
|
|
|
|
|
-# ===============文件检查完毕===================
|
|
|
+ bins[0]=${kernel}
|
|
|
|
|
|
-# 如果是 i386/x86_64,需要判断是否符合 multiboot2 标准
|
|
|
-if [ ${ARCH} == "i386" ] || [ ${ARCH} == "x86_64" ]; then
|
|
|
- if ${GRUB_PATH}/grub-file --is-x86-multiboot2 ${kernel}; then
|
|
|
- echo Multiboot2 Confirmed!
|
|
|
+ for file in ${bins[*]};do
|
|
|
+ if [ ! -x $file ]; then
|
|
|
+ echo "$file 不存在!"
|
|
|
+ exit
|
|
|
+ fi
|
|
|
+ done
|
|
|
+
|
|
|
+ # ===============文件检查完毕===================
|
|
|
+
|
|
|
+ # 如果是 i386/x86_64,需要判断是否符合 multiboot2 标准
|
|
|
+ if [ ${ARCH} == "i386" ] || [ ${ARCH} == "x86_64" ]; then
|
|
|
+ if ${GRUB_PATH}/grub-file --is-x86-multiboot2 ${kernel}; then
|
|
|
+ echo Multiboot2 Confirmed!
|
|
|
+ else
|
|
|
+ echo NOT Multiboot2!
|
|
|
+ exit
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+ # 检测路径是否合法,发生过 rm -rf -f /* 的惨剧
|
|
|
+ if [ "${iso_boot}" == "" ]; then
|
|
|
+ echo iso_boot path error.
|
|
|
else
|
|
|
- echo NOT Multiboot2!
|
|
|
- exit
|
|
|
+ mkdir -p ${iso_boot}
|
|
|
+ rm -rf -f ${iso_boot}/*
|
|
|
fi
|
|
|
-fi
|
|
|
-# 检测路径是否合法,发生过 rm -rf -f /* 的惨剧
|
|
|
-if [ "${iso_boot}" == "" ]; then
|
|
|
- echo iso_boot path error.
|
|
|
-else
|
|
|
- mkdir -p ${iso_boot}
|
|
|
- rm -rf -f ${iso_boot}/*
|
|
|
-fi
|
|
|
|
|
|
-# 设置 grub 相关数据
|
|
|
-if [ ${ARCH} == "i386" ] || [ ${ARCH} == "x86_64" ]; then
|
|
|
- cp ${kernel} ${iso_boot}
|
|
|
- mkdir ${iso_boot_grub}
|
|
|
- touch ${iso_boot_grub}/grub.cfg
|
|
|
- echo 'set timeout=15
|
|
|
- set default=0
|
|
|
- menuentry "DragonOS" {
|
|
|
- multiboot2 /boot/kernel.elf "KERNEL_ELF"
|
|
|
- }' >${iso_boot_grub}/grub.cfg
|
|
|
+ # 设置 grub 相关数据
|
|
|
+ if [ ${ARCH} == "i386" ] || [ ${ARCH} == "x86_64" ]; then
|
|
|
+ cp ${kernel} ${iso_boot}
|
|
|
+ mkdir ${iso_boot_grub}
|
|
|
+ touch ${iso_boot_grub}/grub.cfg
|
|
|
+ echo 'set timeout=15
|
|
|
+ set default=0
|
|
|
+ menuentry "DragonOS" {
|
|
|
+ multiboot2 /boot/kernel.elf "KERNEL_ELF"
|
|
|
+ }' >${iso_boot_grub}/grub.cfg
|
|
|
+ fi
|
|
|
+
|
|
|
+ ${GRUB_PATH}/grub-mkrescue -o ${iso} ${iso_folder}
|
|
|
+ rm -rf ${iso_folder}
|
|
|
+ if [ "${IN_DOCKER}" == "1" ]; then
|
|
|
+ echo "运行在docker中, 构建结束"
|
|
|
+ exit 0
|
|
|
+ fi
|
|
|
fi
|
|
|
|
|
|
-${GRUB_PATH}/grub-mkrescue -o ${iso} ${iso_folder}
|
|
|
-rm -rf ${iso_folder}
|
|
|
+
|
|
|
# 进行启动前检查
|
|
|
flag_can_run=0
|
|
|
|