NXP

IMX7 通过Linux使用SDCard烧录UBOOT、kernel、dtb、rootfs详解

2019-07-12 11:55发布

开发板使用的是NXP官网的开发板,芯片信号是:MCIMX7D7DVM10SC
Linux版本:Ubuntu14.04
SDCard大小:2G(最小使用2G,因为根文件系统比较大)
通过VM虚拟机进行的操作
uboot、kernel、rootfs、dtb的镜像文件是通过在NXP官网提供的MFGTools工具里面找到的,该工具里面有很多镜像,对应的镜像通ucl2.xml和cfg.ini去分析找到的 在插入SDCard前,在Linux上运行命令: sudo fdisk /dev/sd    //一直按tab键,系统会自动补全,通过补全的信息,记住系统现在有那些设备
lqd@ubuntu:~/imx7-image$ fdisk /dev/sd
sda   sda1  sda2  sda5  然后插入SDCard,将SDCard连接到Linux系统上。
再运行: sudo fdisk /dev/sd    //一直按tab键,系统会自动补全,通过查看补全的信息,多出来的设备就是我们的SDCard
lqd@ubuntu:~/imx7-image$ fdisk /dev/sd
sda   sda1  sda2  sda5  Sdb sdb1 sdb2 再运行命令:(将所有的sdb卸载)
sudo umount /dev/sdb1
sudo umount /dev/sdb2 再对SDCard进行分区: $ sudo fdisk /dev/sdb            确定卡ID
    
    键入以下参数(每个参数后跟):    
    p [列出当前分区]
    d [删除现有分区。 重复此操作,直到“p”命令没有报告不必要的分区才能重新启动。
    n [创建一个新分区]
    p [创建主分区 - 用于两个分区]
    1 [第一个分区]
    20480 [从偏移部门开始]
    1024000 [用于启动映像的第一个分区的大小]
    p [检查分区]
    n
    p
    2
    1228800 [从偏移扇区开始,为内核,引导加载程序及其配置数据留出足够的空间]
     [使用默认值将创建一个扩展到媒体最后一个扇区的分区]
    p [检查分区]
    w [这将分区表写入介质并且fdisk退出]
接下来就是烧写uboot,使用命令: $ sudo dd if= of=/dev/sdb bs=1k seek= conv=fsync
    Where offset is:
    • 1 - for i.MX 6 or i.MX 7
    • 33 - for i.MX 8 :从MFGTools提取的uboot镜像 对SDCard分好的两个区设置格式:
sudo mkfs.fat /dev/sdb1            //第一个分区一定要是fat格式
sudo mkfs.ext3 /dev/sdb2        //第二个分区可以是ext3格式,也可以是ext4格式 挂载第一个分区:
创建一个文件夹,用作挂载点。
sudo mkdir -p /mnt/nxp
sudo mount /dev/sdb1 /mnt/nxp 复制dtb和kernel镜像到第一个分区:
sudo cp /mnt/nxp
    注意:因为我使用的全是官方的资料,dtb的全名是:zImage-imx7d-sdb.dtb  但是在启动的时候,需要的却是:imx7d-sdb.dtb,所以我们要将zImage-imx7d-sdb.dtb改imx7d-sdb.dtb。命令如下:
    sudo mv zImage-imx7d-sdb.dtb imx7d-sdb.dtb 卸载第一个分区:
sudo umount /mnt/nxp 挂载第二个分区: sudo mount /dev/sdb2 /mnt/nxp 解压文件系统到第二个分区:
sudo tar -jxvf -C /mnt/nxp            //解压过程需要几分钟,看PC的性能和SDCard的速度 卸载第二个分区:
sudo umount /mnt/nxp 然后将SDCard取下,插入开发板,将开发板设置为SDCard启动,就可以看见系统开始跑了!