mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-08 18:26:48 +00:00
115 lines
2.8 KiB
Bash
115 lines
2.8 KiB
Bash
# ======检查是否以sudo运行=================
|
||
#uid=`id -u`
|
||
#if [ ! $uid == "0" ];then
|
||
# echo "请以sudo权限运行"
|
||
# exit
|
||
#fi
|
||
|
||
# 第一个参数如果是--notbuild 那就不构建,直接运行
|
||
if [ ! "$1" == "--nobuild" ]; then
|
||
echo "开始构建..."
|
||
make all -j 16
|
||
make clean
|
||
fi
|
||
|
||
IA32_USE_QEMU=1
|
||
bochsrc="./bochsrc"
|
||
ARCH="x86_64"
|
||
|
||
# 内核映像
|
||
kernel='./bin/kernel/kernel.elf'
|
||
iso_boot_grub='./iso/boot/grub'
|
||
iso_boot='./iso/boot/'
|
||
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.04/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
|
||
|
||
# ===============文件检查完毕===================
|
||
|
||
# 如果是 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
|
||
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
|
||
|
||
if [ -d "${iso_folder}" ]; then
|
||
flag_can_run=0
|
||
echo "${iso_folder} 文件夹未删除!"
|
||
else
|
||
flag_can_run=1
|
||
fi
|
||
|
||
# 拷贝应用程序到硬盘
|
||
cd tools
|
||
bash m*
|
||
sudo cp ${root_folder}/bin/user/shell.elf ${root_folder}/bin/disk_mount
|
||
sudo cp ${root_folder}/bin/user/about.elf ${root_folder}/bin/disk_mount
|
||
sync
|
||
bash u*
|
||
cd ..
|
||
|
||
if [ $flag_can_run -eq 1 ]; then
|
||
if [ ${IA32_USE_QEMU} == 0 ]; then
|
||
bochs -q -f ${bochsrc} -rc ./tools/bochsinit
|
||
else
|
||
qemu-system-x86_64 -cdrom ${iso} -m 512M -smp 2,cores=2,threads=1,sockets=1 \
|
||
-boot order=d \
|
||
-monitor stdio -d cpu_reset,guest_errors,trace:check_exception,exec,cpu,out_asm,in_asm -s -S -cpu IvyBridge --enable-kvm -rtc clock=host,base=localtime -serial file:serial_opt.txt \
|
||
-drive id=disk,file=bin/disk.img,if=none \
|
||
-device ahci,id=ahci \
|
||
-device ide-hd,drive=disk,bus=ahci.0 \
|
||
-usb
|
||
|
||
fi
|
||
else
|
||
echo "不满足运行条件"
|
||
fi |