100ASK-IMX6ULL开发板使用busybox构建根文件系统

1. 为什么使用busybox?

现在可以用于构建根文件系统的软件有很多,比如buildroot,yocto,而且这些软件构建的根文件系统软件更全,为什么要使用busybox呢,因为比较简单,对于我这种初学者来说,从简单开始学习才是最好的,可以了解原理,原理清楚了,再使用其他软件来构建就简单多了。

2. 编译busybox构建根文件系统

2.1 构建环境:

  1. gcc: 100ask_imx6ull-sdk\ToolChain\gcc-linaro-6.2.1-2016.11-x86_64_arm-linux- gnueabihf
  2. linux: linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2
  3. 主机系统: ubuntu18.04
    gcc可以在百问网提供的bsp包找到,busybox使用的版本是nxp官方的busybox-1.29.0.tar.bz2, 点击下载busybox-1.29.0.tar.bz2

2.2 配置编译busybox

  1. 解压busybox-1.29.0.tar.bz2:
tar -vxjf busybox-1.29.0.tar.bz2
  1. 修改Makefile,添加编译器,打开busybox的根目录中的Makefile,将164行修改为:
CROSS_COMPILE ?= /home/book/share/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-

将路径修改为自己的交叉编译工具的绝对路径,将190行修改为:

ARCH ?= arm
  1. 配置busybox,busybox有三种配置选项:
  • defconfig,默认配置
  • allyesconfig,全选配置,使能busybox中的所有功能
  • allnoconfig,最小配置
    使用默认配置,执行:
make defconfig

然后打开图形配置界面,执行:

make menuconfig

分别配置下面的路径:

Location:
  -> Settings
	-> Build static binary (no shared libs) //取消选中,动态编译,不然编译出来的根文件系统很大
Location:
  -> Settings
	-> vi-style line editing commands  //选中
Location:
  -> Linux Module Utilities
	-> Simplified modutils   //取消选中
Location:
  -> Linux System Utilities
	-> mdev (16 kb) //确保下面的全部选中,默认都是选中的
  1. 配置完busybox就可以编译了,执行:
make install CONFIG_PREFIX=/home/book/nfs_rootfs/blogrootfs

CONFIG_PREFIX指定输出路径,指向nfs服务器的路径即可。编译完成后可以查看rootfs路径下的文件:
在这里插入图片描述

  1. 向根文件系统添加lib
    在rootfs下创建lib文件夹,在usr下创建lib文件夹。
  • 进入交叉编译器存放的目录,将arm-linuxgnueabihf/libc/lib下的*so*和*.a拷贝到rootfs/lib下:
 cp *so* *.a ~/nfs_rootfs/blogrootfs/lib/ -d

后面的“-d”表示拷贝符号链接。在rootfs中lib执行ls ld-linux-armhf.so.3 -l,可以看到ld-linux-armhf.so.3是一个软链接,所以需要重新复制一下。先删除rootfs/lib下的ld-linux-armhf.so.3,然后进入arm-linuxgnueabihf/libc/lib执行:

cp ld-linux-armhf.so.3 ~/nfs_rootfs/blogrootfs/lib/

再次查看rootfs/lib下的ld-linux-armhf.so.3,已经不是软链接了。

  • 进入交叉编译器存放的目录,将arm-linuxgnueabihf/lib下的*so*和*.a拷贝到rootfs/lib下:
 cp *so* *.a ~/nfs_rootfs/blogrootfs/lib/ -d
  • 进入交叉编译器存放的目录,将arm-linuxgnueabihf/libc/usr/lib下的*so*和*.a拷贝到rootfs/usr/lib下:
 cp *so* *.a ~/nfs_rootfs/blogrootfs/usr/lib/ -d

可能会有警告,不用管。

  1. 创建其它文件夹
    在rootfs根目录下创建文件夹:dev、 proc、 mnt、 sys、 tmp、root,创建完后如下图示:
    在这里插入图片描述
  2. 测试根文件系统
    测试根文件系统一般都使用NFS,在内核启动时指定使用的nfs服务器以及路径,在uboot启动后,设置bootargs为:
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs rootwait rw nfsroot=192.168.101.5:/home/book/nfs_rootfs/rootfs ip=192.168.101.6:192.168.101.5:192.168.101.1:255.255.255.0::eth0:off'
/* root=/dev/nfs nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>] ip=<client-ip>:<server-ip>:<gwip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>*/

设置好后保存环境变量,然后使用tftp加载内核和设备树并启动:

tftp 80800000 zImage
tftp 83000000 imx6ull-100ask-emmc.dtb
bootz 80800000 - 83000000

启动完成后如下图:
在这里插入图片描述
可以执行基本的命令了,但是提示没有/etc/init.d/rcS文件,所以需要完善一下文件系统。

3. 完善根文件系统

3.1 创建/etc/init.d/rcS文件

linux启动后需要运行一些服务,而 /etc/init.d/rcS文件就是规定启动哪些服务,创建该文件并添加如下内容:

#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH
LD_LIBRARY_PATH=
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值