有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 新ちゃん 于 2020-8-20 23:19 编辑
RISC-V Tools编译安装三部曲之一
RISC-V Tools编译安装三部曲之二
RISC-V Tools编译安装三部曲之三
一、前言
在上两期中我们已经完成了RISC-VGCC/Newlib Toolchain、GNUtoolchain for RISC-V, ISA Simulator等工具的编译安装。并使用riscv64-unknown-linux-gnu-gcc编译了我们的linux内核。这一期我们来编译安装BusyBox。
同样不要忘了我们的环境变量: - $ export TOP=/home/lh/RISCV
- $ export RISCV=$TOP/riscv
- $ export PATH=$PATH:$RISCV/bin
复制代码
二、Building BusyBox
我们目前使用BusyBox开发,这是一组非常有用的实用程序,它们都编译成一个多用途的二进制文件。使得我们使用BusyBox而不需要修改源代码。你可以在https://www.busybox.net上获得源代码。在本例中,我们将使用BusyBox1.26.2,但其他版本应该有也可以正常工作。 目前,我们需要它的程序init和ash,但有bash交叉编译的RISC-V,就不再需要ash了。
第一步获取并解压缩源码: - $curl -L http://busybox.net/downloads/busybox-1.26.2.tar.bz2 >busybox-1.26.2.tar.bz2
- $tar xvjf busybox-1.26.2.tar.bz2
复制代码
然后,输入目录并关闭所有配置选项: - $ cd busybox-1.26.2
- $make allnoconfig
复制代码
这一步的意思是将config中的所有选项全部改为no,然后我们再将自己需要的参数设置为yes。
我们将需要更改交叉编译器,将编译设置为“静态”(如果需要,可以使其动态,但稍后必须复制一些库)。我们还将启用小程序init,ash,mount,同时,当ash的子选项的下拉菜单出现时,禁用对ash的作业控制。
下面是一些我们必须要做的配置: - ·CONFIG_STATIC=y, listed as “Build BusyBox as astatic binary (no shared libs)” in BusyBox Settings Build Options
- ·CONFIG_FEATURE_INSTALLER=y, listed as“Support –install [-s] toinstall applet links at runtime” in BusyBox Settings General ConfigurationCONFIG_CROSS_COMPILER_PREFIX=riscv64-unknown-linux-gnu-,listed as “Cross Compiler prefix” inBusyBox Settings Build Options
- ·CONFIG_INIT=y, listed as “init” in Init utilities
- ·CONFIG_ASH=y, listed as “ash” in Shells
- ·CONFIG_ASH_JOB_CONTROL=n, listed as “Ash → Job control” inShells
- ·CONFIG_MOUNT=y, listed as “mount” in Linux SystemUtilities
- ·CONFIG_FEATURE_USE_INITTAB=y, listed as “Support reading aninittab file” in Init Utilities
复制代码
这一步我们推荐使用图形化的界面来寻找这些参数:
在随后出现的控制页面中,你可以看到上面每个参数后面所列举的目录,使用键盘控制上下左右进入这些目录,并找到相应的选项,按下Y建选中,然后退出保存。
menuconfig控制页面:
这里选项较多,请耐心一个一个寻找
$make -j16完成之后,我们需要编译BusyBox,因为我们已经通过cross-compiler指定过prefix了,所以无需再去指定$ARCH。
此时依然不要忘记我们的环境变量,因为其中使用了riscv64-unknown-linux-gnu-gcc,如果提示命令未找到,就要查看我们的PATH中有没有设置他的路径。
等完成以后,就可以在RISC-V上运行BusyBox二进制交叉编译了。现在,我们需要一种方式让内核访问二进制文件,并为此使用一个根磁盘映像。在我们继续之前,返回Linux源代码目录。
三、创建一个 Root Disk Image
我们使用initramfs来存储二进制文件(特别是BusyBox)。目前,我们有一个根文件系统预先打包,专门为RISC-V release。创建自己的initramfs,应该拥有以下几个目录:
l /bin l /dev l /etc l /lib l /proc l /sbin l /tmp
使用下面的命令创建这些目录/usr - $mkdir root
- $ cd root
- $mkdir -p bin etc dev lib proc sbin sys tmp usr usr/bin usr/lib usr/sbin
复制代码
然后,将我们刚刚编译的BusyBox可执行文件放到/bin中 - $ cp $TOP/busybox-1.26.2/busybox bin
复制代码
如果你已经静态地构建了BusyBox,那么就只需要这些了。如果您想动态地构建BusyBox,您需要遵循一个稍微不同的过程。我们还需要在/etc文件夹中的inittab中准备一个初始化表,在/etc目录下新建文件inittab,并写入如下内容 - ::sysinit:/bin/busyboxmount -t proc proc /proc
- ::sysinit:/bin/busyboxmount -t tmpfs tmpfs /tmp
- ::sysinit:/bin/busyboxmount -o remount,rw /dev/htifblk0 /
- ::sysinit:/bin/busybox--install -s
- /dev/console::sysinit:-/bin/ash
复制代码
第1行将profs文件系统挂载到/proc上。
第2行对tmpfs也做了类似的操作。
第3行将HTIF虚拟块设备(Htifbd)安装到根上。
第4行在/bin和其他地方安装各种BusyBox小程序符号逻辑链接,以使运行它们更加方便。
最后,第5行在HTIF-virtualized TTY (控制台,映射为ttyHTIF)上打开一个用于连接的ash shell。
如果你想使用getty,请更改第5行以调用该代码: - ::respawn:/bin/busybox getty 38400ttyHTIF0
复制代码
一旦引导了Linux并创建了第4行的符号链接,它们将在Linux内核的引导之间保持不变。这将在随后的内核引导过程中造成一系列的错误。在下一次引导时,注释掉第4行。
此外,我们还需要创建一个指向/bin/busybox的符号链接,以便init工作。 - $ ln -s ../bin/busybox sbin/init
- $ ln -s sbin/init init
复制代码
我们还需要一个用于控制台的字符设备: - sudo mknod dev/console c 5 1
复制代码
我们准备创建我们的initramfs,<riscv-linux>为riscv-linux的路径: - find. | cpio --quiet -o -H newc > <riscv-linux>/rootfs.cpio
复制代码
配置Linux以嵌入创建的cpio存档。在riscv-linux文件夹中运行: - make ARCH=riscv menuconfig
复制代码
进入General Setup,标记为“Initial RAM filesystem and RAM disk”。然后转到选项“Initramfs source file”,然后输入Enter键将其更改为“rootfs.cpio”。然后退出所有返回并保存到.config。
不要忘记重新构建riscv-linux和riscv-pk! - cd <riscv-linux>
- make -j4 ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- vmlinux
- cd <riscv-pk>/build
- rm -rf *
- ../configure--prefix=$RISCV --host=riscv64-unknown-linux-gnu--with-payload=<riscv-linux>/vmlinux
- make
- make install
复制代码
现在,我们已经准备好用shell启动一个最基本的内核。调用RISC-V架构的模拟器spike,该命令如下所示:
vmlinux是编译后的Linux内核二进制文件的名称。
如果没有问题,引导过程完成后会出现一个ash提示。如果没有通常的大量命令行实用程序,它将是非常无用的,但是您可以将它们添加为BusyBox小程序。
使用ctrl c,退出模拟器,。
到这里我们差不多已经完成了所有的安装任务,如果你还需要了解更多,可以查看RISC-V的官网: https://riscv.org.如果希望在内核的后续引导中重用磁盘映像,请记住删除(或注释掉)创建到BusyBox小程序的符号链接的行。不然的话,它将在每次后续引导中生成几个警告。
参考文献 [1] RISC-Vofficial network:https://riscv.org/software-tools/ [2]README of RISC-VGNU Compiler Toolchain: https://github.com/riscv/riscv-gnu-toolchain
本篇完,感谢关注:RISC-V单片机中文网
|