查看: 2041|回复: 0
收起左侧

RISC-V Tools编译安装三部曲之三

[复制链接]

  离线 

  • TA的每日心情
    奋斗
    2021-1-15 13:53
  • 签到天数: 26 天

    [LV.4]

    发表于 2020-8-18 10:06:04 | 显示全部楼层 |阅读模式

    有人预言,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。


    同样不要忘了我们的环境变量:

    1. $ export  TOP=/home/lh/RISCV

    2. $ export  RISCV=$TOP/riscv

    3. $ export  PATH=$PATH:$RISCV/bin
    复制代码

    二、Building BusyBox

    我们目前使用BusyBox开发,这是一组非常有用的实用程序,它们都编译成一个多用途的二进制文件。使得我们使用BusyBox而不需要修改源代码。你可以在https://www.busybox.net上获得源代码。在本例中,我们将使用BusyBox1.26.2,但其他版本应该有也可以正常工作。

    目前,我们需要它的程序init和ash,但有bash交叉编译的RISC-V,就不再需要ash了。


    第一步获取并解压缩源码:

    1. $curl -L http://busybox.net/downloads/busybox-1.26.2.tar.bz2 >busybox-1.26.2.tar.bz2

    2. $tar xvjf busybox-1.26.2.tar.bz2
    复制代码

    然后,输入目录并关闭所有配置选项:

    1. $ cd  busybox-1.26.2

    2. $make allnoconfig
    复制代码

    这一步的意思是将config中的所有选项全部改为no,然后我们再将自己需要的参数设置为yes。


    我们将需要更改交叉编译器,将编译设置为“静态”(如果需要,可以使其动态,但稍后必须复制一些库)。我们还将启用小程序init,ash,mount,同时,当ash的子选项的下拉菜单出现时,禁用对ash的作业控制。


    下面是一些我们必须要做的配置:

    1. ·CONFIG_STATIC=y, listed as “Build BusyBox as astatic binary (no shared libs)” in BusyBox Settings Build Options

    2. ·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

    3. ·CONFIG_INIT=y, listed as “init” in Init utilities

    4. ·CONFIG_ASH=y, listed as “ash” in Shells

    5. ·CONFIG_ASH_JOB_CONTROL=n, listed as “Ash → Job control” inShells

    6. ·CONFIG_MOUNT=y, listed as “mount” in Linux SystemUtilities

    7. ·CONFIG_FEATURE_USE_INITTAB=y, listed as “Support reading aninittab file” in Init Utilities
    复制代码

    这一步我们推荐使用图形化的界面来寻找这些参数:

    1. $ make   menuconfig
    复制代码

    在随后出现的控制页面中,你可以看到上面每个参数后面所列举的目录,使用键盘控制上下左右进入这些目录,并找到相应的选项,按下Y建选中,然后退出保存。


    menuconfig控制页面:


    国内芯片技术交流-RISC-V Tools编译安装三部曲之三risc-v单片机中文社区(1)




    这里选项较多,请耐心一个一个寻找


    $make -j16完成之后,我们需要编译BusyBox,因为我们已经通过cross-compiler指定过prefix了,所以无需再去指定$ARCH。


    此时依然不要忘记我们的环境变量,因为其中使用了riscv64-unknown-linux-gnu-gcc,如果提示命令未找到,就要查看我们的PATH中有没有设置他的路径。


    等完成以后,就可以在RISC-V上运行BusyBox二进制交叉编译了。现在,我们需要一种方式让内核访问二进制文件,并为此使用一个根磁盘映像。在我们继续之前,返回Linux源代码目录。

    1. $ cd  $TOP/linux-4.14.12
    复制代码

    三、创建一个 Root Disk Image


    我们使用initramfs来存储二进制文件(特别是BusyBox)。目前,我们有一个根文件系统预先打包,专门为RISC-V release。创建自己的initramfs,应该拥有以下几个目录:


    l  /bin

    l  /dev

    l  /etc

    l  /lib

    l  /proc

    l  /sbin

    l  /tmp


    使用下面的命令创建这些目录/usr

    1. $mkdir root

    2. $ cd  root

    3. $mkdir  -p  bin etc dev lib proc sbin sys tmp usr usr/bin usr/lib usr/sbin
    复制代码

    然后,将我们刚刚编译的BusyBox可执行文件放到/bin中

    1. $ cp  $TOP/busybox-1.26.2/busybox bin
    复制代码

    如果你已经静态地构建了BusyBox,那么就只需要这些了。如果您想动态地构建BusyBox,您需要遵循一个稍微不同的过程。我们还需要在/etc文件夹中的inittab中准备一个初始化表,在/etc目录下新建文件inittab,并写入如下内容

    1. ::sysinit:/bin/busyboxmount -t proc proc /proc

    2. ::sysinit:/bin/busyboxmount -t tmpfs tmpfs /tmp

    3. ::sysinit:/bin/busyboxmount -o remount,rw /dev/htifblk0 /

    4. ::sysinit:/bin/busybox--install -s

    5. /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行以调用该代码:

    1. ::respawn:/bin/busybox getty 38400ttyHTIF0
    复制代码

    一旦引导了Linux并创建了第4行的符号链接,它们将在Linux内核的引导之间保持不变。这将在随后的内核引导过程中造成一系列的错误。在下一次引导时,注释掉第4行。


    此外,我们还需要创建一个指向/bin/busybox的符号链接,以便init工作。

    1. $ ln -s  ../bin/busybox sbin/init

    2. $ ln -s  sbin/init init
    复制代码

    我们还需要一个用于控制台的字符设备:

    1. sudo mknod dev/console c 5 1
    复制代码

    我们准备创建我们的initramfs,<riscv-linux>为riscv-linux的路径:

    1. find. | cpio --quiet -o -H newc > <riscv-linux>/rootfs.cpio
    复制代码

    配置Linux以嵌入创建的cpio存档。在riscv-linux文件夹中运行:

    1. make  ARCH=riscv menuconfig
    复制代码

    进入General Setup,标记为“Initial RAM filesystem and RAM disk”。然后转到选项“Initramfs source file”,然后输入Enter键将其更改为“rootfs.cpio”。然后退出所有返回并保存到.config。



    不要忘记重新构建riscv-linuxriscv-pk

    1. cd <riscv-linux>

    2. make -j4 ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- vmlinux

    3. cd <riscv-pk>/build

    4. rm -rf *

    5. ../configure--prefix=$RISCV --host=riscv64-unknown-linux-gnu--with-payload=<riscv-linux>/vmlinux

    6. make

    7. make install
    复制代码

    现在,我们已经准备好用shell启动一个最基本的内核。调用RISC-V架构的模拟器spike,该命令如下所示:

    1. $ spike bbl vmlinux
    复制代码

    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单片机中文网




    上一篇:RISC-V Tools编译安装三部曲之二
    下一篇:[计算机硬件] RISC-V 汇编指令笔记
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条



    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-11-6 07:56 , Processed in 0.505174 second(s), 49 queries .

    快速回复 返回顶部 返回列表