本帖最后由 sumoon_yao 于 2022-4-11 15:49 编辑
对于一块linux arm开发板,首先要了解的就是如何烧写系统镜像。 iMX6ULL-evk随板带有一片烧写好镜像的TF卡,为了避免评测过程中发生意外导致TF卡镜像的损坏,也为了有问题时可以做比对,因此就用了手头的一片32G的TF卡做测试。 根据官方提供的资料,对TF卡烧写镜像有3种方法: 1、使用linux系统的dd命令进行整卡镜像 NXP官网上提供了每款开发板的不同版本的BSP下载,我下载了L4.1.15_2.0.0-ga_images_MX6ULLEVK.tar,解压后里面有个文件fsl-image-validation-imx-x11-imx6ull14x14evk.sdcard,这个文件就是TF卡的镜像,在开发平台上用dd命令将镜像烧写到TF卡。 sudo dd if=fsl-image-validation-imx-x11-imx6ull14x14evk.sdcardof=/dev/sda bs=1M 烧好镜像的TF卡插入卡槽,上电,登录界面出现后输入root,回车。 输入命令df,查看文件系统空间:
32G的TF卡,整个系统只用了1G左右,其余的都浪费啦。当然整卡镜像对于批量生产来说还是很方便的。 2、通过网络使用tftp烧写 先用fdisk命令对TF卡分区,然后用dd命令把uboot镜像烧写到卡上,将TF卡插入板上的卡槽,上电,进入uboot倒计时界面后按回车,此时就可以通过tftp将zImage、设备树文件和文件系统镜像烧写到CF卡上。 3、通过NXP官方提供的专用工具mfgtool烧写 从官网下载带镜像的mfgtool工具包L4.1.15_2.0.0-ga_mfg-tools,这个是windows版本的,解压后里面有带fs和不带fs的 压缩包,继续解压带fs的压缩包,就得到了带镜像文件的mfgtool烧写工具。 一个完整的linux arm系统烧写需要4个镜像文件,对iMX6ull-evk官方开发板来说所需要的4个文件分别是:启动文件u-boot-imx6ull14x14evk_sd.imx,内核文件zImage,设备树文件zImage-imx6ul-14x14-evk.dtb,不带GPU的根文件系统rootfs_nogpu.tar.bz2,这4个文件位于烧写工具目录下的Profiles/Linux/OS Firmware/files子目录,我们看到这个目录下有不同MPU型号不同硬件配置的镜像文件,那烧写工具是如何准确知道要烧写的是哪些文件呢?这个就由烧写工具根目录下的cfg.ini文件和Profiles/Linux/OS Firmware子目录下的ucl2.xml来决定的。 cfg.ini文件的部分内容如下: [profiles] chip = Linux [platform] board = SabreSD [LIST] name = SDCard [variable] board = sabresd mmc = 0 sxuboot=sabresd sxdtb=sdb 7duboot=sabresd 7ddtb=sdb 6uluboot=14x14ddr3arm2 6uldtb=14x14-ddr3-arm2 6ulldtb=14x14-ddr3-arm2 ldo= plus= lite=l ucl2.xml文件的部分内容如下: <UCL> <CFG> <STATE name="BootStrap"dev="MX6SL" vid="15A2" pid="0063"/> <STATE name="BootStrap"dev="MX6D" vid="15A2" pid="0061"/> <STATE name="BootStrap"dev="MX6Q" vid="15A2" pid="0054"/> <STATE name="BootStrap"dev="MX6SX" vid="15A2" pid="0071"/> <STATE name="BootStrap"dev="MX6UL" vid="15A2" pid="007D"/> <STATE name="BootStrap"dev="MX7D" vid="15A2" pid="0076"/> <STATE name="BootStrap"dev="MX6ULL" vid="15A2" pid="0080"/> <STATE name="Updater" dev="MSC" vid="066F"pid="37FF"/> </CFG> <LIST name="SDCard"desc="Choose SD Card as media"> <!--burn uboot --> <CMD state="Updater" type="push"body="send" file="files/u-boot-imx6q%plus%%board%_sd.imx"ifdev="MX6Q">Sending u-boot.bin</CMD> <CMD state="Updater" type="push"body="send" file="files/u-boot-imx6dl%board%_sd.imx"ifdev="MX6D">Sending u-boot.bin</CMD> <CMD state="Updater" type="push"body="send" file="files/u-boot-imx6slevk_sd.imx"ifdev="MX6SL">Sending u-boot.bin</CMD> <CMD state="Updater" type="push"body="send" file="files/u-boot-imx6sx%sxuboot%_sd.imx"ifdev="MX6SX">Sending u-boot.bin</CMD> <CMD state="Updater" type="push"body="send" file="files/u-boot-imx7d%7duboot%_sd.imx"ifdev="MX7D">Sending u-boot.bin</CMD> <CMD state="Updater" type="push"body="send" file="files/u-boot-imx6ul%6uluboot%_sd.imx"ifdev="MX6UL">Sending u-boot.bin</CMD> <CMD state="Updater" type="push"body="send"file="files/u-boot-imx6ul%lite%%6uluboot%_sd.imx"ifdev="MX6ULL">Sending u-boot.bin</CMD> </LIST> </UCL> cfg.ini文件中的name变量决定了ucl2.xml文件中LIST段的烧写介质,ucl2.xml文件中的CFG段决定了板子上的芯片型号,如我们的板子型号dev="MX6ULL",再加上另一个烧写脚本文件mfgtool2-yocto-mx-evk-sdcard-sd2.vbs,内容如下: Set wshShell =CreateObject("WScript.shell") wshShell.run"mfgtool2.exe -c ""linux"" -l""SDCard"" -s ""board=sabresd"" -s""mmc=1"" -s ""6uluboot=14x14evk"" -s""6uldtb=14x14-evk"" -s ""6ulldtb=14x14-evk""" Set wshShell = Nothing 通过这3个文件相关变量的定义,就决定了镜像烧写时具体使用的哪个文件,以我们这块板的uboot镜像文件为例: <CMD state="Updater" type="push"body="send" file="files/u-boot-imx6ul%lite%%6uluboot%_sd.imx"ifdev="MX6ULL">Sending u-boot.bin</CMD> name,dev,lite,6uluboot共4个变量决定了uboot镜像文件为:u-boot-imx6ull14x14evk_sd.imx。 下面就是采用mfgtool工具烧写镜像的具体方法: 将开发板上的拨码开关SW602拨为D1:off、D2:on,用USB线将板上的USB OTG口J1602连到电脑,给开发板上电,然后双击运行mfgtool烧写工具根目录下的 mfgtool2-yocto-mx-evk-sdcard-sd2.vbs文件,出现烧写界面,如果识别到开发板,则会显示找到HID设备,点击start按钮,开始烧写镜像:
耐心等待烧写完成,如果还有另一根USB连接线的话,可以将开发板上的USB debug口(J1901)也接到电脑上,打开串口终端,这时就能看到烧写过程中给出的提示信息。 烧写完成后会给出提示,点击stop按钮,然后关闭烧写工具。
拨码开关SW602拨回D1:on、D2:off,用USB连接线将开发板上的USBdebug口(J1901)接到电脑上,打开串口终端,给开发板上电,稍后出现登录界面,输入root回车后即进入系统,此时再次输入文件系统空间查看命令df:
此时可以看到根文件系统空间近30G。 至此系统镜像烧写成功完成,下一篇将介绍如何编译3个镜像文件:启动文件u-boot-imx6ull14x14evk_sd.imx,内核文件zImage,设备树文件zImage-imx6ul-14x14-evk.dtb
|