• 构建Buildroot根文件系统(I.MX6ULL)


    Busybox构建的根文件系统只有一些常用的命令和文件。

    Buildroot不仅集成了 busybox,而且还集成了各种常见的第三方库和软件。

    开发环境

    Buildroot 版本:buildroot-2019.02.6.tar.gz
    虚拟机:#44~20.04.1-Ubuntu
    交叉编译器:arm-linux-gnueabihf-gcc (Linaro GCC 4.9-2017.01) 4.9.4
    Linux 内核:linux-4.15

    一、Buildroot源码下载

            官网地址为:Buildroot - Making Embedded Linux Easy,网页打开后如下图所示:

            点击DOWNLOAD进入下载界面,如下图所示:

            对于每个版本的源码都有两种压缩格式可下载,选择其一下载即可。此次我才用以前已经下载好的源码进行构建:2019.02.6版本

    二、 配置 buildroot

            使用如下命令进行解压:

    tar -vxjf buildroot-2019.02.6.tar.bz2

            解压完成后文件如下图所示:

            使用命令,打开图形化界面

    make menuconfig

    输入make menuconfig命令配置,如果出现如下错误:

    1. make[2]: *** [Makefile:253:/home/zyc/linux/tools/buildroot-2019.02.6/output/build/buildroot-config/dochecklxdialog] 错误 1
    2. make[1]: *** [Makefile:926:/home/zyc/linux/tools/buildroot-2019.02.6/output/build/buildroot-config/mconf] 错误 2
    3. make: *** [Makefile:84:_all] 错误 2

    错误的原因:由于是新安装的ubuntu虚拟机,没有安装配置界面相关的库。
    解决方法:sudo apt-get install libncurses-dev 

    1、配置Target options 

    1. Target options
    2. -> Target Architecture = ARM (little endian) //目标架构,ARM小端模式
    3. -> Target Binary Format = ELF //二进制文件格式ELF
    4. -> Target Architecture Variant = cortex-A7 //I.MX6ULL是cortex-A7架构
    5. -> Target ABI = EABIhf //应用程序二进制结构为EABIhf
    6. -> Floating point strategy = NEON/VFPv4 //浮点运算策略
    7. -> ARM instruction set = ARM //arm 汇编指令集,选择为 ARM 指令集

    2、配置 Toolchain

            此配置项用于配置交叉编译工具链,也就是交叉编译器。

    1. Toolchain
    2. -> Toolchain type = External toolchain
    3. -> Toolchain = Custom toolchain //用户自己的交叉编译器
    4. -> Toolchain origin = Pre-installed toolchain //预装的编译器
    5. -> Toolchain path =/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf
    6. -> Toolchain prefix = $(ARCH)-linux-gnueabihf //前缀
    7. -> External toolchain gcc version = 4.9.x
    8. -> External toolchain kernel headers series = 4.1.x
    9. -> External toolchain C library = glibc/eglibc
    10. -> [*] Toolchain has SSP support? (NEW) //选中
    11. -> [*] Toolchain has RPC support? (NEW) //选中
    12. -> [*] Toolchain has C++ support? //选中
    13. -> [*] Enable MMU support (NEW) //选中



     

    3、配置System configuration 

    此选项用于设置一些系统配置,比如开发板名字、欢迎语、用户名、密码等。需要配置的
    项目和其对应的内容如下:
     

    1. System configuration
    2. -> System hostname = buildroot //平台名字,自行设置
    3. -> System banner = Welcome to buildroot //欢迎语
    4. -> Init system = BusyBox //使用 busybox
    5. -> /dev management = Dynamic using devtmpfs + mdev //使用 mdev
    6. -> [*] Enable root login with password (NEW) //使能登录密码
    7. -> Root password = 123456 //登录密码为 123456

    4、配置 Filesystem images

    此选项配置我们最终制作的根文件系统为什么格式的,配置如下:

    1. -> Filesystem images
    2. -> [*] ext2/3/4 root filesystem //如果是 EMMC 或 SD 卡的话就用 ext3/ext4
    3. -> ext2/3/4 variant = ext4 //选择 ext4 格式

    5、 禁止编译 Linux 内核和 uboot

    1. -> Kernel
    2. -> [ ] Linux Kernel //不要选择编译 Linux Kernel 选项!

     6、禁止编译u-boot

    1. -> Bootloaders
    2. -> [ ] U-Boot //不要选择编译 U-Boot 选项!

    三、buildroot编译

            通过一下命令开始编译buildroot源码 

    sudo make

    ​输入 sudu make 命令配置,如果出现如下错误:

    1. You must install 'python' on your build machine
    2. make: *** [support/dependencies/dependencies.mk:27:dependencies] 错误 1

    解决方法:sudo apt-get install python

    1. configure: error: you should not run configure as root (set FORCE_UNSAFE_CONFIGURE=1 in environment to bypass this check)
    2. See `config.log' for more details
    3. make: *** [package/pkg-generic.mk:231:/home/zyc/linux/tools/buildroot-2019.02.6/output/build/host-tar-1.29/.stamp_configured] 错误 1

    解决方法:修改顶层Makefile,加入环境变量 

    export FORCE_UNSAFE_CONFIGURE=1 
    

    编译结束后如下所示,rootfs.tar就是打包好的根文件系统。

    在nfs目录下创建buildrootfs文件夹,并将rootfs.tar拷贝并解压,最后删除rootfs.tar,如下图所示:

    buildroot 根文件系统测试
             启动 uboot,修改 bootargs 环境变量,设置 nfsroot 目录为 Ubuntu 中的buildrootfs 目录,命令如下:

    bootargs=console=tty1 console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.107:/home/zyc/linux/nfs/buildrootfs rw ip=192.168.1.99:192.168.1.107:192.168.1.1:255.255.255.0::eth0:off

    log信息提示/lib/modules不存在,因此需要手动创建。

    buildroot 构建的根文件系统启动以后会输出我们前面设置的欢迎语“Welcome to Buildroot”。然后需要输入用户名和密码,用户名是“root”,密码就是我们前面配置 buildroot 的时候设置“123456”。

    可以看出的 buildroot 构建的根文件系统运行基本没有问题,剩下的就是根据自己的需求使能第三方软件。

    四、配置buildroot下的busybox

            1、配置busybox

            buildroot构建根文件系统是基于busybox的,因此也需要对busybox进行相应的配置。其中busybox的压缩包是buildroot自动下载的,如图所示:

    所有解压缩的源码位于/output/build/busybox-1.29.3目录中:

    下面开始进行busybox的配置,在buildroot目录下输入以下命令,打开图形化配置界面:

    sudo make busybox-menuconfig

    ① 选项“Build static binary (no shared libs)”用来决定是静态编译 busybox 还是动态编译,静
    态编译的话就不需要库文件,但是编译出来的库会很大。此处不选中静态编译。

    1. Location:
    2. -> Settings
    3. -> Build static binary (no shared libs)

    ② 继续配置以下配置项

    1. Location:
    2. -> Settings
    3. -> vi-style line editing commands

    ③ 继续配置如下路径配置项:

    1. Location:
    2. -> Linux Module Utilities
    3. -> Simplified modutils

    ④ 继续配置

    1. Location:
    2. -> Linux System Utilities
    3. -> mdev (16 kb) //确保下面的全部选中,默认都是选中的

    ⑤ 最后就是使能 busybox 的 unicode 编码以支持中文,配置路径如下:

    1. Location:
    2. -> Settings
    3. -> Support Unicode //选中
    4. -> Check $LC_ALL, $LC_CTYPE and $LANG environment variables //选中

     

    2、busybox中文支持 

    打开文件 /libbb/printable_string.c,找到函数 printable_string,缩减后的函数内容如下:

     接着打开文件 /libbb/unicode.c,找到如下内容:

    配置完后需要重新编译busybox,命令如下:

    sudo make busybox

    最后编译buildroot,对busybox进行打包:

    sudo make

    最后我们使用新的 rootfs.tar,解压到nfs目录下,启动 Linux 系统。

    我们使用构建的根文件系统启动以后会发现,输入命令的时候命令行前面一直都是“#”,如果我们进入到某个目录的话前面并不会显示当前目录路径。

            首先了解PS1 用于设置命令提示符格式,格式如下:

    PS1 = ‘命令列表’

    命令列表中可选的参数如下:

    1. \! 显示该命令的历史记录编号。
    2. \# 显示当前命令的命令编号。
    3. \$ 显示$符作为提示符,如果用户是 root 的话,则显示#号。
    4. \\ 显示反斜杠。
    5. \d 显示当前日期。
    6. \h 显示主机名。
    7. \n 打印新行。
    8. \nnn 显示 nnn 的八进制值。
    9. \s 显示当前运行的 shell 的名字。
    10. \t 显示当前时间。
    11. \u 显示当前用户的用户名。
    12. \W 显示当前工作目录的名字。
    13. \w 显示当前工作目录的路径

     随后修改一下文件/etc/profile:

            添加内容如下:

    1. PS1='[\u@\h]:\w$:'
    2. export PS1



     

    /etc/profile 文件修改完成以后重启开发板,这个时候我们就如到某个目录的时候命令行就
    会有提示,如图所示:

    命令提示符显示正常了,完整的显示除了用户名、主机名和当前路径。至此, buildroot 构建根文件系统就已经全部完成了。第三方软件使能可以根据自己的实际需求。

  • 相关阅读:
    Eclipse自定义注释
    OpenCV的二值化处理函数threshold()详解
    【树莓派】raspberry pi控制超声波测距
    FPGA 20个例程篇:9.DDR3内存颗粒初始化写入并通过RS232读取(下)
    【Java系列】一篇文章快速了解Java语言概述
    “威胁”员工全来上班后,马斯克“尴尬”了:车没地停、工位不够坐、Wi-Fi 还太差
    内网穿透工具之花生壳(二)
    【微信小程序】canvasToTempFilePath遇到的问题
    【C#进阶】C#语法中一些常用知识点总结
    八股文第九天
  • 原文地址:https://blog.csdn.net/qq_42174306/article/details/126147648