[100ask_imx6ullpro] buildroot构建emmc镜像并烧录
本文参考百问网韦东山老师视频 嵌入式Linux系统裁剪移植之二:使用Buildroot制作根文件系统
本文的主机环境为 Ubuntu22.04
1.准备工作
1.1.下载buildroot
从官网下载buildroot,本文下载的是长期支持版本(Long-term support)
接着下载完成后解压
o(^_^)o:~/下载$ tar -xvf buildroot-2025.02.6.tar.gz -C ~/tmp/
o(^_^)o:~/tmp/buildroot-2025.02.6$ ls
arch boot Config.in configs DEVELOPERS fs Makefile package support toolchain
board CHANGES Config.in.legacy COPYING docs linux Makefile.legacy README system utils
1.2.安装uuu (Universal Update Utility), mfgtools 3.0
ubuntu的uuu工具不需要从githuib上下载、编译、安装,直接使用apt安装即可
sudo apt install uuu
1.3.下载百问网gui_for_nxp_uuu
本文需要使用gui_for_nxp_uuu中的write_all.clst文件
o(^_^)o:~/下载$ git clone git@github.com:100askTeam/gui_for_nxp_uuu.git
(^_^)o:~/下载/gui_for_nxp_uuu/100ask_imx6ull烧写工具$ ls scripts/basic/emmc/write_
write_all.clst write_boot.clst write_kernel.clst write_user_file.clst
write_all_test.clst write_dtb.clst write_noos.clst
2.构建系统
2.1.默认配置
本文使用的是百问网的imx6ullpro开发板,该开发板基于imx6ullevk评估板设计,所以选择imx6ullevk_defconfig作为配置文件
o(^_^)o:~/tmp/buildroot-2025.02.6$ ls configs/imx6ul
imx6ulevk_defconfig imx6ullevk_defconfig imx6ulpico_defconfig imx6ulz_bsh_smm_m2_defconfig
等待packages下载、配置、编译、打包完成
o(^_^)o:~/tmp/buildroot-2025.02.6$ make imx6ullevk_defconfig; make -j16
查看buildroot的生成的images镜像文件目录,可以发现采用imx6ullevk_defconfig配置文件没有生成可烧录到emmc的镜像文件emmc.img
o(^_^)o:~/tmp/buildroot-2025.02.6$ ls output/images/ -hal
总计 102M
drwxr-xr-x 2 xxx xxx 4.0K 10月 8 13:38 .
drwxrwxr-x 6 xxx xxx 4.0K 10月 8 13:38 ..
-rw-r--r-- 1 xxx xxx 16M 10月 8 13:38 boot.vfat // 内核和设备数镜像
-rwxr-xr-x 1 xxx xxx 32K 10月 8 13:38 imx6ull-14x14-evk.dtb // 设备树文件
-rw-r--r-- 1 xxx xxx 60M 10月 8 13:38 rootfs.ext2 // 根文件系统
lrwxrwxrwx 1 xxx xxx 11 10月 8 13:38 rootfs.ext4 -> rootfs.ext2
-rw-r--r-- 1 xxx xxx 23M 10月 8 13:38 rootfs.tar
-rw-r--r-- 1 xxx xxx 84M 10月 8 13:38 sdcard.img // 可烧录到SD卡的镜像文件
-rw-r--r-- 1 xxx xxx 411K 10月 8 13:34 u-boot.bin
-rw-r--r-- 1 xxx xxx 415K 10月 8 13:34 u-boot-dtb.imx // uboot镜像文件
-rw-r--r-- 1 xxx xxx 8.8M 10月 8 13:38 zImage // 内核
查看根文件系统rootfs.ext2,发现根文件系统中不存在内核zImage和设备树imx6ull-14x14-evk.dtb
o(^_^)o:~/tmp/buildroot-2025.02.6$ sudo mount -o loop ./output/images/rootfs.ext2 /mnt
o(^_^)o:~/tmp/buildroot-2025.02.6$ ls /mnt/
bin dev etc lib lib32 linuxrc lost+found media mnt opt proc root run sbin sys tmp usr var
o(^_^)o:~/tmp/buildroot-2025.02.6$ sudo find /mnt -name zImage
o(^_^)o:~/tmp/buildroot-2025.02.6$ sudo find /mnt -name imx6ull-14x14-evk.dtb
内核zImage和设备树imx6ull-14x14-evk.dtb在boot.vat镜像中
o(^_^)o:~/tmp/buildroot-2025.02.6$ sudo mount -o loop ./output/images/boot.vfat /mnt
o(^_^)o:~/tmp/buildroot-2025.02.6$ ls /mnt/
imx6ull-14x14-evk.dtb zImage
2.2.修改镜像文件rootfs.ext2
首先在buildroot文件路径下创建一个overlay文件夹
o(^_^)o:~/tmp/buildroot-2025.02.6/100ask_imx6ull/overlay$ ls boot/
imx6ull-14x14-evk.dtb zImage
make menuconfig 配置Root filesystem overlay directories选项,接着make,这样overlay文件夹中的内容将会被添加到rootfs.ext2文件系统中
确保overlay中的内核和设备树文件被添加到rootfs.ext2文件系统中
o(^_^)o:~/tmp/buildroot-2025.02.6$ sudo mount -o loop output/images/rootfs.ext2 /mnt
o(^_^)o:~/tmp/buildroot-2025.02.6$ ls /mnt/
bin/ dev/ lib/ linuxrc media/ opt/ root/ sbin/ tmp/ var/
boot/ etc/ lib32/ lost+found/ mnt/ proc/ run/ sys/ usr/
o(^_^)o:~/tmp/buildroot-2025.02.6$ ls /mnt/boot/
imx6ull-14x14-evk.dtb zImage
2.3.生成镜像文件emmc.img
为了生成镜像文件,我们需要使用使用到配置配置文件genimage.cfg(从百问网下载),内容如下
o(^_^)o:~/tmp/buildroot-2025.02.6$ cat 100ask_imx6ull/genimage.cfg
image emmc.img {hdimage { // Generates DOS partition images.}partition rootfs-1 {partition-type = 0xCbootable = "yes"size = 10M // 分区大小为10M}partition rootfs-2 {partition-type = 0x83bootable = "yes"image = "rootfs.ext4" // 这个分区里直接写入映像文件myrootfs.ext4size = 1000M // 分区大小为100M}
有了genimage.cfg文件,接下来修改board/freescale/common/imx/post-image.sh文件,修改内容如下
@@ -106,7 +106,7 @@"board/freescale/common/imx/$(genimage_type)" > "${GENIMAGE_CFG}"rm -rf "${GENIMAGE_TMP}"
-
+ GENIMAGE_CFG="100ask_imx6ull/genimage.cfg"genimage \--rootpath "${TARGET_DIR}" \--tmppath "${GENIMAGE_TMP}" \
@@ -114,7 +114,7 @@--outputpath "${BINARIES_DIR}" \--config "${GENIMAGE_CFG}"- rm -f "${GENIMAGE_CFG}"
+# rm -f "${GENIMAGE_CFG}"exit $?}
修改之后执行make,可以看到output/images目录下生成了emmc.img文件
o(^_^)o:~/tmp/buildroot-2025.02.6$ ls output/images/
boot.vfat imx6ull-14x14-evk.dtb rootfs.ext4 sdcard.img u-boot-dtb.imx
emmc.img rootfs.ext2 rootfs.tar u-boot.bin zImage
3.烧录镜像文件
3.1.修改write_all.clst文件
o(^_^)o:~/下载/gui_for_nxp_uuu/100ask_imx6ull烧写工具$ diff -u scripts/basic/emmc/write_all.clst scripts/basic/emmc/write_all_test.clst
--- scripts/basic/emmc/write_all.clst 2025-10-07 21:44:56.171162846 +0800
+++ scripts/basic/emmc/write_all_test.clst 2025-10-07 22:50:53.407882191 +0800
@@ -1,9 +1,14 @@
-uuu_version 1.2.39
-FB: ucmd setenv fastboot_dev mmc
-FB: ucmd setenv mmcdev ${emmc_dev}
-FB: ucmd mmc dev ${emmc_dev}
-FB: flash -raw2sparse all ../../../files/emmc.img
-FB: flash bootloader ../../../files/u-boot-dtb.imx
-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
\ 文件末尾没有换行符
+uuu_version 1.2.39
+SDP: boot -f ../../../firmware/u-boot-dtb_fastboot_100ask.imx
+SDP: done
+FB: ucmd setenv fastboot_dev mmc
+FB: ucmd setenv emmc_dev 1
+FB: ucmd setenv emmc_ack 1
+FB: ucmd setenv mmcdev ${emmc_dev}
+FB: ucmd mmc dev ${emmc_dev}
+FB: flash -raw2sparse all ../../../files/emmc.img
+FB: flash bootloader ../../../files/u-boot-dtb.imx
+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
+
3.2.使用UUU烧录程序
将生成的emmc.img拷贝到files目录下
o(^_^)o:~/下载/gui_for_nxp_uuu/100ask_imx6ull烧写工具$ ls files/
100ask_imx6ull-14x14.dtb emmc.img liteos.bin rootfs.jffs2 sdcard.img u-boot-dtb_nandsd.imx
100ask_imx6ull_mini.dtb led.img rootfs.ext4 rootfs.ubi u-boot-dtb.imx zImage
100ask_myir_imx6ull_mini.dtb led.imx rootfs.img rt-smart.imx u-boot-dtb_nand.imx
将启动开关拨动到USB启动模式并连接USBOTG后启动开发板
确保已连接成功
o(^_^)o:~/下载/gui_for_nxp_uuu/100ask_imx6ull烧写工具$ uuu -lsusb
uuu (Universal Update Utility) for nxp imx chips -- lib1.4.193Connected Known USB DevicesPath Chip Pro Vid Pid BcdVersion==================================================5:12 MX6ULL SDP: 0x15A2 0x0080 0x0001
烧录程序
o(^_^)o:~/下载/gui_for_nxp_uuu/100ask_imx6ull烧写工具$ sudo uuu scripts/basic/emmc/write_all_test.clst
uuu (Universal Update Utility) for nxp imx chips -- lib1.4.193Success 1 Failure 0 5:12 2/ 2 [Done ] SDP: done
4.EMMC模式启动开发板
使用minicom连接串口
o(^_^)o:~$ sudo minicom -b 115200 -D /dev/ttyACM0
进入uboot,修改环境变量并保存后启动内核
setenv fdt_file imx6ull-14x14-evk.dtb
saveenv
boot
启动后查看内核版本,显示如下信息说明更换内核、设备树、根文件系统成功
注意:uboot没有更换!