将嵌入式系统文件烧写到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
对分区进行格式化,对应文件系统格式化成ext3或ext4格式,命令及打印如下:
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
以上文件系统的烧写完成。下面介绍uboot和kernel的烧写。将uboot及kernel放在上面分区的前一块分区,及放在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镜像,则不许此命令。
另外说明,uboot及kernel的烧写,与rootfs的烧写前后关系没有要求,只要不烧写位置不覆盖,rootfs放在后面即可。