10| linux下烧录至SD卡启动

linux下烧录uboot、linux-kernel、dtb、rootfs到SD卡启动

[假设识别u盘为设备/dev/sdb]

@author:firestaradmin 2020年4月28日19:15:33

0.清除SD卡前1024KB的数据 dd命令(可选步骤)

dd if=/dev/zero of=/dev/sdb bs=1024 count=1024
  • if=文件名:输入文件名,默认为标准输入。即指定源文件。

    /dev/zero,是一个输入设备,你可你用它来初始化文件。该设备无穷尽地提供0,可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。

  • of=文件名:输出文件名,默认为标准输出。即指定目的文件。

  • ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。

    obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。

    bs=bytes:同时设置读入/输出的块大小为bytes个字节。

  • count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。

1. 插入SD卡并分区 fdisk命令

Linux下使用fdisk命令进行分区:

fdisk /dev/sdb

需要建立两个分区:

  • p1为fat32 用于存放linux-kernel和dtb文件(一般64MB)

  • p2为ext4 用于存放根文件系统(一般剩余空间都给它)

(注意,第一个分区起始扇区需要为uboot保留一定空间 所以在扇区大小为512B时,一般第一个起始扇区地址为8192即512*8192B=4MB保留给uboot)

2. 使用mkfs命令进行分区的格式化

mkfs.vfat -F 32 -n "boot" /dev/sdb1

将sd卡分区1格式化为FAT32

-n “boot” 设置卷标为boot

mkfs.ext4 -F -L "rootfs" /dev/sdb2

将sd卡分区2格式化为ext4

-L “rootfs” 设置卷标为rootfs

格式化前需要先取消挂载,使用umount命令

umount /dev/sdb1

3. 使用dd命令烧写uboot.imx到sd卡起始位置

在uboot目录下打开终端

dd if=uboot.imx of=/dev/sdb bs=1024 seek=1 conv=fsync
  • if=文件名:输入文件名,默认为标准输入。即指定源文件。

  • of=文件名:输出文件名,默认为标准输出。即指定目的文件。

  • ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。

    obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。

    bs=bytes:同时设置读入/输出的块大小为bytes个字节。

  • seek=blocks:从输出文件开头跳过blocks个块后再开始复制。

  • conv=<关键字>,关键字可以有以下11种:

    • sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。

      ……

4. 将zImage和dtb设备树文件拷贝到第一个分区

将p1挂载到某个地方

mkdir /media/boot
mount /dev/sdb1 /media/boot/
cp zImage *.dtb /media/boot/

5. 拷贝根文件系统至第二个分区

1.压缩根文件系统

cd rootfs/
tar -vcjf rootfs.tar.bz2 *

2.挂载设备并解压

mkdir /media/rootfs
mount /dev/sdb2 /media/rootfs/
tar jxfm \**rootfs.tar.bz2\** -C /media/rootfs/

6.同步和卸载u盘

输入sync同步数据,然后umount /run/media/sda1/去卸载一个目录,

然后用df 指令查看 sda1 这个目录已经不存在了,表明已经卸载了,U 盘可以正常拔出了!

7. 插入开发板,并修改bootcmd和bootargs启动系统进行测试

命令附录:

fdisk命令:

磁盘操作命令

语法

fdisk [必要参数][选择参数]

必要参数:

  • -l 列出素所有分区表

  • -u 与”-l”搭配使用,显示分区数目

选择参数:

  • -s<分区编号> 指定分区

  • -v 版本信息

菜单操作说明

  • m :显示菜单和帮助信息

  • a :活动分区标记/引导分区

  • d :删除分区

  • l :显示分区类型

  • n :新建分区

  • p :显示分区信息

  • q :退出不保存

  • t :设置分区号

  • v :进行分区检查

  • w :保存修改

  • x :扩展应用,高级功能

mkfs命令:

Linux mkfs命令用于在特定的分区上建立 linux 文件系统

使用方式 :

mkfs [-V] [-t fstype] [fs-options] filesys [blocks]

参数 :

  • device : 预备检查的硬盘分区,例如:/dev/sda1

  • -V : 详细显示模式

  • -t : 给定档案系统的型式,Linux 的预设值为 ext2

  • -c : 在制做档案系统前,检查该partition 是否有坏轨

  • -l bad_blocks_file : 将有坏轨的block资料加到 bad_blocks_file 里面

  • block : 给定 block 的大小

实例

  • 在 /dev/hda5 上建一个 msdos 的档案系统,同时检查是否有坏轨存在,并且将过程详细列出来 :

    mkfs -V -t msdos -c /dev/hda5
  • 将sda6分区格式化为ext3格式

    mfks -t ext3 /dev/sda6

    注意:这里的文件系统是要指定的,比如 ext3 ;reiserfs ;ext2 ;fat32 ;msdos 等。

dd命令:

Linux dd命令用于读取、转换并输出数据。

dd可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

如我们上面使用的命令

dd if=/dev/zero of=/dev/sdb bs=1024 count=1024
dd if=uboot.imx of=/dev/sdb bs=1024 seek=1 conv=fsync

参数说明:

if=文件名:输入文件名,默认为标准输入。即指定源文件。

of=文件名:输出文件名,默认为标准输出。即指定目的文件。

ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。

obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。

bs=bytes:同时设置读入/输出的块大小为bytes个字节。

cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。

skip=blocks:从输入文件开头跳过blocks个块后再开始复制。

seek=blocks:从输出文件开头跳过blocks个块后再开始复制。

count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。

conv=<关键字>,关键字可以有以下11种:

​ conversion:用指定的参数转换文件。

​ ascii:转换ebcdic为ascii

​ ebcdic:转换ascii为ebcdic

​ ibm:转换ascii为alternate ebcdic

​ block:把每一行转换为长度为cbs,不足部分用空格填充

​ unblock:使每一行的长度都为cbs,不足部分用空格填充

​ lcase:把大写字符转换为小写字符

​ ucase:把小写字符转换为大写字符

​ swab:交换输入的每对字节

​ noerror:出错时不停止

​ notrunc:不截短输出文件

​ sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。

​ –help:显示帮助信息

​ –version:显示版本信息

tar命令:

1.命令格式:

tar [必要参数] [选择参数] [文件]

2.命令功能:

用来压缩和解压文件。tar本身不具有压缩功能。他是调用压缩功能实现的

3.命令参数:

必要参数有如下:

-A 新增压缩文件到已存在的压缩

-B 设置区块大小

-c 建立新的压缩文件

-d 记录文件的差别

-r 添加文件到已经压缩的文件

-u 添加改变了和现有的文件到已经存在的压缩文件

-x 从压缩的文件中提取文件

-t 显示压缩文件的内容

-z 支持gzip解压文件

-j 支持bzip2解压文件

-Z 支持compress解压文件

-v 显示操作过程

-l 文件系统边界设置

-k 保留原有文件不覆盖

-m 保留文件不被覆盖

-W 确认压缩文件的正确性

可选参数如下:

-b 设置区块数目

-C 切换到指定目录

-f 指定压缩文件

–help 显示帮助信息

–version 显示版本信息

4.常见解压/压缩命令

  • tar

    解包:tar xvf FileName.tar

    打包:tar cvf FileName.tar DirName

    (注:tar是打包,不是压缩!)

  • .gz

    解压1:gunzip FileName.gz

    解压2:gzip -d FileName.gz

    压缩:gzip FileName

  • .tar.gz 和 .tgz

    解压:tar zxvf FileName.tar.gz

    压缩:tar zcvf FileName.tar.gz DirName

  • .bz2

    解压1:bzip2 -d FileName.bz2

    解压2:bunzip2 FileName.bz2

    压缩: bzip2 -z FileName

  • .tar.bz2

    解压:tar jxvf FileName.tar.bz2

    压缩:tar jcvf FileName.tar.bz2 DirName

  • .bz

    解压1:bzip2 -d FileName.bz

    解压2:bunzip2 FileName.bz

    压缩:未知

  • .tar.bz

    解压:tar jxvf FileName.tar.bz

    压缩:未知

  • .Z

    解压:uncompress FileName.Z

    压缩:compress FileName

  • .tar.Z

    解压:tar Zxvf FileName.tar.Z

    压缩:tar Zcvf FileName.tar.Z DirName

  • .zip

    解压:unzip FileName.zip

    压缩:zip FileName.zip DirName

  • .rar

    解压:rar x FileName.rar

    压缩:rar a FileName.rar DirName