【Linux系统移植】Buildroot 根文件系统构建

1、 根文件构建工具比较:

busybox

一、只是构建一些经常使用的命令和文件。linux

二、lib 库文件,驱动开发分第三方软件(alsaiperfmplayer)等须要本身移植。架构

三、默认没有用户名和密码设置。app

Buildroot
一、包含  busybox
二、集成了各类常见的第三方库和软件。
三、能够 构建交叉编译工具链、根文件系统、 uboot 以及 Linux 核镜像。
四、相比更简单,相似内核配置的操做,容易理解,编译要求的配置和磁盘空间要求较小
yocto

一、有 Buildroot 的全部功能。ide

二、上手难度较 Buildroot 更大, 有不少概念、语法须要理解,编译要求配置高工具

三、相比buildroot功能强大,能实现一些buildroot目前很差实现的功能,好比生成Ubuntu的烧写镜像。测试

 

2、Buildroot 配置

Buildroot 的官方网站是:https://buildroot.org/网站

使用的 buildroot 版本: buildroot-2019.02.6.tar.bz2ui

make menuconfig

Target options
配置平台架构等
Toolchain
配置交叉编译工具链(路径、版本等)
System configuration
系统配置(板名、欢迎语、用户名、密码等)
Filesystem images
根文件系统配置(格式等)
Kernel
使能(失能)内核编译
Bootloaders
使能(失能)Bootloaders 编译

 

一、Target options 配置

Target options
-> Target Architecture = ARM (little endian) //目标平台
-> Target Binary Format = ELF //目标二进制格式
-> Target Architecture Variant = cortex-A7 //目标架构    
-> Target ABI = EABIhf //目标ABI
-> Floating point strategy = NEON/VFPv4 //浮点策略
-> ARM instruction set = ARM //ARM指令集

 

二、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) //选中

 

三、System configuration配置

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

 

四、Filesystem images配置

-> Filesystem images
-> [*] ext2/3/4 root filesystem //若是是 EMMC 或 SD 卡的话就用 ext3/ext4
-> ext2/3/4 variant = ext4 //选择 ext4 格式
-> [*] ubi image containing an ubifs root filesystem //若是使用 NAND 的话就用 ubifs

 

五、禁止编译 Linux 内核和 uboot

禁止编译 Linux 内核:
-> Kernel
-> [ ] Linux Kernel //不要选择编译 Linux Kernel 选项!
禁止编译 Uboot
-> Bootloaders
-> [ ] U-Boot //不要选择编译 U-Boot 选项!

 

六、Target packages配置

配置要选择的 第三方库或软件 、好比 alsa-utils ffmpeg iperf 等工具。
 
1 、使能 alsa-lib
Target packages
-> Libraries
-> Audio/Sound 
-> -*- alsa-lib ---> 使能该项,此配置项下的文件所有选中

 

2 、使能 alsa-utils
Target packages 
-> Audio and video applications 
-> alsa-utils 使能该项,而且此目录下的软件所有选中

 
 

七、buildroot 下的 busybox 配置

 
 /output/build/busybox-1.29.3  文件夹就是解压后的 busybox 源码。
 
在 buildroot 下使用如下命令打开 busybox 的配置界面:
sudo make busybox-menuconfig
 
 
一、修改 Makefile :
 
 
 

2busybox 中文字符支持spa

若是默认直接编译 busybox 的话,在使用 SecureCRT 的时候中文字符是显示不正常的,中文字符会显示为“? ”。
 
修改  /output/build/busybox-1.29.3/libbb/printable_string.c 文件:

 

修改  /output/build/busybox-1.29.3/libbb/unicode.c 文件:3d

 

三、编译 busybox

(1)使用如下命令查看当前 buildroot 全部配置了的目标软件包,也就是 packages

sudo make show-targets

 (2)单独编译并安装 busybox

sudo make busybox

(3)编译完成之后编译 buildroot

sudo make

 

3、编译 buildroot

一、编译

sudo make //必定要加 sudo,不能经过-jx 多核编译
  • buildroot 编译的时候会先从网上下载所需的软件源码,下载的源码压缩包都存放在 /dl 目录下。
  • buildroot 将全部解压缩后的软件保存在/output/build 软件中。

二、编译完成:

 

三、buildroot-2019.02.6/output/images 下生成根文件系统:
 
 
 
复制到 nfs 目录下并解压缩:
 
 
 

4、根文件系统测试

一、设置根文件系统从 nfs/buildrootfs 启动

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.137.18:/home/pjw/linux/nfs/buildrootfs ip=192.168.137.20:192.168.137.18:192.168.1.1:255.255.255.0::eth0:off'

根文件系统运行正常:

 
 
 
 

二、修改已显示当前当前登陆的用户名,主机名以及所处的目录

修改 /etc/profile 文件:

 
 

原始的设置 PS1 环境变量的配置代码,就是它将命令提示符设置为了固定的“#”。

改成设置 PS1 环境变量,格式就是:

[user@hostname]:currentpath$:

改成如下内容:

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

 

修改 /etc/profile 文件完成之后重启开发板,能够看到显示了用户名等: