目录
1.buildroot 下载
buildroot
源码肯定是要从
buildroot
官网下载,官网地址为
https://buildroot.org/
,
2.配置 buildroot
拷贝完成以后对其进行解压,命令如下:
tar -vxjf buildroot-2019.02.6.tar.bz2
解压完成以后就会得到一个名为“
buildroot-2019.02.6
”的目录,此目录就是我们解压得到
的
buildroot
源码,
buildroot
和
uboot
、
Linux kernel
一样也支持图形化配置,输入如下命令即可打开图形化配
置界:
make menuconfig
接下来我们就依次配置 buildroot,配置完成以后就可以进行编译了。
1、配置 Target options
2、配置 Toolchain
此配置项用于配置交叉编译工具链,也就是交叉编译器,这里设置为我们自己所使用的交
叉编译器即可。
buildroot
其实是可以自动下载交叉编译器的,但是都是从国外服务器下载的,
鉴于国内的网络环境,强烈推荐大家设置成自己所使用的交叉编译器。需要配置的项目和其对
应的内容如下:

Toolchain
下几个比较重要的选项需要说明一下,如下所示:
Toolchain
:设置为
Custom toolchain
,表示使用用户自己的交叉编译器。
Toolchain origin
:设置为
Pre-installed toolchain
,表示使用预装的交叉编译器。
Toolchain path
:设置自己安装的交叉编译器绝对路径!
buildroot
要用到。
Toolchain prefix
:设置交叉编译器前缀,要根据自己实际所使用的交叉编译器来设置,比
如我们使用的是
arm-linux-gnueabihf-gcc
,因此前缀就是
$(ARCH)-linux-gnueabihf
,其中
ARCH
我们前面已经设置为了
arm
。
3、配置 System configuration
此选项用于设置一些系统配置,比如开发板名字、欢迎语、用户名、密码等。需要配置的
项目和其对应的内容如下:

在 System configuration 选项中可以配置平台名字,登录密码等信息。
4、配置 Filesystem images
此选项配置我们最终制作的根文件系统为什么格式的,配置如下:

对于
I.MX6U
来说此选项不用配置,因为我们是通过
Mfgtool
工具将根文件系统烧写到开
发板上的
EMMC/SD
卡中,烧写的时候需要自己对根文件系统进行打包。
5、禁止编译 Linux 内核和 uboot
buildroot
不仅仅能构建根文件系统,也可以编译
linux
内核和
uboot
。当配置
buildroot
,使
能
linux
内核和
uboot
以后
buildroot
就会自动下载最新的
linux
内核和
uboot
源码并编译。但是
我们一般都不会使用
buildroot
下载的
linux
内核和
uboot
,因为
buildroot
下载的
linux
和
uboot
官方源码,里面会缺少很多驱动文件,而且最新的
linux
内核和
uboot
会对编译器版本号有要
求,可能导致编译失败。因此我们需要配置
buildroot
,关闭
linux
内核和
uboot
的编译,只使用
buildroot
来构建根文件系统,首先是禁止
Linux
内核的编译,配置如下:

接着禁止编译 Uboot,配置如下:
6、配置 Target packages
3.编译 buildroot
配置完成以后就可以编译
buildroot
了,编译完成以后
buildroot
就会生成编译出来的根文件
系统压缩包,我们可以直接使用。输入如下命令开始编译:
sudo make // 注意,一定要加 sudo ,而且不能通过 -jx 来指定多核编译!!!
buildroot
编译的时候会先从网上下载所需的软件源码,有些软件源码可能下载不下来,这
个时候就需要我们自行处理,这个后面会详细的讲解。
buildroot
编译过程会很耗时,可能需要几个小时,请耐心等待!
buildroot
因为要从网上下载源码,因此可能存在有些源码无法下载或下载很慢的情况,
我 们 可 以 自 行 到
https://cmake.org/files/v3.8/cmake-3.8.2.tar.gz
这个网站上去将
cmake-3.8.2.tar.gz
这个源码下载下 来,然后拷贝到 Ubuntu
中
buildroot
源码目录下的
dl
文件夹中,
dl
文件夹专用用于存放下载下 来的源码。
等待编译完成,编译完成以后就会在
buildroot-2019.02.6/output/images
下生成根文件系统,

从图
A1.2.2.2
可以看出,编译出来了多种格式的
rootfs
,比如
ext2
、
ext4
、
ubi
等。其中
rootfs.tar
就是打包好的根文件系统,我们就使用
rootfs.tar
进行测试。在
nfs
目录下新建一个名
为
buildrootfs
的文件夹,然后将图
A1.2.2.2
中的
rootfs.tar
拷贝到
buildrootfs
目录下并解压,命
令如下:
cd /home/zuozhongkai/linux/nfs //进入到 nfs 目录下mkdir buildrootfs //创建 buildrootfs 目录cd buildrootfs //进入到 buildrootfs 目录cp ../../IMX6ULL/tool/buildroot-2019.02.6/output/images/rootfs.tar ./ //拷贝到 rootfs.tartartar -vxf rootfs.tar //解压缩 rootfs.tarrm rootfs.tar //删除 rootfs.tar
首先要进入到
/lib/modules
目录,但是默认没有,因此需要我们自行创建
此目录。
buildroot
构建的根文件系统启动以后会输出我们前面设置的欢迎语“
Welcome to alpha
i.mx6ull
”。然后需要输入用户名和密码,用户名是“
root
”,密码就是我们前面配置
buildroot
的
时候设置的“
123456
”。输入用户名和密码以后就可以进入系统中.
4.buildroot 第三方软件和库的配置
我在前面学习的时候需要自行移植一些第三方的库和软件,比如
alsa-lib
、
alsa-utils
等等,
现在我们不需要自行移植这些第三方软件和库了,可以直接在
buildroot
里面配置使能。比如我
们现在配置使能
alsa-lib
、
alsa-utils
这两个软件和库。
1、使能 alsa-lib

2、使能 alsa-utils
注意,以前自己添加的文件并不会被删除掉的,
解压命令如下:
tar -vxf rootfs.tar
5.buildroot 下的 busybox 配置
1.busybox 配置
buildroot
在构建根文件系统的时候也是要用到
busybox
的,既然用到了
busybox
那么就涉
及到
busybox
的配置。
buildroot
会自动下载
busybox
压缩包,
buildroot
下载的源码压缩包都存
放在
/dl
目录下,在
dl
目录下就有一个叫做“
busybox
”的文件夹,此目录下保存着
busybox
压
缩包,如图
A1.4.1.1
所示:

要想编译
busybox
,必须对图
A1.4.1.1
中的压缩包进行解压缩,
buildroot
将所有解压缩后的软件保存在
/output/build
软件中,我们可以
在找到
/output/build/busybox-1.29.3
这个文件夹,此文件夹就是解压后的
busybox
源码,文件内
容如图
A1.4.1.2
所示:

如果大家想要修改
busybox
源码的话就直接在图
A1.4.1.2
中找到相应的文件,然后修改即
可。我们现在是要配置
buildroot
下的
busybox
,因此肯定要打开
busybox
的配置界面,在
buildroot
下打开
busybox
的配置界面输入如下命令:
sudo make busybox-menuconfig
输入以后就会打开 buildroot 下的 busybox 配置界面,如图 A1.4.1.3 所示:
图A1.4.1.3就是我们最熟悉的busybox配置界面了,大家想要配置什么就直接操作就行了,
2.busybox 中文字符的支持
3.编译 busybox
配置好以后就可以重新编译
buildroot
下的
busybox
,进入到
buildroot
源码目录下,输入如
下命令查看当前
buildroot
所有配置了的目标软件包,也就是
packages
:
sudo make show-targets
如 果我们想单独编译并安装 busybox
的话执行下面命令即可:
sudo make busybox
上述命令就会重新编译
busybox
。编译完成以后重新编译
buildroot
,主要是对其进行打包,
输入如下命令:
sudo make
重新编译完成以后查看一下
output/images
目录下
rootfs.tar
的创建时间是否为刚刚编译的,
如果不是的话就删除掉
rootfs.tar
,然后重新执行“
sudo make
”重新编译一下即可。最后我们使
用新的
rootfs.tar
启动
Linux
系统。
4.问题解决
我们使用构建的根文件系统启动以后会发现,输入命令的时候命令行前面一直都是“#
”,如果我们进入到某个目录的话前面并不会显示当前 目录路径,如图 A1.5.1
所示:

从图
A1.5.1
可以看出,我们当前所处的目录是
/etc
,但是前面的提示符一直是“
#
”,这样不
利于我们查看自己当前所处的路径。最好能像
Ubuntu
一样,可以指出当前登录的用户名,主机
名以及所处的目录,
我们现在就来设置,实现图
A1.5.2
中所示的效果。我们要先了解一下“
PS1
”这个环境变
量,
PS1
用于设置命令提示符格式,格式如下:
PS1 = ‘命令列表’命令列表中可选的参数如下:\! 显示该命令的历史记录编号。\# 显示当前命令的命令编号。\$ 显示 $ 符作为提示符,如果用户是 root 的话,则显示 # 号。\\ 显示反斜杠。\d 显示当前日期。\h 显示主机名。\n 打印新行。\nnn 显示 nnn 的八进制值。\s 显示当前运行的 shell 的名字。\t 显示当前时间。\u 显示当前用户的用户名。\W 显示当前工作目录的名字。\w 显示当前工作目录的路径
我们打开/etc/profile 文件,找到如下所示内容,然后将其屏蔽掉:
3 if [ "$PS1" ]; then
4 if [ "`id -u`" -eq 0 ]; then
5 export PS1='# '
6 else
7 export PS1='$ '
8 fi
9 fi
上述代码就是原始的设置
PS1
环境变量的配置代码,就是它将命令提示符设置为了固定
的“
#
”,我们将其屏蔽掉,然后输入如下所示内容:
/etc/profile 添加的内容1 PS1 = '[\u@\h]:\w$:'2 export PS1
第 2 行就是设置 PS1 环境变量,格式就是:
[user@hostname]:currentpath$:
设置好以后的/etc/profile 文件内容如图 A1.5.3 所示:
/etc/profile
文件修改完成以后重启开发板,这个时候我们就如到某个目录的时候命令行就 会有提示,