查看: 3376|回复: 3

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

[复制链接]
  • TA的每日心情
    开心
    2019-11-4 13:48
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2018-10-12 14:10:03 | 显示全部楼层 |阅读模式
    分享到:
    撰稿人:李浩

    一、前言

    在上两期中我们已经完成了RISC-VGCC/Newlib Toolchain、GNUtoolchain for RISC-V, ISA Simulator等工具的编译安装。并使用riscv64-unknown-linux-gnu-gcc编译了我们的linux内核。这一期我们来编译安装BusyBox。

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

    $ export  TOP=/opt/RISCV

    $ export  RISCV=$TOP/riscv

    $ export  PATH=$PATHRISCV/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

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

    $ make   menuconfig

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

    menuconfig控制页面:
    1.png

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

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

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

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

    $ 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

    $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,该命令如下所示:
    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

    原文:https://blog.csdn.net/l919898756 ... 456?utm_source=copy

    相关阅读:
    RISC-V Tools编译安装三部曲之一
    RISC-V Tools编译安装三部曲之二
    RISC-V Tools编译安装三部曲之三
    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 22:46
  • 签到天数: 596 天

    连续签到: 3 天

    [LV.9]以坛为家II

    发表于 2018-10-15 14:47:25 | 显示全部楼层
    这个都是模拟运行的么,有么有芯片或者板子,搞一个玩一把
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2024-9-4 09:09
  • 签到天数: 48 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2018-10-17 10:07:41 | 显示全部楼层
    robe.zhang 发表于 2018-10-15 14:47
    这个都是模拟运行的么,有么有芯片或者板子,搞一个玩一把

    月底可能会上一块risc v的试用板子
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 22:46
  • 签到天数: 596 天

    连续签到: 3 天

    [LV.9]以坛为家II

    发表于 2018-10-17 12:54:19 | 显示全部楼层
    satoll 发表于 2018-10-17 10:07
    月底可能会上一块risc v的试用板子

    及时雨呀,快上,
    RISC-V 最近风头不小呀,arm 授权价格高,便宜了 RISV-C 了
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-19 22:48 , Processed in 0.136334 second(s), 22 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.