下载源代码并交叉编译riscv FreeBSD系统和内核

发布于:2024-05-14 ⋅ 阅读:(184) ⋅ 点赞:(0)

RISCV系统曾经让人神秘到无法接触,交叉编译更是只有耳闻,现在随着RISCV的普及,它们神秘的面纱已经被慢慢揭开。

交叉编译作为RISCV系统中的一个重要环节,也随着RISCV的普及而变得更加容易理解和操作。交叉编译允许开发者在一个平台上编译生成另一个平台上的可执行代码,这对于开发嵌入式系统、操作系统和固件等非常有用。随着RISCV生态系统的完善和工具链的成熟,交叉编译占开发者们日常工作的比重越来越大。

让我们通过交叉编译riscv FreeBSD系统和内核来学习和掌握这项技术吧!

下载FreeBSD源代码

首先下载源代码,可以使用git下载

先pkg安装git

pkg install git

然后git clone 下载FreeBSD源码

git clone https://git.FreeBSD.org/src.git /usr/src

如果git太慢,也可以到网站下载src源码包

比如官方:https://download.freebsd.org/snapshots/riscv/15.0-CURRENT/src.txz

国内镜像一般都没有FreeBSD15 riscv,所以要去官网下。

fetch https://download.freebsd.org/snapshots/riscv/15.0-CURRENT/src.txz

下载后解开到/usr/src目录:

tar -xzvf src.txz 

执行交叉编译

FreeBSD默认使用LLVM进行交叉编译,如果没有,使用pkg install llvm14安装。

然后到/usr/src目录执行:

make TARGET_ARCH=riscv64 buildworld
make TARGET_ARCH=riscv64 buildkernel

即可。当然也可以选择

riscv64-gcc 进行交叉编译,比如先pkg install riscv64-gcc13 安装,
然后再用riscv64-gcc13来进行交叉编译:
make CROSS_TOOLCHAIN=riscv64-gcc13 TARGET_ARCH=riscv64 buildworld

make CROSS_TOOLCHAIN=riscv64-gcc13 TARGET_ARCH=riscv64 buildkernel

编译起来显示如下:

make[1]: "/home/skywalk/usr/src/Makefile.inc1" line 337: SYSTEM_COMPILER: Determined that CC=cc matches the source tree.  Not bootstrapping a cross-compiler.
make[1]: "/home/skywalk/usr/src/Makefile.inc1" line 342: SYSTEM_LINKER: Determined that LD=ld matches the source tree.  Not bootstrapping a cross-linker.
--------------------------------------------------------------
>>> World build started on Tue May  7 17:23:40 CST 2024
--------------------------------------------------------------

--------------------------------------------------------------
>>> Cleaning up the temporary build tree
--------------------------------------------------------------
rm -rf /usr/obj/home/skywalk/usr/src/riscv.riscv64/tmp

--------------------------------------------------------------
>>> Rebuilding the temporary build tree
--------------------------------------------------------------
cd /home/skywalk/usr/src/tools/build;  make DIRPRFX=tools/build/ DESTDIR=/usr/obj/home/skywalk/usr/src/riscv.riscv64/tmp/legacy installdirs
[Creating objdir /usr/obj/home/skywalk/usr/src/riscv.riscv64/tools/build...]
mkdir -p /usr/obj/home/skywalk/usr/src/riscv.riscv64/tmp/legacy/bin /usr/obj/home/skywalk/usr/src/riscv.riscv64/tmp/legacy/lib/geom /usr/obj/home/skywalk/usr/src/riscv.riscv64/tmp/legacy/usr/include/casper /

这里显示“Not bootstrapping a cross-compiler.” 不明白为什么不bootstrapping 交叉编译器.... 

当然,对于大多数人,如果不进行交叉编译(在AMD64编译RISCV),直接在AMD64平台编译AMD64的FreeBSD world和kernel,直接使用

make   buildworld 

make   buildkernel 

即可编译出当前系统的FreeBSD系统来。


网站公告

今日签到

点亮在社区的每一天
去签到