我移植的板子是讯为i.MX8MM开发板,参考板为官方 8MMINILPD4-EVK开发板。
- iMX8MM uboot2021.04 linux5.15.32移植
- iMX8MM启动流程
- iMX8MM u-boot2021.04移植
- iMX8MM linux5.15.32移植
- iMX8MM buildroot-2022.02.5构建根文件系统
1. 获取源码
到Buildroot官网下载最新的长期支持版本,这里下载buildroot-2022.02.5
将下载好的源码上传到Ubuntu上,进行解压。
$ tar -xvf buildroot-2022.02.5.tar.xz
2. 添加板子
我们只需要复制官方开发板的配置文件,即可完成我们自己开发板的配置,在源码目录下执行以下命令。
$ cd configs/
$ cp freescale_imx8mmevk_defconfig imx8mm_topeet_defconfig
3. 配置
首先配置复制的默认配置,然后再在复制的配置上进行修改。
$ make imx8mm_topeet_defconfig
执行$ make menuconfig
打开配置界面,只需要把移植好的uboot和linux kernel配置进去即可。
移植好的源码可以通过git下载,我把代码上传到了GitHub。我就直接使用这个链接,这个链接大家也可以作为参考学习。进入Bootloaders选项配置uboot,ATF我们使用的版本是lf_v2.6分支,uboot板子的名字我们改为imx8mm_topeet
,然后选择用户git仓库,链接输入自己的链接,版本选择自己的一个分支。
进入Kernel选项配置linux,Kernel版本选择用户git仓库,链接输入自己的链接,版本选择自己的一个分支,Defconfig名字输入自己复制的,设备树输入自己板子的设备树。
进入Toolchain选项,将Custom kernel headers series改为5.15.x,因外我们的内核是5.15。
进入System configuration选项,将Extra arguments passed to custom改为自己的如图。
进入Target packages选项,依次进入Hardware handling —> Freescale i.MX libraries —> DDR training binaries,选择DDR4。
进入Target packages选项,进入Networking applications,选择openssh。
配置完成后保存,然后再保存一份我们自己的。
4. 编译下载
4.1 编译
配置完成后执行下列命令,buildroot会去自己下载并编译,过程比较漫长耐心等待。
$ make -j12
4.2 下载
编译完成会生成一个output
文件夹里面的images
文件夹,里面是编译生成的结果,其中imx8-boot-sd.bin
和sdcard.img
是我们下载需要的,imx8-boot-sd.bin
是带IVT的uboot,sdcard.img
是EMMC和SD卡的镜像生成可以直接使用。
仿照官方demo板镜像包的烧写脚本,修改IMX8MMEVK的uuu.auto
为我们自己板子用,下面是我修改好的uuu.auto
文件。
uuu_version 1.2.39
# This command will be run when i.MX6/7 i.MX8MM, i.MX8MQ
SDP: boot -f imx8-boot-sd.bin
# This command will be run when ROM support stream mode
# i.MX8QXP, i.MX8QM
SDPS: boot -f imx8-boot-sd.bin
# These commands will be run when use SPL and will be skipped if no spl
# SDPU will be deprecated. please use SDPV instead of SDPU
# {
SDPU: delay 1000
SDPU: write -f imx8-boot-sd.bin -offset 0x57c00
SDPU: jump
# }
# These commands will be run when use SPL and will be skipped if no spl
# if (SPL support SDPV)
# {
SDPV: delay 1000
SDPV: write -f imx8-boot-sd.bin -skipspl
SDPV: jump
# }
FB: ucmd setenv fastboot_dev mmc
FB: ucmd setenv mmcdev ${emmc_dev}
FB: ucmd mmc dev ${emmc_dev}
FB: flash -raw2sparse all sdcard.img
FB: flash bootloader imx8-boot-sd.bin
FB: ucmd if env exists emmc_ack; then ; else setenv emmc_ack 0; fi;
FB: ucmd mmc partconf ${emmc_dev} ${emmc_ack} 1 0
FB: done
在Linux下直接将脚本复制到images
文件夹中,将板子设置成串行下载模式并插好OTG线,执行$ sudo uuu -d uuu.auto
命令,等待下载完成Ctrl+C退出。
在Windows下还需将uuu.exe
程序复制到images
文件夹中,并且创建一个Windows批处理文件(我这里是uuu.auto.bat
)将uuu.exe -d uuu.auto
一句写入。
将板子设置成串行下载模式并插好OTG线,双击创建的批处理文件。
下载完成,将拨码开关拨到EMMC启动模式,重启登录root,进入命令行。
4.3 验证
设置网络,在# vi /etc/network/interfaces
文件中添加网络配置,保存并退出,reboot重启开发板。
# interface file auto-generated by buildroot
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
ping服务器,网络正常。
设置SSH,打开# vi /etc/ssh/sshd_config
文件进行如下配置,并reboot重启。
#设置允许root登录和空密码登录
PermitRootLogin yes
PermitEmptyPasswords yes
成功登录开发板SSH,SFTP访问正常。
5. 总结
利用buildroot搭建bsp工程是非常省事的,本文利用了GitHub使用本地或局域网内的git服务器也是可以的。本文仅供学习参考,如有问题欢迎指正。
移植源码获取:
git clone https://github.com/Sonboy97/buildroot.git -b imx
版本:8a3158cb233f9d8377e337aa41162f2a57c8930b