前言:相较于busybox, buildroot配置完成后不需要自己建立文件,移植库文件,而且也可以配置许多软件,不需要后期自己去下载,编译,移植,要更加方便
1. 准备工作
1.1 下载
1.2 在虚拟机下解压
2. 配置buildroot
2.1 配置 Target options
Target options ---> Target Architecture (ARM (little endian)) ---> ARM (little endian) ----> (选中它, 回车选中) Target Binary Format (ELF) ---> ELF ----> (选中它, 回车选中) Target Architecture Variant (cortex-A7) ---> cortex-A7 ----> (选中它, 回车选中) Target ABI (EABIhf) ---> EABIhf ----> (选中它, 回车选中) Floating point strategy (NEON/VFPv4) ---> NEON/VFPv4 ----> (选中它, 回车选中) ARM instruction set (ARM) ---> ARM ----> (选中它, 回车选中)
2.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 = 5.16.x or later // 工具链内核版本号 -> External toolchain C library = glibc/eglibc -> [*] Toolchain has SSP support? (NEW) //选中 -> [*] Toolchain has RPC support? (NEW) //选中 -> [*] Toolchain has C++ support? //选中 -> [*] Enable MMU support (NEW) //选中
工具链内核版本查看方法:
在工具链根目录下执行命令"find -name “version.h”,找到该文件具体路径,查看该文件内容的LINUX_VERSION_CODE值,将其转为16进制就是工具链内核版本号
所以:版本号为4.0
2.3 配置 System configuration
System configuration -> System hostname = fire_imx6ull //平台名字,自行设置 -> System banner = Welcome to fire i.mx6ull //欢迎语 -> Init system = BusyBox //使用 busybox -> /dev management = Dynamic using devtmpfs + mdev //使用 mdev -> [*] Enable root login with password (NEW) //使能登录密码 -> Root password = hxd123 //登录密码为 hxd123
2.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
3. 编译
执行命令编译, 注意不能 make -jx 指定多核编译
sudo make
编译完成后会在output/images下看到rootfs.tar压缩包,建立一个保存根文件系统的目录,将压缩包拷贝到哪里并解压
4. 挂载根文件系统
修改/etc/exports, 将buildrootfs文件夹作为nfs文件系统的目录
在uboot命令行下配置新的路径buildrootfs,其中的地址和网关与你的环境有关
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.107:/home/hxd/buildrootfs,proto=tcp rw ip=192.168.1.108:192.168.1.107:192.168.1.1:255.255.255.0::eth0:off';saveenv
5. 配置buildroot内部的busybox
配置的目的是为了解决中文字符显示问题
在编译buildroot时会自动下载busybox软件包,所在位置buildroot根目录/output/build/busybox-xxx
5.1 修改源代码
修改libbb/printable_string.c文件的FAST_FUNC printable_stringh函数,注释下面两句
修改libbb/unicode.c文件中的unicode_conv_to_printable2函数
5.2 通过图形化界面配置
在buildroot根目录下输入如下命令进入图形化配置界面
sudo make busybox-menuconfig
具体配置参考:移植BusyBox根文件系统到野火开发板的1.5部分
5.3 编译
在buildroot根目录下依次执行如下命令
sudo make busybox sudo make
重新解压,挂载,成功!!!!
6. 设置命令提示符
目的为了像ubuntu的提示符一样,有用户名,有当前文件路径等信息
这种命令提示符其实是由一个环境变量PS1控制的,所以我们只需要修改这个环境变量即可,配置规则如下:
\! 显示该命令的历史记录编号。 \# 显示当前命令的命令编号。 \$ 显示$符作为提示符,如果用户是 root 的话,则显示#号。 \\ 显示反斜杠。 \d 显示当前日期。 \h 显示主机名。 \n 打印新行。 \nnn 显示 nnn 的八进制值。 \s 显示当前运行的 shell 的名字。 \t 显示当前时间。 \u 显示当前用户的用户名。 \W 显示当前工作目录的名字。 \w 显示当前工作目录的路径
修改文件etc/profile,注意是在你的buildrootfs目录下,别去修改你的ubuntu虚拟机去了
ok