使用Buildroot编译文件系统

使用Buildroot构建根文件系统
Buildroot简介
制作根文件系统有归多种方法:
① 使用Busybox手工制作
Busybox本身包含了很了Linux命令,但是要编译其他程序的话需要手工下载、编译,如果它需要某些依赖库,你还需要手工下载、编译这些依赖库。
如果想做一个极简的文件系统,可以使用Busybox手工制作。
② 使用Buildroot自动制作
它是一个自动化程序很高的系统,可以在里面配置、编译内核,配置编译u-boot、配置编译根文件系统。在编译某些APP时,它会自动去下载源码、下载它的依赖库,自动编译这些程序。
Buildroot的语法跟一般的Makefile语法类似,很容易掌握。
③ 使用Yocto
NXP、ST等公司的官方开发包是使用Yocto,但是Yocto语法复杂,并且Yocto动辄10GB,下载安装都很困难,普通笔记本编译可能需要2-3天甚至更久,非常不适合初学者(我们不推荐使用yocto构建文件系统)。
基于上述特点,我们选择Buildroot。
Buildroot是一组Makefile和补丁,可简化并自动化地为嵌入式系统构建完整的、可启动的Linux环境(包括bootloader、Linux内核、包含各种APP的文件系统)。Buildroot运行于Linux平台,可以使用交叉编译工具为多个目标板构建嵌入式Linux平台。Buildroot可以自动构建所需的交叉编译工具链,创建根文件系统,编译Linux内核映像,并生成引导加载程序用于目标嵌入式系统,或者它可以执行这些步骤的任何独立组合。例如,可以单独使用已安装的交叉编译工具链,而Buildroot仅创建根文件系统。

buildroot下进入menuconfig包选择配置配置界面
book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make menuconfig 

buildroot下单独编译内核
book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make  linux-rebuild 

buildroot下进入内核make menuconfig配置选项界面
book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make linux-menuconfig

buildroot下单独编译u-boot
book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make uboot-rebuild
 
buildroot下单独编译某个软件包
book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make <pkg>-rebuild

buildroot下进入busybox配置界面
book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make busybox-menuconfig

buildroot下生成系统sdk,最后生成的目录在output/images/目录下
book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make 

sdk

编译完整系统过程
(1).进入开发板的SDK目录下(SDK已经有Buildroot包,并且配置号交叉编译工具链)
在这里插入图片描述

100ask_imx6ull_pro_ddr512m_systemV_core_defconfig 使用systemV守护进程的系统(包含基本工具集包)
在这里插入图片描述

(2).接着在这目录下执行make命令来进行 Buildroot 的配置

book@100ask:~/100ask_imx6ull-sdk/Buildroot_2020.02.x$ make clean
book@100ask:~/100ask_imx6ull-sdk/Buildroot_2020.02.x$
make 100ask_imx6ull_pro_ddr512m_systemV_qt5_defconfig

(3).Buildroot 的配置完后,
在buildroot目录下进入menuconfig包选择配置配置界面查看配置
在这里插入图片描述

(4)查看完后然后执行命令make all,保存乌班图联网,编译时间较长5-6小时

(5).生成的镜像文件
编译成功后文件输出路径为 output/images
在这里插入图片描述

100ask_imx6ull-14x14.dtb  是板子设备树
zImage                    内核镜像
u-boot-dtb.imx			  u-boot镜像
rootfs.tar.bz2            文件系统
100ask-imx6ull-pro-512d-systemv-v1.img   最终系统镜像
├── 100ask_imx6ull-14x14.dtb	<--设备树文件	
			├── rootfs.ext2					<--ext2格式根文件系统
			├── rootfs.ext4 -> rootfs.ext2		<--ext2格式根文件系统	
			├── rootfs.tar					
			├── rootfs.tar.bz2				<--打包并压缩的根文件系统,用于NFSROOT启动
			├── 100ask-imx6ull-pro-512d-systemv-v1.img			<--完整的系统镜像(可以用来烧写emmc和sd卡)
			├── u-boot-dtb.imx				<--u-boot镜像
			└── zImage					<--内核镜像
把上面编译出来的emmc.img烧写到EMMC,把上面编译出来的100ask-imx6ull-pro-512d-systemv-v1.img烧写到SD/TF卡。

(6).
build目录在这里插入图片描述
下是编译的所有包缓存数据
Host目录下所需的工具进行具体交叉编译
在这里插入图片描述
targrt目录下是一个开发板文件系统的目录
在这里插入图片描述

(7).烧写
使用NFS根文件系统时,涉及3个文件:zImage、设备树(比如100ask_imx6ull-14x14.dtb)、rootfs.tar.bz2(解压到Ubuntu某个目录,比如/home/book/nfs_rootfs)

U-Boot中通过tftpboot命令从Ubuntu/Windows中下载内核文件zImagen、100ask_imx6ull-14x14.dtb,设置Uboot启动参数使用Ubuntu的某个目录(比如/home/book/nfs_rootfs)作为根文件系统。

把使用buildroot构建得到的根文件系统rootfs.tar.bz2(在buildroot系统output/images目录下),即复制到/home/book/nfs_rootfs网络文件目录下

book@100ask:~/100ask_imx6ull-sdk/Buildroot_2020.02.x/output/images$ cp -rf  rootfs.tar.bz2  ~/nfs_rootfs/
book@100ask:~/100ask_imx6ull-sdk/Buildroot_2020.02.x/output/images$ cd ~/nfs_rootfs
book@100ask:~/nfs_rootfs$ sudo tar  xjf  rootfs.tar.bz2 

进入uboot界面

使用mobaxterm工具打开开发板串口,此时将开发板上电,在打印u-boot时按下任意键进入uboot界面。
在这里插入图片描述

使用网络启动文件系统
Uboot只能使用eth0,网线必须接入eth0,

先在Ubuntu的TFTP目录中放入zImage和设备树文件,再在/home/book/nfs_rootfs目录下解压好根文件系统。
然后在U-Boot控制台执行以下命令启动单板,假设Ubuntu IP是192.168.1.224:

=> setenv serverip 192.168.1.224     //设置服务器的IP地址,这里指的是Ubuntu主机IP
=> setenv ipaddr 192.168.1.112		 //设置开发板的IP地址。
=> setenv nfsroot /home/book/nfs_rootfs   //设置nfs文件系统所在目录。
=> run netboot			//设置完成后,运行网络启动系统命令
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吴凯你在想啥呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值