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

目录

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

二、Buildroot 配置

1、Target options 配置

2、Toolchain配置

3、System configuration配置

4、Filesystem images配置

5、禁止编译 Linux 内核和 uboot

6、Target packages配置

7、buildroot 下的 busybox 配置

三、编译 buildroot

四、根文件系统测试

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

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


本文文件:编译好的文件系统(包含 buildroot、roofts、配置文件等)

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

busybox

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

2、lib 库文件,驱动开发分第三方软件(alsaiperfmplayer)等需要自己移植。

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

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

1、有 Buildroot 的所有功能。

2、上手难度较 Buildroot 更大, 有很多概念、语法需要理解,编译要求配置高

3、相比buildroot功能强大,能实现一些buildroot目前不好实现的功能,比如生成Ubuntu的烧写镜像。

二、Buildroot 配置

Buildroot 的官方网站是:https://buildroot.org/下载地址

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

可以直接用以下方式获取:

wget https://buildroot.org/downloads/buildroot-2019.02.6.tar.bz2

解压:

tar -xjvf buildroot-2019.02.6.tar.bz2

进入图形界面配置:

make menuconfig

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

1、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指令集

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 = 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

4、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

5、禁止编译 Linux 内核和 uboot

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

6、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 使能该项,并且此目录下的软件全部选中

7、buildroot 下的 busybox 配置

在 buildroot 下使用以下命令打开 busybox 的配置界面:
sudo make busybox-menuconfig

执行下面的命令后会生成  /output/build/busybox-1.29.3  文件夹,就是解压后的 busybox 源码。
进入   /output/build/busybox-1.29.3  文件夹:
1、修改 Makefile :

2busybox 中文字符支持

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

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

3、编译 busybox

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

sudo make show-targets

 (2)单独编译并安装 busybox

sudo make busybox

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

sudo make

三、编译 buildroot

1、编译

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

2、编译完成:

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

四、根文件系统测试

1、设置根文件系统从 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'

根文件系统运行正常:

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

修改 /etc/profile 文件:

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

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

[user@hostname]:currentpath$:

改为以下内容:

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值