• I.MXU6LL制作烧录SD卡详细步骤


    i.MXU6LL - 制作烧录SD卡详细步骤



    本文所有操作均在root模式下进行!

    本篇博客步骤主要参考NXP官方的手册《i.MX_Linux_Users_Guide.pdf》的这一章节:


    1、SD卡分区

    提示:我们常用的SD卡一个扇区的大小是512字节。

    先说一下i.MX6ULL使用SD卡启动时的分区情况,NXP官方给的镜像布局结构如下所示:

    可以看到,上图将一张SD卡分成了三部分:

    • 第一部分:扇区起始地址2,大小为20478个扇区,分区格式为原始格式,用于存放uboot;
    • 第二部分:扇区起始地址20480,大小为1024000个扇区,分区格式为FAT,用于存放内核和设备树;
    • 第三部分:扇区起始地址1228800,大小为SD卡剩余的空间,分区格式为Ext3或Ext4,用于存放rootfs,也就是文件系统。

    第一部分用于存放UBOOT,无文件系统格式的要求,所以我们对分区的创建从第二部分开始就可以。

    有了以上分区布局后,我们就可以对SD进行分区了。


    拿到一张SD卡,首先将SD卡在windows下格式化成FAT32格式:

    插入ubuntu系统之前,先使用以下命令查看一下所有的磁盘:

    fdisk -l
    
    • 1

    将SD卡插入ubuntu,再次输入以上命令查看一下所有磁盘,会发现多出来一个/dev/sdb和/dev/sdb1:

    其中,/dev/sdb代表的就是SD卡本身,/dev/sdb1代表的是SD卡上的分区一,且格式为FAT32。

    注意:SD卡插入ubuntu后,会出现/dev/sdX,具体是/dev/sdb还是/dev/sdc又或者是/dev/sdd要视个人插入ubuntu的USB口设备情况而定。

    接下来对SD卡重新分区:

    fdisk /dev/sdb
    
    • 1

    依次输入:

    d         ---> 删除分区
    n         ---> 创建分区 
    p         ---> 选择为主分区
    1         ---> 分区编号为1
    20480     ---> 分区1起始扇区
    +500M     ---> 分区大小:500MB
    p         ---> 显示当前分区
    n         ---> 创建分区
    p         ---> 选择为主分区
    2         ---> 分区编号为2
    1044480   ---> 分区起始地址
    <enter>   ---> 敲回车,表示将剩下的所有空间都分给分区2
    p         ---> 显示当前分区
    w         ---> 保存
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    如下图所示:


    设置sdb1分区格式为FAT:

    sudo mkfs.vfat /dev/sdb1
    
    • 1

    设置sdb2分区格式为Ext3或Ext4都可以:

    sudo mkfs.ext3 /dev/sdb2
    
    • 1

    sudo mkfs.ext4 /dev/sdb2
    
    • 1

    如下图:

    此时SD卡的分布如下图所示:


    2、拷贝uboot到SD卡

    拷贝uboot到SD卡,输入以下命令:

    sudo dd if=u-boot.imx of=/dev/sdb bs=1k seek=1 conv=fsync
    
    • 1

    从上面我们对SD卡分区的时候知道,第一分区的起始地址是从扇区地址2开始的,SD卡的一个扇区是512字节,也就是说第一分区的起始地址是SD卡的1K字节处,上面这条命令中,bs设置dd命令的读写块为1K大小,并且设置seek=1,表示从/dev/sdb开头的1K字节处开始写u-boot.imx,正好就是写到了u-boot在SD卡中所在的位置处。

    问:为什么从SD卡1K位置处存放uboot而不是从SD卡头部开始?
    答:这是NXP官方规定的,照做就是了。

    dd命令可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。详细命令解释参见:https://www.runoob.com/linux/linux-comm-dd.html

    • if=文件名:输入文件名,默认为标准输入。即指定源文件。
    • of=文件名:输出文件名,默认为标准输出。即指定目的文件。
    • bs=bytes:同时设置读入/输出的块大小为bytes个字节。
    • seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
    • conv=<关键字>,关键字可以有以下11种:
      • conversion:用指定的参数转换文件。
      • ascii:转换ebcdic为ascii
      • ebcdic:转换ascii为ebcdic
      • ibm:转换ascii为alternate ebcdic
      • block:把每一行转换为长度为cbs,不足部分用空格填充
      • unblock:使每一行的长度都为cbs,不足部分用空格填充
      • lcase:把大写字符转换为小写字符
      • ucase:把小写字符转换为大写字符
      • swap:交换输入的每对字节
      • noerror:出错时不停止
      • notrunc:不截短输出文件
      • sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。

    3、拷贝kernel和dtbs到SD卡

    创建挂载点:

    mkdir /mountpoint
    
    • 1

    挂载分区一:

    mount /dev/sdb1 /mountpoint
    
    • 1

    使用cp命令将zImage和*.dtb文件拷贝进/mountpoint目录,然后取消挂载:

    umount mountpoint
    
    • 1

    4、拷贝文件系统到SD卡

    挂载分区二:

    mount /dev/sdb2 /mountpoint
    
    • 1

    解包你的文件系统,假设文件系统包为:rootfs.tar.bz2

    tar -jxvf rootfs.tar.bz2
    
    • 1

    进入文件系统目录:

    cd rootfs
    
    • 1

    拷贝所有文件到/mountpoint目录:

    cp -a * /mountpoint
    
    • 1

    然后取消挂载:

    umount mountpoint
    sync
    
    • 1
    • 2

    到此,SD启动卡就已经制作完成!


    ends…

  • 相关阅读:
    GB/T 20281-2020实施两周年,美创数据库防火墙的标准实践
    高等教育的AI革新:OpenAI面向大学推出ChatGPT Edu
    Go 语言 strings 库常用方法
    微服务框架 SpringCloud微服务架构 19 文档操作 19.3 动态映射
    【Mysql】Mysql视图、触发器、存储过程、游标
    集合深度学习01—Collection
    图的初识·存储结构
    实战讲解Redis基础数据类型List增删改查(带Java源码)
    动态规划:12最后一块石头的重量II
    更换网络ip地址怎么设置
  • 原文地址:https://blog.csdn.net/qq153471503/article/details/126775959