sd卡烧写嵌入式uboot/kernel及rootfs

时间:2022-02-04 18:52:03

将嵌入式系统文件烧写到sd卡

         向sd卡烧写系统文件,使用几个命令即可。使用读卡器将sd卡连接到linux主机。

         先介绍烧写文件系统。首先,使用如下命令:

$ cat /proc/partitions

        可以看到系统下的存储设备及其分区。在root用户下,通过命令:

$ fdisk /dev/sdb

        进入分区命令模式,按照下命令分别输入,对应打印情况如下:

Command (m for help): n

Command action

e   extended

p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-124368, default 1): 96

Last cylinder or +size or +sizeM or +sizeK (96-124368, default 124368): Using

default value

124368

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read mmcblk1 partition table

p1

        对分区进行格式化,对应文件系统格式化成ext3ext4格式,命令及打印如下:

root@freescale ~$ mkfs.ext3 /dev/sdb1

mke2fs 1.41.4 (27-Jan-2009)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

248992 inodes, 994184 blocks

49709 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=1019215872

31 block groups

32768 blocks per group, 32768 fragments per group

8032 inodes per group

Superblock backups stored on blocks:

        32768, 98304, 163840, 229376, 294912, 819200, 884736

Writing inode tables: done

Creating journal (16384 blocks): done

Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 20 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

$ sudo mount /dev/sdb1 /media/cdrom

$ cp rootfs/* /media/cdrom

$umount /media/cdrom

        以上文件系统的烧写完成。下面介绍ubootkernel的烧写。将ubootkernel放在上面分区的前一块分区,及放在rootfs之前。且uboot要放在kernel前面,命令如下:

$ sudo dd if=u-boot.bin  of=/dev/sdb bs=512 seek=2 skip=2 conv=fsync

$ sudo dd if=uImage of=/dev/sdb bs=512 seek=2048 conv=fsync

        其中复制u-boot.bin时,不能占用sd卡首个1k的空间,该位置存放着sd分区信息列表。因此使用seek=2跳过首个1k位置。命令skip=2是跳过要拷贝的文件的前1k再开始复制。文档解释是:如果使用未填充的u-boot镜像,则不许此命令。

        另外说明,ubootkernel的烧写,与rootfs的烧写前后关系没有要求,只要不烧写位置不覆盖,rootfs放在后面即可。