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

2023-11-14

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命令配置,如果出现如下错误:

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

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

1、配置Target options 

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

2、配置 Toolchain

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

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



 

3、配置System configuration 

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

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

4、配置 Filesystem images

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

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

5、 禁止编译 Linux 内核和 uboot

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

 6、禁止编译u-boot

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

三、buildroot编译

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

sudo make

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

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

解决方法:sudo apt-get install python

configure: error: you should not run configure as root (set FORCE_UNSAFE_CONFIGURE=1 in environment to bypass this check)
See `config.log' for more details
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 还是动态编译,静
态编译的话就不需要库文件,但是编译出来的库会很大。此处不选中静态编译。

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) //确保下面的全部选中,默认都是选中的

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

Location:
    -> Settings
        -> Support Unicode //选中
            -> 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 = ‘命令列表’

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

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

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

        添加内容如下:

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



 

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

构建Buildroot根文件系统(I.MX6ULL) 的相关文章

随机推荐

  • 测试用例----测试大纲法

    一 应用场合 在一个程序中涉及多个窗口 每个窗口有多个操作 窗口和窗口之间有一定的联系 或者说操作之间的联系 为了弄清它们之间的联系 使用测试大纲法 二 使用测试大纲法分析程序 1 列大纲 提纲 分析需求 列出所有的窗口以及每个窗口包含的操
  • MQTT 固定报头 中 剩余长度字段的计算

    剩余长度 简介 位置 固定报头中 从第2个字节开始 剩余长度等于可变报头的长度 10字节 加上有效载荷的长度 剩余长度 Remaining Length 表示当前报文剩余部分的字节数 包括可变报头和负载的数据 剩余长度不包括用于编码剩余长度
  • 什么是区块链----概念

    前言 从2016年年初开始 区块链这个概念越来越热越来越火 有人说他可以颠覆金融行业 也有人觉得这就是个噱头 这个2016火起来的技术其实早在2008年 比特币的诞生就基于区块链 技术火归火 落地的应用却没有那么多 周围的朋友同学都听说过这
  • 搭建Serv-U FTP服务器共享文件外网远程访问「无公网IP」

    文章目录 1 前言 2 本地FTP搭建 2 1 Serv U下载和安装 2 2 Serv U共享网页测试 2 3 Cpolar下载和安装 3 本地FTP发布 3 1 Cpolar云端设置 3 2 Cpolar本地设置 4 公网访问测试 5
  • linux系统通过docker安装oracle远程访问(附带相关问题解决方案)

    文章目录 一 虚拟机网络配置 二 安装docker 三 拉取oracle镜像并配置 四 设置oracle支持外部连接访问 重难点 总结 一 虚拟机网络配置 虚拟机配置的方案 1 桥接模式 虚拟机和主机共用同一个网段 适用于固定网络的开发环境
  • auto refresh

    div user div
  • TCP为什么需要三次握手进行连接,二次或四次不可以吗?

    一 三次握手的作用 为了确认双方具有接收和发送的能力 二 三次握手的原因 1 可以阻止重复历史连接的初始化 主要原因 2 可以同步双方的初始序列号 3 可以避免资源的浪费 三 分析原因 1 为了防止旧的重复连接初始化造成混乱 当客户端发送了
  • 嵌入式软件中如何排查bug?

    明确Bug现象 要准确描述Bug出现的场景 现象 能复现就最好 查看日志信息 嵌入式系统日志可以帮助定位问题 看是否有报错 异常信息 用仿真工具调试 许多嵌入式芯片都有相应的仿真调试工具 可以在仿真环境下单步跟踪 查看变量值等 加打印调试
  • C# DataSet和DataTable:将查询结果保存到DataSet或DataTable中

    在执行对表中数据的查询时还能将数据保存到 DataSet 中 但需要借助 DataAdapter 类来实现 在实际应用中 DataAdapter 与 DataSet 是在查询操作中使用最多的类 此外 还可以通过 DataSet 实现对表中数
  • android pdf框架

    系列文章目录 第一章 android pdf框架 文章目录 系列文章目录 前言 一 主流pdf解析库有哪些 二 对比与使用 1 库对比 2 使用方式 总结 前言 pdf已经使用很普遍了 android上的好用的pdf工具也有不少 个人更经常
  • 倪文迪陪你学蓝桥杯2021寒假每日一题:(2017省赛A第1、2题)

    2021年寒假每日一题 2017 2019年的省赛真题 本文内容由倪文迪 华东理工大学计算机系软件192班 和罗勇军老师提供 文章目录 一 2017年蓝桥杯软件类 C语言大学A组 1 迷宫 2 跳蚱蜢 2 1 建模 2 2 判重 2 3 m
  • 罗技MX Keys从蓝牙连接切换为优联(无线接收器)连接

    不知道什么原因用最近MX Keys蓝牙连接mac怪卡的 按一个键按四五下电脑上才有反应 于是还是想用无线接收器连接来控制电脑 按照壳子上按fn o来切换好像不太管用 于是试了很久 最后用罗技自家的键盘管理软件切换上了 先下一个Logi Op
  • 链表与约瑟夫环 - JavaScript版

    前言 在很多编程语言中 数组需要预先给定一个长度 添加新的元素很难 而且添加 删除等操作也比较烦 需要循环操作 JavaScript提供了push 和splice 等函数来解决这类问题 注意 在js中数组是对象 Object js没有内置链
  • Linux系统调优 之 《OpenStack平台调度策略优化》

    目录 1 规划节点 2 基础准备 案例实施 1 OpenStack平台报错分析 2 解决策略 1 规划节点 根据云平台分配的主机 节点规划见表1 表1 节点规划 IP 主机名 节点 192 168 200 11 controller 控制节
  • delphi ado 动态连接数据库

    unit Unit1 interface uses Windows Messages SysUtils Variants Classes Graphics Controls Forms Dialogs StdCtrls DB ADODB E
  • Contains Duplicate III

    Given an array of integers find out whether there are two distinct indices i and j in the array such that the difference
  • 常用问题网址

    https www leonelngande com fetching the current route fragment in angular 7 RxJS https github com manojjha86 complete an
  • Router-Link详解

  • 文件(或文件夹)的复制(Java)

    将源文件 或目录 复制到另一个目录里 三种方法 1 最普通的方法 主要用File类中的方法和IO流相关的类进行递归复制 2 主要用Files类中的copy 方法递归复制 3 主要用Files类中的copy 方法和walkFileTree 方
  • 构建Buildroot根文件系统(I.MX6ULL)

    Busybox构建的根文件系统只有一些常用的命令和文件 Buildroot不仅集成了 busybox 而且还集成了各种常见的第三方库和软件 开发环境 Buildroot 版本 buildroot 2019 02 6 tar gz 虚拟机 4