mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-20 01:46:31 +00:00
Patch gcc toolchain (#111)
* 添加了GCC_cross_compile——tool_chain * - 解决环境变量路径拼接时,多了`/`的问题 - apt安装时增加-y,不需用户确认 * 解决添加环境变量的命令有误的问题 * 修正编译错误时,还会执行下一步的问题 * new: 编译完成后清理临时文件 * 更新makefile * 调整:把grub安装在 $HOME/opt/dragonos-grub下 * new: 新增dockerfile * 将镜像源换成中科大的(原因是清华的总是ban掉用于构建镜像的服务器的ip) * 修改为基于debian bullseye构建 * 取消指定版本 * 修复MBR磁盘镜像未设置启动标志的bug * 取消在docker中安装grub * 安装grub的过程改到客户机上进行 * bootstrap.sh 添加--no-docker * 使用新版的docker编译镜像 * 修补, 添加了一些关于gcc的check Co-authored-by: longjin <longjin@RinGoTek.cn>
This commit is contained in:
53
tools/Dockerfile
Normal file
53
tools/Dockerfile
Normal file
@ -0,0 +1,53 @@
|
||||
FROM debian:bullseye
|
||||
|
||||
# 设置工作目录
|
||||
WORKDIR /build-image
|
||||
|
||||
# 将本地的脚本复制到工作目录
|
||||
COPY *.sh ./
|
||||
|
||||
# 设置用来存放rust缓存的卷
|
||||
VOLUME [ "/root/.cargo/registry" ]
|
||||
|
||||
# 设置rust源的环境变量
|
||||
ENV RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
|
||||
ENV RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
|
||||
|
||||
RUN sed -i "s@http://\(deb\|security\).debian.org@http://mirrors.ustc.edu.cn@g" /etc/apt/sources.list && apt update && apt install -y \
|
||||
ca-certificates \
|
||||
curl \
|
||||
gnupg \
|
||||
lsb-release \
|
||||
llvm-dev libclang-dev clang gcc-multilib \
|
||||
gcc build-essential fdisk dosfstools qemu-kvm \
|
||||
sudo wget
|
||||
|
||||
# 安装Rust
|
||||
RUN curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain nightly -y && \
|
||||
# You have to add the rustup variables to the $PATH
|
||||
echo "export PATH=\"\$HOME/.cargo/bin:\$PATH\"" >> ~/.bashrc && \
|
||||
bash -c "source $HOME/.cargo/env && \
|
||||
# 更换cargo的索引源
|
||||
touch $HOME/.cargo/config && \
|
||||
bash change_rust_src.sh && \
|
||||
# 安装rust的编译工具
|
||||
echo "正在安装DragonOS所需的rust组件...首次安装需要一些时间来更新索引,请耐心等待..." && \
|
||||
cargo install cargo-binutils && \
|
||||
rustup toolchain install nightly && \
|
||||
rustup default nightly && \
|
||||
rustup component add rust-src && \
|
||||
rustup component add llvm-tools-preview && \
|
||||
rustup target add x86_64-unknown-none"
|
||||
|
||||
# 编译安装GCC交叉编译工具链
|
||||
RUN bash build_gcc_toolchain.sh -f
|
||||
|
||||
# 清除缓存
|
||||
WORKDIR /
|
||||
RUN apt-get autoremove -q -y && \
|
||||
apt-get clean -q -y && \
|
||||
rm -rf /build-image
|
||||
|
||||
ENV DragonOS_GCC=/root/opt/dragonos-gcc/gcc-x86_64-unknown-none/bin/
|
||||
# 设置容器启动后执行的命令
|
||||
CMD ["/bin/bash"]
|
@ -1,23 +1,25 @@
|
||||
emulator="qemu"
|
||||
defpackman="apt-get"
|
||||
dockerInstall="true"
|
||||
export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
|
||||
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
|
||||
|
||||
banner()
|
||||
{
|
||||
echo "|------------------------------------------|"
|
||||
echo "|------------------------------------------|"
|
||||
echo "| Welcome to the DragonOS bootstrap |"
|
||||
echo "|------------------------------------------|"
|
||||
}
|
||||
|
||||
# 因为编码原因, 只有在vim打开该文件的时候对齐才是真的对齐
|
||||
congratulations()
|
||||
{
|
||||
echo "|-----------Congratulations!---------------|"
|
||||
echo "|-----------Congratulations!---------------|"
|
||||
echo "| |"
|
||||
echo "| 你成功安装了DragonOS所需的依赖项! |"
|
||||
echo "| 您可以通过以下命令运行它: |"
|
||||
echo "| 你成功安装了DragonOS所需的依赖项! |"
|
||||
echo "| 您可以通过以下命令运行它: |"
|
||||
echo "| |"
|
||||
echo "| make run-docker -j 你的cpu核心数 |"
|
||||
echo "| make run-docker -j 你的cpu核心数 |"
|
||||
echo "| |"
|
||||
echo "|------------------------------------------|"
|
||||
}
|
||||
@ -39,8 +41,8 @@ install_ubuntu_debian_pkg()
|
||||
lsb-release \
|
||||
llvm-dev libclang-dev clang gcc-multilib \
|
||||
gcc build-essential fdisk dosfstools
|
||||
|
||||
if [ -z "$(which docker)" ]; then
|
||||
|
||||
if [ -z "$(which docker)" ] && [ -n ${dockerInstall} ]; then
|
||||
echo "正在安装docker..."
|
||||
sudo mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||||
@ -49,7 +51,9 @@ install_ubuntu_debian_pkg()
|
||||
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
sudo $1 update
|
||||
sudo "$1" install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
||||
else
|
||||
elif [ -z ${dockerInstall} ]; then
|
||||
echo "您传入--no-docker参数生效, 安装docker步骤被跳过."
|
||||
elif [ -n "$(which docker)" ]; then
|
||||
echo "您的计算机上已经安装了docker"
|
||||
fi
|
||||
|
||||
@ -138,9 +142,32 @@ rustInstall() {
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
############# 脚本开始 ##############
|
||||
# 读取参数及选项,使用 -help 参数查看详细选项
|
||||
while true; do
|
||||
if [ -z "$1" ]; then
|
||||
break;
|
||||
fi
|
||||
echo "repeat"
|
||||
case "$1" in
|
||||
"--no-docker")
|
||||
dockerInstall=""
|
||||
;;
|
||||
"--help")
|
||||
echo "--no-docker(not install docker): 该参数表示执行该脚本的过程中不单独安装docker."
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "无法识别参数$1, 请传入 --help 参数查看提供的选项."
|
||||
;;
|
||||
esac
|
||||
shift 1
|
||||
done
|
||||
|
||||
############ 开始执行 ###############
|
||||
banner
|
||||
rustInstall
|
||||
banner # 开始横幅
|
||||
rustInstall # 安装rust
|
||||
|
||||
if [ "Darwin" == "$(uname -s)" ]; then
|
||||
install_osx_pkg "$emulator" || exit 1
|
||||
@ -176,10 +203,14 @@ fi
|
||||
|
||||
# 创建磁盘镜像
|
||||
bash create_hdd_image.sh
|
||||
# 编译安装GCC交叉编译工具链
|
||||
bash build_gcc_toolchain.sh
|
||||
# 编译安装grub
|
||||
bash grub_auto_install.sh
|
||||
|
||||
# 解决kvm权限问题
|
||||
USR=$USER
|
||||
sudo adduser $USR kvm
|
||||
sudo chown $USR /dev/kvm
|
||||
|
||||
congratulations
|
||||
congratulations
|
184
tools/build_gcc_toolchain.sh
Normal file
184
tools/build_gcc_toolchain.sh
Normal file
@ -0,0 +1,184 @@
|
||||
# init something here
|
||||
current_path=$PATH
|
||||
current_pwd=$PWD
|
||||
|
||||
# 不建议自行选择安装的位置, 如果要修改请自行修改 INSTALL_POS
|
||||
STRUCTURE="x86_64" # 这里选择 x86_64 (64位),而不是选择 i686 架构(32位)
|
||||
INSTALL_POS="$HOME/opt/dragonos-gcc"
|
||||
PREFIX="$INSTALL_POS/gcc-$STRUCTURE-unknown-none"
|
||||
TARGET="${STRUCTURE}-elf"
|
||||
PATH="$PREFIX/bin:$PATH"
|
||||
TARGET_GCC="$STRUCTURE-elf-gcc"
|
||||
TARGET_LD="$STRUCTURE-elf-ld"
|
||||
TARGET_AS="$STRUCTURE-elf-as"
|
||||
|
||||
# 获取选项
|
||||
KEEP_BINUTILS=0
|
||||
KEEP_GCC=0
|
||||
CHANGE_SOURCE=0
|
||||
FORCE=0
|
||||
while true; do
|
||||
if [ ! -n "$1" ]; then
|
||||
break
|
||||
fi
|
||||
case "$1" in
|
||||
"-rebuild")
|
||||
echo "清除${INSTALL_POS}目录下的所有信息"
|
||||
rm -rf "${INSTALL_POS}"
|
||||
;;
|
||||
"-kb")
|
||||
KEEP_BINUTILS=1
|
||||
;;
|
||||
"-kg")
|
||||
KEEP_GCC=1
|
||||
;;
|
||||
"-cs")
|
||||
CHANGE_SOURCE=1
|
||||
;;
|
||||
"-f")
|
||||
FORCE=1
|
||||
;;
|
||||
"-help")
|
||||
echo "脚本选项如下:"
|
||||
echo "-rebuild: 清除上一次安装的全部信息, 即删掉$INSTALL_POS目录下的所有内容, 然后重新构建gcc工具链."
|
||||
echo "-kg(keep-gcc): 您确保${STRUCTURE}-gcc已被编译安装, 本次调用脚本不重复编译安装gcc. 如果没有安装,脚本仍然会自动安装."
|
||||
echo "-kb(keep-binutils): 您确保binutils已被编译安装, 本次调用脚本不重复编译安装binutils. 如果没有安装,脚本仍然会自动安装."
|
||||
echo "-cs(change source): 如果包含该选项, 使用清华源下载gcc和binutils. 否则默认官方源."
|
||||
echo "-f(force): 如果包含该选项, 可以强制使用root权限安装在/root/目录下."
|
||||
;;
|
||||
*)
|
||||
echo "不认识参数$1"
|
||||
;;
|
||||
esac
|
||||
shift 1
|
||||
done
|
||||
|
||||
# check: Don't install the gcc-toolchain in /root/*
|
||||
if [ "${HOME:0:5}" = "/root" ] && [ $FORCE -eq 0 ]; then
|
||||
echo -e "\033[35m 不要把GCC交叉编译工具链安装在/root/目录下, 或者请不要使用sudo \033[0m"
|
||||
echo -e "\033[35m gcc交叉编译工具链默认安装在: /home/<your_usr_name>/opt/dragonos-gcc/ \033[0m"
|
||||
echo -e "\033[35m 如果想要在/root/目录下安装(或者您的操作系统只有root用户), 请使用指令: sudo bash build_gcc_toolchain.sh -f \033[0m"
|
||||
exit 0
|
||||
else
|
||||
# 安装开始[提示]
|
||||
echo -e "\033[35m [开始安装] \033[0m"
|
||||
echo -e "\033[33m gcc交叉编译工具链默认安装在: /home/<your_usr_name>/opt/dragonos-gcc/, 整个过程耗时: 5-30mins \033[0m"
|
||||
sleep 0.3s
|
||||
fi
|
||||
|
||||
# install prerequisited
|
||||
# 注意texinfo和binutils的版本是否匹配
|
||||
# 注意gmp/mpc/mpfr和gcc/g++的版本是否匹配
|
||||
sudo apt-get install -y \
|
||||
g++ \
|
||||
gcc \
|
||||
make \
|
||||
texinfo \
|
||||
libgmp3-dev \
|
||||
libmpc-dev \
|
||||
libmpfr-dev \
|
||||
flex \
|
||||
wget
|
||||
|
||||
# build the workspace
|
||||
mkdir $HOME/opt
|
||||
mkdir $INSTALL_POS
|
||||
mkdir $PREFIX
|
||||
cd $INSTALL_POS
|
||||
|
||||
|
||||
# compile binutils
|
||||
BIN_UTILS="binutils-2.38"
|
||||
BIN_UTILS_TAR="${BIN_UTILS}.tar.gz"
|
||||
if [[ ! -n "$(find $PREFIX/bin/ -name ${TARGET_LD})" && ! -n "$(find $PREFIX/bin/ -name ${TARGET_AS})" ]] || [ KEEP_BINUTILS -ne 1 ]; then
|
||||
if [ KEEP_BINUTILS -eq 1 ]; then
|
||||
echo -e "\033[35m 没有检测到 ${TARGET_LD} 或 没有检测到 ${TARGET_AS}, -kb参数无效 \033[0m"
|
||||
echo -e "\033[35m 开始安装binutils \033[0m"
|
||||
sleep 1s
|
||||
fi
|
||||
if [ ! -d "$BIN_UTILS" ]; then
|
||||
if [ ! -f "$BIN_UTILS_TAR" ]; then
|
||||
echo -e "\033[33m [提醒] 如果使用的是国外源, 下载时间可能偏久. 如果需要使用清华源, 请以输入参数-cs, 即: bash build_gcc_toolchain.sh -cs \033[0m "
|
||||
if [ CHANGE_SOURCE ]; then
|
||||
# 国内源
|
||||
wget "https://mirrors.ustc.edu.cn/gnu/binutils/${BIN_UTILS_TAR}" -P "$INSTALL_POS"
|
||||
else
|
||||
# 官方网站
|
||||
wget https://ftp.gnu.org/gnu/binutils/${BIN_UTILS_TAR} -P "$INSTALL_POS"
|
||||
fi
|
||||
fi
|
||||
tar zxvf "$BIN_UTILS_TAR"
|
||||
fi
|
||||
# 开始编译
|
||||
mkdir build-binutils
|
||||
cd build-binutils
|
||||
../${BIN_UTILS}/configure --target=$TARGET --prefix="$PREFIX" --with-sysroot --disable-nls --disable-werror
|
||||
make -j $(nproc) || exit 1
|
||||
make install || exit 1
|
||||
cd ..
|
||||
fi
|
||||
|
||||
# compile GCC
|
||||
GCC_FILE="gcc-11.3.0"
|
||||
GCC_FILE_TAR="${GCC_FILE}.tar.gz"
|
||||
if [ ! -n "$(find $PREFIX/bin/* -name $TARGET_GCC)" ] || [ KEEP_GCC -ne 1 ]; then
|
||||
if [ KEEP_GCC -eq 1 ]; then
|
||||
echo -e "\033[35m 没有检测到 $TARGET_GCC, -kg参数无效 \033[0m"
|
||||
echo -e "\033[35m 开始安装binutils \033[0m"
|
||||
sleep 1s
|
||||
fi
|
||||
if [ ! -d "$GCC_FILE" ]; then
|
||||
if [ ! -f "$GCC_FILE_TAR" ]; then
|
||||
echo -e "\033[33m [提醒] 如果使用的是国外源, 下载时间可能偏久. 如果需要使用清华源, 请以输入参数-cs, 即: bash build_gcc_toolchain.sh -cs \033[0m "
|
||||
if [ CHANGE_SOURCE ]; then
|
||||
# 国内源
|
||||
wget "https://mirrors.ustc.edu.cn/gnu/gcc/${GCC_FILE}/${GCC_FILE_TAR}" -P "$INSTALL_POS"
|
||||
else
|
||||
# 官方网站
|
||||
wget "http://ftp.gnu.org/gnu/gcc/${GCC_FILE}/${GCC_FILE_TAR}" -P "$INSTALL_POS"
|
||||
fi
|
||||
fi
|
||||
tar zxvf "$GCC_FILE_TAR"
|
||||
fi
|
||||
# 开始编译安装
|
||||
mkdir build-gcc
|
||||
cd build-gcc
|
||||
../${GCC_FILE}/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --enable-languages=c,c++ --without-headers
|
||||
make all-gcc -j $(nproc) || exit 1
|
||||
make all-target-libgcc -j $(nproc) || exit 1
|
||||
make install-gcc -j $(nproc) || exit 1
|
||||
make install-target-libgcc -j $(nproc) || exit 1
|
||||
cd ..
|
||||
fi
|
||||
|
||||
|
||||
# update PATH
|
||||
if [ -n "$(grep -F "export DragonOS_GCC=$PREFIX/bin/" $HOME/.bashrc)" ]; then
|
||||
echo "[info] DragonOS_GCC has been in the "'$PATH'
|
||||
else
|
||||
echo 'export DragonOS_GCC='"$PREFIX"'/bin' >> "$HOME/.bashrc"
|
||||
echo 'export PATH="$DragonOS_GCC:$PATH"' >> "$HOME/.bashrc"
|
||||
echo "[info] Add DragonOS_GCC into PATH successfully."
|
||||
fi
|
||||
source "$HOME/.bashrc"
|
||||
|
||||
|
||||
# final check
|
||||
if [ -n "$(find $PREFIX/bin/* -name $TARGET_GCC)" ] &&
|
||||
[ -n "$(find $PREFIX/bin/* -name $TARGET_LD)" ] &&
|
||||
[ -n "$(find $PREFIX/bin/* -name $TARGET_AS)" ]; then
|
||||
# 删除临时文件
|
||||
rm -rf "$BIN_UTILS"
|
||||
rm -rf "$BIN_UTILS_TAR"
|
||||
rm -rf "build-binutils"
|
||||
rm -rf "$GCC_FILE"
|
||||
rm -rf "$GCC_FILE_TAR"
|
||||
rm -rf "build-gcc"
|
||||
|
||||
echo -e "\033[42;37m [构建成功] Build Successfully.(请重新打开另一个Shell窗口或者重新打开你的IDE以获取新的环境变量) \033[0m"
|
||||
else
|
||||
echo -e "\033[31m [错误] 未找到$STRUCTURE-elf-gcc, $STRUCTURE-elf-ld和$STRUCTURE-elf-as. \033[0m"
|
||||
echo -e "\033[31m [构建失败] 请尝试重新运行build_gcc_toolchain.sh, 或者查看输出,找到错误的原因. \033[0m"
|
||||
fi
|
||||
|
||||
cd "$current_pwd"
|
@ -1,10 +1,10 @@
|
||||
docker rm -f dragonos-build || echo "No existed container"
|
||||
p=`pwd`
|
||||
cpu_count=$(cat /proc/cpuinfo |grep "processor"|wc -l)
|
||||
docker run --rm --privileged=true --cap-add SYS_ADMIN --cap-add MKNOD -v $p:/data -v /dev:/dev -v dragonos-build-cargo:/root/.cargo/registry --name dragonos-build -i dragonos/dragonos-dev:v1.1.0-beta3 bash << EOF
|
||||
docker run --rm --privileged=true --cap-add SYS_ADMIN --cap-add MKNOD -v $(pwd):/data -v /dev:/dev -v dragonos-build-cargo:/root/.cargo/registry --name dragonos-build -i dragonos/dragonos-dev:v1.2 bash << EOF
|
||||
source ~/.cargo/env
|
||||
source ~/.bashrc
|
||||
cd /data
|
||||
# Change rust src
|
||||
bash tools/change_rust_src.sh
|
||||
make all -j $cpu_count && make write_diskimage
|
||||
make all -j $cpu_count
|
||||
EOF
|
@ -20,6 +20,7 @@ n
|
||||
|
||||
|
||||
|
||||
a
|
||||
w
|
||||
EOF
|
||||
|
||||
|
@ -1,12 +1,20 @@
|
||||
#!/bin/bash
|
||||
grub_dir_i386_efi=arch/i386/efi/grub
|
||||
grub_dir_i386_legacy=arch/i386/legacy/grub
|
||||
grub_dir_x86_64_efi=arch/x86_64/efi/grub
|
||||
ABS_PREFIX=/opt/dragonos-grub
|
||||
grub_dir_i386_efi=${ABS_PREFIX}/arch/i386/efi/grub
|
||||
grub_dir_i386_legacy=${ABS_PREFIX}/arch/i386/legacy/grub
|
||||
grub_dir_x86_64_efi=${ABS_PREFIX}/arch/x86_64/efi/grub
|
||||
|
||||
mkdir -p ${grub_dir_i386_efi}
|
||||
mkdir -p ${grub_dir_i386_legacy}
|
||||
mkdir -p ${grub_dir_x86_64_efi}
|
||||
|
||||
# 防止外层声明了环境变量,影响到grub的编译
|
||||
export CC=gcc
|
||||
export LD=ld
|
||||
export AS=as
|
||||
export NM=nm
|
||||
export OBJCOPY=objcopy
|
||||
|
||||
|
||||
#检测grub是否已经安装
|
||||
if [ -d ${grub_dir_i386_efi}/bin ] && [ -d ${grub_dir_i386_legacy}/bin ] && [ -d ${grub_dir_x86_64_efi}/bin ] ; then
|
||||
@ -19,7 +27,7 @@ if ! hash 2>/dev/null apt-get; then
|
||||
fi
|
||||
#下载grub2.06
|
||||
if [ ! -f "grub-2.06.tar.xz" ]; then
|
||||
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/grub/grub-2.06.tar.xz || exit 1
|
||||
wget https://mirrors.ustc.edu.cn/gnu/grub/grub-2.06.tar.xz || exit 1
|
||||
fi
|
||||
|
||||
echo "开始下载grub2.06"
|
||||
@ -42,19 +50,19 @@ sudo apt-get install -y \
|
||||
cd grub-2.06
|
||||
echo "开始安装grub2.06"
|
||||
#编译安装三个版本的grub
|
||||
./configure --target=i386 --prefix=$(dirname $PWD)/${grub_dir_i386_legacy} || exit 1
|
||||
./configure --target=i386 --prefix=${grub_dir_i386_legacy} || exit 1
|
||||
make -j $(nproc) || exit 1
|
||||
make install || exit 1
|
||||
sudo make install || exit 1
|
||||
make clean || exit 1
|
||||
|
||||
./configure --target=i386 --with-platform=efi --prefix=$(dirname $PWD)/${grub_dir_i386_efi} || exit 1
|
||||
./configure --target=i386 --with-platform=efi --prefix=${grub_dir_i386_efi} || exit 1
|
||||
make -j $(nproc) || exit 1
|
||||
make install || exit 1
|
||||
sudo make install || exit 1
|
||||
make clean || exit 1
|
||||
|
||||
./configure --target=x86_64 --with-platform=efi --prefix=$(dirname $PWD)/${grub_dir_x86_64_efi} || exit 1
|
||||
./configure --target=x86_64 --with-platform=efi --prefix=${grub_dir_x86_64_efi} || exit 1
|
||||
make -j $(nproc) || exit 1
|
||||
make install || exit 1
|
||||
sudo make install || exit 1
|
||||
|
||||
cd ..
|
||||
#解除权限限制
|
||||
|
@ -22,12 +22,12 @@ echo "开始写入磁盘镜像..."
|
||||
|
||||
|
||||
# toolchain
|
||||
GRUB_ABS_PREFIX=/opt/dragonos-grub
|
||||
GRUB_PATH_I386_LEGACY_INSTALL=${GRUB_ABS_PREFIX}/arch/i386/legacy/grub/sbin/grub-install
|
||||
GRUB_PATH_I386_EFI_INSTALL=${GRUB_ABS_PREFIX}/arch/i386/efi/grub/sbin/grub-install
|
||||
GRUB_PATH_X86_64_EFI_INSTALL=${GRUB_ABS_PREFIX}/arch/x86_64/efi/grub/sbin/grub-install
|
||||
|
||||
GRUB_PATH_I386_LEGACY_INSTALL=${root_folder}/tools/arch/i386/legacy/grub/sbin/grub-install
|
||||
GRUB_PATH_I386_EFI_INSTALL=${root_folder}/tools/arch/i386/efi/grub/sbin/grub-install
|
||||
GRUB_PATH_X86_64_EFI_INSTALL=${root_folder}/tools/arch/x86_64/efi/grub/sbin/grub-install
|
||||
|
||||
GRUB_PATH_I386_LEGACY_FILE=${root_folder}/tools/arch/i386/legacy/grub/bin/grub-file
|
||||
GRUB_PATH_I386_LEGACY_FILE=${GRUB_ABS_PREFIX}/arch/i386/legacy/grub/bin/grub-file
|
||||
|
||||
|
||||
# ==============检查文件是否齐全================
|
||||
@ -77,6 +77,10 @@ fi
|
||||
# 拷贝程序到硬盘
|
||||
mkdir -p ${root_folder}/bin/disk_mount
|
||||
bash mount_virt_disk.sh || exit 1
|
||||
|
||||
LOOP_DEVICE=$(lsblk | grep disk_mount|sed 's/.*\(loop[0-9]*\)p1.*/\1/1g'|awk 'END{print $0}')
|
||||
echo $LOOP_DEVICE
|
||||
|
||||
mkdir -p ${boot_folder}/grub
|
||||
cp ${kernel} ${root_folder}/bin/disk_mount/boot
|
||||
# 拷贝用户程序到磁盘镜像
|
||||
@ -96,13 +100,11 @@ cfg_content='set timeout=15
|
||||
menuentry "DragonOS" {
|
||||
multiboot2 /boot/kernel.elf "KERNEL_ELF"
|
||||
}'
|
||||
|
||||
# 增加insmod efi_gop防止32位uefi启动报错
|
||||
echo "echo '${cfg_content}' > ${boot_folder}/grub/grub.cfg" | sh
|
||||
fi
|
||||
|
||||
# rm -rf ${iso_folder}
|
||||
LOOP_DEVICE=$(lsblk | grep disk_mount|sed 's/.*\(loop[0-9]*\)p1.*/\1/1g'|awk 'END{print $0}')
|
||||
echo $LOOP_DEVICE
|
||||
case "$1" in
|
||||
--bios)
|
||||
case "$2" in
|
||||
|
Reference in New Issue
Block a user