IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux 系统烧写实操 -> 正文阅读

[系统运维]Linux 系统烧写实操

系统烧写实操

Linux系统烧写初探一文中介绍了mfgtool烧写工具及其工作原理,下面以 I.MX6U-ALPHA EMMC开发板为平台,分别介绍如何烧写 NXP官方系统,以及烧写自制系统

1. 烧写NXP官方系统

烧写 NXP官方的系统到 I.MX6U-ALPHA EMMC开发板(512MB DDR3 + 8G EMMC)中,具体步骤如下:

  • 连接好USB,拨码开关拨到USB下载模式
  • 弹出TF卡,然后按下开发板复位按键
  • 打开MobaXterm串口助手终端
  • 双击mfgtool2-yocto-mx-evk-emmc.vbs
  • 点击Start按钮烧写 NXP 官方系统

烧写过程如下示
在这里插入图片描述

MobaXterm串口助手终端上显示的烧写过程

在这里插入图片描述

烧写完成后点击Stop按钮停止烧写,点击Exit键退出

在这里插入图片描述

拔出USB线,将拨码开关拨到EMMC启动模式,重启后就会从EMMC启动

在这里插入图片描述

此时启动后的系统是 NXP给 I.MX6ULL EVK开发板制作的,需要输入用户名,用户名为“root”,没有密码

2. 烧写自制系统

烧写自制系统到 I.MX6U-ALPHA EMMC开发板(512MB DDR3 + 8G EMMC)中。准备好自制的 uboot、kernel、.dtb 和 rootfs(压缩包)这四个烧写文件,对其进行重命名

##根文件系统 rootfs 打包
cd rootfs/ 
tar -vcjf rootfs.tar.bz2 *

在这里插入图片描述

? 将改名后的uboot、kernel、.dtb 这三个文件拷贝到firmware目录中,替换掉原来的文件
? 将改名后的所有四个文件拷贝到files目录中
? 双击mfgtool2-yocto-mx-evk-emmc.vbs文件,打开烧写软件,点击Start按钮即可烧写
在这里插入图片描述

烧写完成后从EMMC启动系统,如下图示可见自制系统已经烧写成功
在这里插入图片描述

3. 改造烧写工具

3.1 改造Mfgtool

上面是将 NXP官方的系统更换成自制的系统来完成烧写,下面将介绍如何改造 MfgTool工具,让其支持自己的开发板。改造MfgTool,主要从以下三方面着手

? 确定系统文件名字:确定系统文件名字是为了兼容不同的产品
在这里插入图片描述
? 新建.vbs文件:复制 mfgtool2-yocto-mx-evk-emmc.vbs 文件,重新按需要命令,比如命名成 mfgtool2-andyxi-emmc.vbs

? 修改OS Firmware文件夹里的 ucl2.xml文件:改为如下所示内容

<!-- 修改后的 ucl2.xml 文件 -->
<UCL>
  <CFG>
    <STATE name="BootStrap" dev="MX6UL" vid="15A2" pid="007D"/>
    <STATE name="BootStrap" dev="MX6ULL" vid="15A2" pid="0080"/>
    <STATE name="Updater" dev="MSC" vid="066F" pid="37FF"/>
  </CFG>
	
  <!-- 向 EMMC 烧写系统 -->
  <LIST name="eMMC" desc="Choose eMMC as media">
    <CMD state="BootStrap" type="boot" body="BootStrap" file
    ="firmware/u-boot-andyxi-emmc.imx" ifdev="MX6ULL">Loading Uboot</CMD>
    <CMD state="BootStrap" type="load" file="firmware/zImage-andyxi-emmc" address="0x80800000"
    loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" 
    ifdev="MX6SL MX6SX MX7D MX6UL MX6ULL">Loading Kernel.</CMD>
    <CMD state="BootStrap" type="load" file="firmware/%initramfs%" address="0x83800000"
    loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE"
    ifdev="MX6SL MX6SX MX7D MX6UL MX6ULL">Loading Initramfs.</CMD>
    <CMD state="BootStrap" type="load" file="firmware/imx6ull-andyxi-emmc.dtb" address="0x83000000"
    loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE"
    ifdev="MX6ULL">Loading device tree.</CMD>
    <CMD state="BootStrap" type="jump" > Jumping to OS image. </CMD>

    <!-- create partition -->
    <CMD state="Updater" type="push" body="send" file="mksdcard.sh.tar">Sending partition shell</CMD>
    <CMD state="Updater" type="push" body="$ tar xf $FILE ">Partitioning...</CMD>
    <CMD state="Updater" type="push" body="$ sh mksdcard.sh /dev/mmcblk%mmc%"> Partitioning...</CMD>

    <!-- burn uboot -->
    <CMD state="Updater" type="push" body="$ dd if=/dev/zero
    of=/dev/mmcblk%mmc% bs=1k seek=768 conv=fsync count=8">clear u-boot arg</CMD>

    <!-- access boot partition -->
    <CMD state="Updater" type="push" body="$ echo 0 > /sys/block/mmcblk%mmc%boot0/force_ro">
    access boot partition 1</CMD>
    <CMD state="Updater" type="push" body="send" file="files/u-boot-andyxi-emmc.imx" ifdev="MX6ULL">
    Sending u-boot.bin</CMD>
    <CMD state="Updater" type="push" body="$ dd if=$FILE of=/dev/mmcblk%mmc%boot0 bs=512 seek=2">
    write U-Boot to sd card</CMD>
    <CMD state="Updater" type="push" body="$ echo 1 > /sys/block/mmcblk%mmc%boot0/force_ro"> 
    re-enable read-only access</CMD>
    <CMD state="Updater" type="push" body="$ mmc bootpart enable 1 1 /dev/mmcblk%mmc%">
    enable boot partion 1 to boot</CMD>

    <!-- create fat partition -->
    <CMD state="Updater" type="push" body="$ while [ ! -e
    /dev/mmcblk%mmc%p1 ]; do sleep 1; echo \"waiting...\"; done ">Waiting for the partition ready</CMD>
    <CMD state="Updater" type="push" body="$ mkfs.vfat /dev/mmcblk%mmc%p1">
    Formatting rootfs partition</CMD>
    <CMD state="Updater" type="push" body="$ mkdir -p /mnt/mmcblk%mmc%p1"/>
    <CMD state="Updater" type="push" body="$ mount -t vfat /dev/mmcblk%mmc%p1 /mnt/mmcblk%mmc%p1"/>

    <!-- burn zImage -->
    <CMD state="Updater" type="push" body="send" file="files/zImage-andyxi-emmc">
    Sending kernel zImage</CMD>
    <CMD state="Updater" type="push" body="$ cp $FILE /mnt/mmcblk%mmc%p1/zImage">
    write kernel image to sd card</CMD>

    <!-- burn dtb -->
    <CMD state="Updater" type="push" body="send" file="files/imx6ull-andyxi-emmc.dtb" ifdev="MX6ULL">
    Sending Device Tree file</CMD>
    <CMD state="Updater" type="push" body="$ cp $FILE /mnt/mmcblk%mmc%p1/imx6ull-andyxi-emmc.dtb" ifdev="MX6ULL">
    write device tree to sd card</CMD>
    <CMD state="Updater" type="push" body="$ umount /mnt/mmcblk%mmc%p1">
    Unmounting vfat partition</CMD>

    <!-- burn rootfs -->
    <CMD state="Updater" type="push" body="$ mkfs.ext3 -F -E nodiscard /dev/mmcblk%mmc%p2">
    Formatting rootfs partition</CMD>
    <CMD state="Updater" type="push" body="$ mkdir -p /mnt/mmcblk%mmc%p2"/>
    <CMD state="Updater" type="push" body="$ mount -t ext3 /dev/mmcblk%mmc%p2 /mnt/mmcblk%mmc%p2"/>
    <CMD state="Updater" type="push" body="pipe tar -jxv -C /mnt/mmcblk%mmc%p2" 
    file="files/rootfs-andyxi-emmc.tar.bz2" ifdev="MX6UL MX7D MX6ULL">Sending and writting rootfs</CMD>
    <CMD state="Updater" type="push" body="frf">Finishing rootfs write</CMD>
    <CMD state="Updater" type="push" body="$ umount /mnt/mmcblk%mmc%p2">Unmounting rootfs partition</CMD>
    <CMD state="Updater" type="push" body="$ echo Update Complete!">Done</CMD>
  </LIST>
</UCL>

3.2 烧写测试

MfgTool 工具修改好后就可以进行烧写测试了,将自制的 uboot、linux kernel、和 .dtb 这三个文件拷贝到firmware目录中,替换掉原来的文件;将所有四个文件拷贝到files目录中

双击 mfgtool2-andyxi-emmc.vbs文件,打开烧写软件,点击“Start”按钮即可烧写。烧写完成,设置拨码开关为 EMMC 启动,重启开发板,系统启动信息如下图示:
在这里插入图片描述

开发板最终卡在 “Starting kernel …”,内核启动失败。下面介绍如何解决内核启动失败的问题

3.3 解决内核启动失败

仔细观察 uboot 输出的 log 信息,会发现如下图所示的两行信息:
在这里插入图片描述

可见在读取设备树文件时就出错了。重启 uboot,进入到命令行模式,输入如下命令查看 EMMC 的分区 1 里面有没有设备树文件

mmc dev 1 	//切换到EMMC
ls mmc 1:1 	//输出EMMC1分区1中的所有文件

在这里插入图片描述

可见此时 EMMC的分区1中是存在设备树文件的,只是名字不同,因此读取 imx6ull-14x14-evk.dtb肯定会出错。出现这个错误的原因是 uboot里默认的设备树名字是imx6ull-14x14-evk.dtb,解决方法有以下两种:

? 重新设置 bootcmd环境变量值:在 uboot的命令行模式下,重设 bootcmd 和 bootargs 这两个环境变量的值

setenv bootcmd 'mmc dev 1;fatload mmc 1:1 80800000 zImage;fatload mmc 1:1 83000000
			    imx6ull-andyxi-emmc.dtb;bootz 80800000 - 83000000'
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
saveenv\

? 修改 uboot源码:上面方法每次重新烧写都要再设置,以下方法只需设置一次,uboot源码 include/configs/mx6ull_andyxi_emmc.h文件里,在宏 CONFIG_EXTRA_ENV_SETTINGS中找到如下所示内容:

"findfdt="\
  "if test $fdt_file = undefined; then " \
    "if test $board_name = EVK && test $board_rev = 9X9; then " \
	"setenv fdt_file imx6ull-9x9-evk.dtb; fi; " \
    "if test $board_name = EVK && test $board_rev = 14X14; then " \
	"setenv fdt_file imx6ull-14x14-evk.dtb; fi; " \
    "if test $fdt_file = undefined; then " \
	"echo WARNING: Could not determine dtb to use; fi; " \
  "fi;\0" \

findfdt 是用于确定设备树文件名字的环境变量, fdt_file环境变量保存着设备树文件名。上面代码中的两个设备树都是 NXP官方开发板使用的。因此将 findfdt 值改为如下内容:

"findfdt="\
  "if test $fdt_file = undefined; then " \
    "setenv fdt_file imx6ull-andyxi-emmc.dtb; " \
  "fi;\0" \

修改后重新编译 uboot,然后将新的 uboot烧写到开发板后重启测试,内核启动正常。至此自制系统烧写完成,并测试成功,开发板可以在没有网络的情况下正常启动

关注公众号,发送 “mfgtool”,即可获取 mfgtool相关资料

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 02:22:56  更:2022-09-15 02:25:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:04:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码