Sd卡启动盘的制作(EXT2)

1.使用ubuntu12.04的版本来制作sd卡的启动盘

打开应用程序 application -> accessories ->Disk Unit 这个工具 ,插上sd卡后, 会显示sd的容量信息,如下图:

2.对sd卡进行分区

对与sd卡来讲, 要先进行格式化, 格式化成uboot能够识别的FAT32方式和EXT2的方式。

(1)先使用fdisk 分区命令对sd进行分区, 使用图形工具控制不了分区的扇区的开始位置, 因为我们要使用前面的扇区进行写入uboot的内容, 因此只能使用fdisk进行分区的工作。

(2)Fdisk 的使用如下:

nux@linux:~$ sudo fdisk /dev/sdc

[sudo] password for linux:

Command (m for help): p

Device Boot Start End Blocks Id System

/dev/sdc1 * 14818 4919575 2452379 c W95 FAT32 (LBA)

/dev/sdc2 8192000 15130623 3469312 83 Linux

Command (m for help): d

Partition number (1-4): 1

Command (m for help): d

Selected partition 2

Command (m for help): p

Device Boot Start End Blocks Id System

Command (m for help): n

Partition type:

p primary (0 primary, 0 extended, 4 free)

e extended

Select (default p): p

Partition number (1-4, default 1): 1

First sector (2048-15130623, default 2048): 2048 // 这里至少要用2048

Last sector, +sectors or +size{K,M,G} (2048-15130623, default 15130623): 819200

Command (m for help): p

Device Boot Start End Blocks Id System

/dev/sdc1 2048 819200 408576+ 83 Linux

Command (m for help): n

Partition type:

p primary (1 primary, 0 extended, 3 free)

e extended

Select (default p): p

Partition number (1-4, default 2): 2

First sector (819201-15130623, default 819201):

Using default value 819201

Last sector, +sectors or +size{K,M,G} (819201-15130623, default 15130623):

Using default value 15130623

Command (m for help): p

Device Boot Start End Blocks Id System

/dev/sdc1 2048 819200 408576+ 83 Linux

/dev/sdc2 819201 15130623 7155711+ 83 Linux

Command (m for help): t

Partition number (1-4): 1

Hex code (type L to list codes): c

Changed system type of partition 1 to c (W95 FAT32 (LBA))

Command (m for help): w

此时两个分区建立完成 , sdc1 是fat32的分区,sdc2的分区是linux的文件系统

3.对sd卡进行分区

如上图点击 Format Volume ,进行格式化分区, 会出现下图所示

参数如上图 ,点击Format 即可对sd的sdc1 进行格式化格式化后下图:

选中剩余的分区, 点击 Format Volume ,进行格式化分区, 会出现下图所示:

此时sd卡的分区就可以了, 接下来往sd内烧写uboot。

3.Sd卡写入uboot

在linux主机中执行

sudo ./boot_format_sdk config_sram_p1020_667M.dat u-boot.bin -sd /dev/sdc

把uboot.bin 烧进/dev/sdc 分区内。

4.Sd卡中存放内核和文件系统文件

往sd卡的第一个分区内放入uImageuboot.binp1020rdb.dtb和rootfs_nor.jffs2这些内容,经过测试发现fatload命令在使用fat文件系统时对于大容量的sd卡支持的不好,因此对于大容量的sd卡,可以使用ext2load命令进行。

1. 在sd卡启动后使用如下命令进行系统的烧写 :

Sd卡启动 读取uboot的命令:

fatload mmc 0:1 1000000 /u-boot.bin

ext2load mmc 0:1 1000000 /u-boot.bin

Sd卡启动 烧写uboot的命令:

protect off all;erase eff80000 efffffff ; cp.b 1000000 eff80000 $filesize

Sd卡启动,读取内核的命令:

fatload mmc 0:1 1000000 /uImage

ext2load mmc 0:1 1000000 /uImage

Sd卡烧写uImage的命令:

erase ef100000 efefffff; cp.b 1000000 ef100000 $filesize;imi ef100000 ;

Sd卡烧写dtb文件:

fatload mmc 0:1 1000000 /p1020rdb.dtb

ext2load mmc 0:1 1000000 /p1020rdb.dtb

erase ef000000 ef0fffff; cp.b 1000000 ef000000 $filesize;

Sd卡烧写rootfs文件:

fatload mmc 0:1 1000000 /rootfs_nor.jffs2

ext2load mmc 0:1 1000000 /rootfs_nor.jffs2

erase e8000000 eeffffff ; cp.b 1000000 e8000000 $filesize ;

可以把这些命令做成一个自启动的命令即可实现自动烧写系统的功能

Fatload 自动更新

setenv sdupdate "fatload mmc 0:1 1000000 /u-boot.bin ; protect off all;erase eff80000 efffffff ; cp.b 1000000 eff80000 $filesize ;fatload mmc 0:1 1000000 /uImage;erase ef100000 efefffff ; cp.b 1000000 ef100000 $filesize ;imi ef100000 ;fatload mmc 0:1 1000000 /p1020rdb.dtb ;erase ef000000 ef0fffff ; cp.b 1000000 ef000000 $filesize ; fatload mmc 0:1 1000000 /rootfs_nor.jffs2 ;erase e8000000 eeffffff ; cp.b 1000000 e8000000 $filesize ;"

Ext2load自动更新

setenv sdupdate "ext2load mmc 0:2 1000000 /u-boot.bin ; protect off all;erase eff80000 efffffff ; cp.b 1000000 eff80000 $filesize ;ext2load mmc 0:2 1000000 /uImage;erase ef100000 efefffff ; cp.b 1000000 ef100000 $filesize ;imi ef100000 ;ext2load mmc 0:2 1000000 /p1020rdb.dtb ;erase ef000000 ef0fffff ; cp.b 1000000 ef000000 $filesize ; ext2load mmc 0:2 1000000 /rootfs_nor.jffs2 ;erase e8000000 eeffffff ; cp.b 1000000 e8000000 $filesize ;"

setenv bootcmd run norupdate ;saveenv;