i.MX8MQ Busybox 制作最小根文件系统

关键字 :i.MX8 BSPNXP

在i.MX8 linux 嵌入式开发时,有时需要轻量化的文件系统,比如需要快速启动系统,NFS 挂载进行驱动调试等等。由于恩智浦 Yocto Project 提供的文件系统过大,这时就需要我们自己制作并剪裁一个轻量化的文件系统。       BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,包含了 Android 系统的自带的shell。

BusyBox 将许多具有共性的小版本的UNIX工具结合到一个单一的可执行文件。这样的集合可以替代大部分常用工具比如GNU fileutils , shellutils等工具,BusyBox提供了一个比较完善的环境,可以适用于任何小的嵌入式系统。      本文使用最新的 BusyBox-1.32.0 版本,在ubuntu18.04 上交叉编译一个适用于 i.MX8MQ 使用的文件系统。

 

一、 获得交叉编译工具链

本操作中的交叉编译工具链是编译 i.MX8 MQ Yocto 项目获得,执行如下命令:

$ bitbake core-image-minimal -c populate_sdk

 

在路径 build/tmp/deploy/sdk/ 下会生成工具链安装脚本

fsl-imx-xwayland-glibc-x86_64-core-image-minimal-aarch64-toolchain-4.14-sumo.sh

 

执行该脚本,将工具安装在想安装的路径下即可:

$ ./ fsl-imx-xwayland-glibc-x86_64-core-image-minimal-aarch64-toolchain-4.14-sumo.sh

 

二、 编译 Busybox

       ① 下载 Busybox 源代码。

    

https://busybox.net/downloads/ ,这里下载的是 busybox-1.32.0.tar.bz2 。

             

       ②使用   $tar -jxvf busybox-1.32.0.tar.bz2 命令解压,解压后如下图所示:

      

 

 

       ③编译:

       1)首先导入交叉工具链

       $ cd busybox-1.31.1

$ source your path/toolchain/environment-setup-aarch64-poky-linux 

$ echo $CC

   

 

 

 

2)配置编译选项 $ make menuconfig  

     Settings -------->  Cross compiler prefix  //将上一步中打印出来的“--sysyroot”的值复制给该设置即可

 

 

 

 

 

 

 

 

3)修改 Makefile   $ vim Makefile

     修改交叉工具链(164行)CROSS_COMPILE ?= aarch64-pocky-linux-

      

 

        

       修改 CC 变量赋值方法(291 行)

      

 

 

4) 开始编译

$ make

$ make CONFIG_PREFIX=/path/_install //此处的路径为需要挂载的 rootfs 目录

    编译结果如下,在自己设定的需要挂载的 rootfs 目录下生成了一个小文件系统,包括 bin 、 linuxrc 、 sbin 、 usr 、 dev 。

      

 

 

 

 

 

       ④继续构建文件系统:增加串口调试节点,启动脚本,操作如下:

$ cd dev

$ sudo mknod console c 5 1

$ sudo mknod NULL c 1 3

$ cd ..

$ sudo mkdir lib

$ sudo cp -r toolchain/sysroots/lib/* lib/

$ sudo mkdir etc

$ sudo vim etc/inttab

      console::askfirst:-/bin/sh

$ sudo chown root -R *

$ sudo chgrp root -R *

$ cd ..

$ sudo chown 777 NFS-8mq

      //此处的 NFS-8mq 为需要挂载的 rootfs 文件夹名

$ sudo chown root NFS-8mq

$ sudo chgrp root NFS-8mq

 

       ⑤ 将以上构建出来的根文件系统,拷贝到启动 SD 卡的 rootfs 分区,或者 NFS挂载路径,即可通过 i.MX8MQ 内核挂载。

 

 

 

参考资料:

  1. https://busybox.net/
  2. MX Linux Reference Manual

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论