编译环境为M1pro芯片的macOS Sonoma14.2.1,架构为ARM64,riscv64版本为riscv64-unknown-elf-gcc13.2.0
首先ARCH选择了riscv64,将脚本中一系列linux独有的命令修改为适应macOS的命令后还是遇到了问题。
首先尝试直接运行make run
:
报错为:
之后还出现了类似的报错,例如:
以及有版本match问题:
最后还提醒我缺少了一个crate?
尝试解决这些问题无果后,我在运行了docker的环境下尝试运行make run-docker
,结果在安装riscv64版本的grub时遇到这个报错:
我自己修改后安装grub的脚本如下
# 检测当前 Shell 类型
if [ -n "$ZSH_VERSION" ]; then
CURRENT_SHELL=zsh
elif [ -n "$BASH_VERSION" ]; then
CURRENT_SHELL=bash
elif [ -n "$KSH_VERSION" ]; then
CURRENT_SHELL=ksh
elif [ -n "$FCEDIT" ]; then
CURRENT_SHELL=ksh
elif [ -n "$PS3" ]; then
CURRENT_SHELL=unknown
else
CURRENT_SHELL=sh
fi
# 在 macOS 上,默认情况下,系统使用 Bash shell
source "$HOME/.${CURRENT_SHELL}rc"
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
grub_dir_riscv64_efi=${ABS_PREFIX}/arch/riscv64/efi/grub
# 创建目录
sudo mkdir -p ${grub_dir_i386_efi}
sudo mkdir -p ${grub_dir_i386_legacy}
sudo mkdir -p ${grub_dir_x86_64_efi}
sudo mkdir -p ${grub_dir_riscv64_efi}
# 检查是否已安装 Grub
if [ -d ${grub_dir_i386_efi}/bin ] && [ -d ${grub_dir_i386_legacy}/bin ] && [ -d ${grub_dir_x86_64_efi}/bin ] && [ -d ${grub_dir_riscv64_efi}/bin ]; then
exit 0
fi
# 准备编译环境
xcode-select --install
# 下载 Grub 2.06
if [ ! -f "grub-2.06.tar.xz" ]; then
echo "正在下载 Grub 2.06"
curl -LO https://mirrors.ustc.edu.cn/gnu/grub/grub-2.06.tar.xz || exit 1
echo "下载完成"
fi
tar xvf grub-2.06.tar.xz
cd grub-2.06
# 安装依赖
brew install make bison gettext gawk
echo "开始编译安装 Grub 2.06"
# 如果不存在 riscv64_efi 的 Grub,则编译安装
if [ ! -d ${grub_dir_riscv64_efi}/bin ]; then
echo "开始编译安装 riscv64_efi 版本的 Grub"
./configure --host=riscv64-unknown-elf-gcc --target=riscv64 --with-platform=efi --prefix=${grub_dir_riscv64_efi} --disable-werror || exit 1
make -j $(sysctl -n hw.logicalcpu) || exit 1
sudo make install || exit 1
make clean || exit 1
sudo chmod -R 777 ${grub_dir_riscv64_efi}
fi
cd ..
rm -rf grub-2.06
rm grub-2.06.tar.xz*
echo "Grub 2.06 安装完成"
google只看到了08年有人在Linux环境下遇到了同样的问题且对方给出的解决方案里需要修改的变量我这边没有找到…
有前辈能帮忙看看吗TT