From b1f7845520ad9783a395df0e3a74a7b40f49643d Mon Sep 17 00:00:00 2001 From: fslongjin Date: Mon, 25 Jul 2022 20:34:57 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=90=E8=A1=8C=E5=9C=A8docker=E4=B8=AD?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=89=80=E6=9C=89=E7=94=9F=E6=88=90iso?= =?UTF-8?q?=E7=9A=84=E5=8A=A8=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- run.sh | 109 +++++++++++++++++++++++---------------- tools/build_in_docker.sh | 2 +- 2 files changed, 66 insertions(+), 45 deletions(-) diff --git a/run.sh b/run.sh index 7efcbf04..17f00240 100644 --- a/run.sh +++ b/run.sh @@ -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 - else + 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} + bins[0]=${kernel} -for file in ${bins[*]};do -if [ ! -x $file ]; then - echo "$file 不存在!" - exit - fi -done + 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! + # 如果是 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 + + # 设置 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 -# 检测路径是否合法,发生过 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 -fi -${GRUB_PATH}/grub-mkrescue -o ${iso} ${iso_folder} -rm -rf ${iso_folder} # 进行启动前检查 flag_can_run=0 diff --git a/tools/build_in_docker.sh b/tools/build_in_docker.sh index 478f5f21..c3c10909 100644 --- a/tools/build_in_docker.sh +++ b/tools/build_in_docker.sh @@ -3,5 +3,5 @@ p=`pwd` cpu_count=$(cat /proc/cpuinfo |grep "processor"|wc -l) docker run -v $p:/data --name dragonos-build -i dragonos-dev:v1.0 bash << EOF cd /data -make -j ${cpu_count} +bash run.sh --current_in_docker EOF \ No newline at end of file