我正在尝试在ARMv8基础模型上获得FreeBSD端口。 我正在关注[1]的维基。但是,我无法超越构建工具链的步骤。
a)根据第一步,我可以下载所有binutils,它位于我的主目录中。
b)接下来要求更改根Makefile的PATH。所以我把它改成了
**export PATH= $PATH:/aarch64-freebsd-sandbox/toolchain/build/aarch64-none-freebsd10/bin/**
c)接下来,步骤是制作内核工具链。但是当我输入
**make kernel-toolchain TARGET=arm64**
它出错了
**make: *** No rule to make target `kernel-toolchain'. Stop.**
我确实回显了$ PATH,发现路径添加正确。
可能是什么问题?
[1] https://wiki.freebsd.org/arm64
谢谢!
答案 0 :(得分:1)
要做到这一点,你必须从一个有效的FreeBSD系统开始。 Linux的交叉编译不起作用。如果您使用的是FreeBSD 10,则可以使用附带的svnlite
,如果您使用的是早期版本,则需要安装/usr/ports/devel/subversion
端口。
首先,你需要按照维基上的描述构建binutil。
然后你应该下载维基页面上提到的分支。此分支应安装在/usr/src
(首先备份内容,以防您必须重建当前系统!);
# mv /usr/src /usr/orig-src
# mkdir /usr/src
# svnlite co https://svn0.us-west.FreeBSD.org/base/projects/arm64 /usr/src
然后编辑Makefile
中的/usr/src
以包含特殊binutils 的路径。否则,将首先找到您正在运行的任何架构的正常二进制文件,这将无效。
之后你可以构建内核工具链;
# cd /usr/src
# make kernel-toolchain TARGET=arm64
# make _includes TARGET=arm64
然后你必须构建加载器;
# make buildenv TARGET=arm64
这将打开一个新shell。从那个shell你应该运行;
# make -C lib/libstand obj all
# make -C sys/boot -DWITHOUT_FORTH obj all
不要退出那个shell,因为还有更多。我假设内核构建过程或多或少是标准的,在wiki上没有提到;
# make buildkernel
此命令需要在make buildenv
打开的shell中运行。
注意:不运行make installkernel
。这可能会让您的x86 PC带有ARM内核。 : - )
wiki没有提到构建用户空间,它只显示启动过程,因此我不知道它是否有效。
您需要一个Linux机器(或VM)来运行ARMv8仿真器。您将必须提供您为此模拟器构建的内核和引导加载程序,但我不知道如何执行此操作。你肯定需要在freebsd-arm邮件列表中接受它!