西部数据公司之前开发了Linux 和 BusyBox RISC-V NOMMU,并成功地在由勘智K210智能芯片提供动力的 Sipeed-Maix-Go 模块上启动了一个小型的 Linux 操作系统。
实际上,Linux 5.5原计划是用来支持RISC-V NOMMU的,现在它的新内核也已经发布了。而且 Damien Le Moal 还发布了最新版的程序代码,可以使用 Buildroot 构建 Linux 以及为 RISC-V 64 位 NOMMU 平台进行顶层设计。
我按照 Github 上的操作指南开始进行构建的时候,由于 Linux 5.6 RC1 压缩包的缺失结果就失败了。不过,我注意到在“Vowstart”上有人在继续 Damien 的工作,而且写了详细的操作说明。所以,接下来我会使用运行Ubuntu 18.04系统的计算机再次进行构建尝试。
我们首先必须确保安装了相关的程序文件:
1 2 |
sudo apt install build-essential device-tree-compiler bison \ flex file git curl wget cpio python unzip rsync bc texinfo |
然后,我们可以检索源代码并做一些准备工作(比如:提取 Linux 5.6 RC1 压缩包):
1 2 3 4 |
git clone https://github.com/vowstar/k210-linux-nommu.git cd k210-linux-nommu export PROJ_ROOT=$(pwd) sh ./prepare_buildroot.sh |
下一步是构建工具链。因为有很多代码文件需要从 Internet 上构建和下载,这就会将需要较长的时间:
1 2 3 |
cd "$PROJ_ROOT/riscv64-nommu-buildroot" make riscv64_nommu_defconfig make -j8 |
构建成功后,显示如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 |
mkdir -p /home/jaufranc/edev/Kendryte/k210-linux-nommu/riscv64-nommu-buildroot/output/target/etc ( \ echo "NAME=Buildroot"; \ echo "VERSION=2020.02-git-g6cb52b1e6"; \ echo "ID=buildroot"; \ echo "VERSION_ID=2020.02-git"; \ echo "PRETTY_NAME=\"Buildroot 2020.02-git\"" \ ) > /home/jaufranc/edev/Kendryte/k210-linux-nommu/riscv64-nommu-buildroot/output/target/usr/lib/os-release ln -sf ../usr/lib/os-release /home/jaufranc/edev/Kendryte/k210-linux-nommu/riscv64-nommu-buildroot/output/target/etc >>> Sanitizing RPATH in target tree PER_PACKAGE_DIR=/home/jaufranc/edev/Kendryte/k210-linux-nommu/riscv64-nommu-buildroot/output/per-package /home/jaufranc/edev/Kendryte/k210-linux-nommu/riscv64-nommu-buildroot/support/scripts/fix-rpath target touch /home/jaufranc/edev/Kendryte/k210-linux-nommu/riscv64-nommu-buildroot/output/target/usr |
现在,我们可以安装 RISCV64 工具链,该工具链将用于交叉编译:
1 2 |
sudo cp -r output/host /opt/riscv64-uclibc export PATH=/opt/riscv64-uclibc/bin:$PATH |
接下来是为 Kendryte K210 NOMMU 处理器构建 Buildroot 框架:
1 2 3 4 |
cd "$PROJ_ROOT/busybox" make k210_nommu_defconfig make SKIP_STRIP=y make SKIP_STRIP=y install |
最后一步将文件复制到 $PROJ_ROOT/rootfs_k210 文件夹中。
在我参考的操作说明中,他们为能够在开发板上生成代码,就构建了Tiny C Compiler编译器。其实我个人认为没有必要这样,因为在这种低端的硬件上,大多数人可能会更喜欢交叉编译代码,但不管了,我们继续往下走:
1 2 3 4 |
cd "$PROJ_ROOT/tinycc" ./configure --prefix=/usr --cross-prefix=riscv64-linux- --cpu=riscv64 --extra-cflags="-DCONFIG_TCC_STATIC=1" --extra-ldflags=-Wl,-elf2flt=-r make make DESTDIR=../rootfs_k210 install |
他们还制作了一个脚本来设置 k210 rootfs CPIO 映像,并将其复制到了 linux-kernel/k210.cpio 的目录下。
1 2 |
<span class="pl-c1">cd</span> <span class="pl-smi">$PROJ_ROOT</span> sh ./prepare_k210_cpio.sh |
现在,我们终于可以构建 Linux 5.6-RC1 内核了:
1 2 3 |
cd "$PROJ_ROOT/linux-kernel" make ARCH=riscv CROSS_COMPILE=riscv64-linux- nommu_k210_defconfig make ARCH=riscv CROSS_COMPILE=riscv64-linux- -j |
我手头上没有 Sipeed MAIX 模块,因此我没有尝试这一部分,但是如果你的模块可以通过/ dev / ttyUSB 连接,就可以按照下面的方法刷新,然后生成镜像:
1 2 3 4 5 |
sudo usermod -a -G uucp $(whoami) sudo usermod -a -G dialout $(whoami) sudo python3 -m pip install kflash kflash -B dan -b 3000000 -p /dev/ttyUSB0 arch/riscv/boot/loader.bin python3 -m serial.tools.miniterm --raw --filter colorize /dev/ttyUSB0 115200 |
前两行是将当前用户添加到 dialout 组,无需生成 root 便可获得对/dev/ttyUSB0 的访问权限了。第三行是安装 kflash 程序,接下来的命令是将镜像转储到内部闪存上,最后一行是获得对模块的终端访问权。
如果出现了上图的情况,就表示你现在可以在一些价格便宜的 RISC-V 硬件上运行Linux系统了。比如 Sipeed MAIX Bit,售价大约是14美元左右。大家要注意,从技术上来讲,它应该叫做 uCLinux,你只需使用 8MB RAM 的,就能解决在处理器中由于没有内存管理单元而经常遇到的堆栈溢出问题。

文章翻译者:Rita Wang,CNX中文站翻译人员,文字功底扎实,将科技文献以通俗易懂的形式呈现给读者,对开源硬件、AI、IoT等领域多有涉猎。