参考:http://blog.163.com/yi_yixinyiyi/blog/static/1362868892011613211689/
1.制作SD卡分区
一个没有分区的SD卡插入到电脑,在ubuntu10.04下默认的设备节点是/dev/sdb。
打开终端,然后根据提示输入以下命令:
我已是root用户直接输入fdisk /dev/sdb 回车(不用加sudo)
这时我们可以看到系统里的分区有情况:
系统的盘符是/dev/sdb 其下分为二个区 /dev/sdb1 /dev/sdb2
现在我们重新对SD卡进行分区。
首先我们看一下Fdisk命令
指令:fdisk
用途:观察硬盘之实体使用情形与分割硬盘用。
1. 输入 m 显示所有命令列示。
2. 输入 p 显示硬盘分割情形。
3. 输入 a 设定硬盘启动区。
4. 输入 n 设定新的硬盘分割区。
1> 输入 e 硬盘为[延伸]分割区(extend)。
2> 输入 p 硬盘为[主要]分割区(primary)。
5. 输入 t 改变硬盘分割区属性。
6. 输入 d 删除硬盘分割区属性。
7. 输入 q 结束不保存。
8. 输入 w 结束并保存。
下面开始时具体的分区步骤:
==========================================
输入/sbin/fdisk /dev/sdb 回车
Command (m for help):
==========================================
我的SD卡两个分区,所以要删除2次,过程如下:
Command (m for help): d 回车 删除硬盘分割区
Partition number (1-N): 1 回车 删除1分区,
Command (m for help): d 回车
Partition number (1-N): 2 回车 删除2分区
根据你的SD卡里有几个区 就一一删除分区。
==========================================
Command (m for help): P 回车
看下图 已经没有分区了
==========================================
现在我们重新建立分区,这里 我要把8G的SD卡建分成二个分区 ,步骤如下:
第一个是FAT32的分区(分70M)
Command (m for help): n 回车
e extended
p primary partition (1-4)
p 回车
partition uumber(1-4):1 回车 这是选分第1个分区。
first cylinder (1-17183,default 1):1 回车 这里1-17183是表示我的8G卡的存储量。第一个区从1开始。
Last cylinder or +size or +sizeM or +sizeK (1-17183, default 17183): 70 回车
Command (m for help):
-------------------------------------------------------------------------------
SD卡剩下空间作为第二个区,也是Linux主分区,重复刚才分区的步骤。
Command (m for help): n 回车
e extended
p primary partition (1-4)
p 回车
partition uumber(1-4):2 回车 这是分第2个区。
first cylinder (6501-17183,default 6501): 回车
Last cylinder or +size or +sizeM or +sizeK (6501-17183, default 17183): 回车
Command (m for help):
==========================================
刚才起立好分区 现在要改变硬盘分割区属性。
Command (m for help):t 回车
Partition number (1-4): 1 回车
Hex code (type L to list codes): b 回车 这里要们要设定这个区为w95 FAT323分区。
--------------
Command (m for help):t 回车
Partition number (1-4): 2 回车
Hex code (type L to list codes): 83 回车 这里要们要设定这个区为Linux EXT3分区。
==========================================
Command (m for help):a 回车 这里设定硬盘启动区
Partition number (1-4): 1 回车
Command (m for help):p 回车 可以看到刚才分区
Command (m for help):w 回车 输入q 结束不存入硬盘分割区属性。
输入w 结束并写入硬盘分割区属性。
重新启动,若不重启,执行partprobe,它能使内核在不重启的情况接受新的分区表信息。
==========================================
输入fdisk -l 回车 如果命令提示没找到请输入/sbin/fdisk -l 回车查看分区信息。
这时我们可以看到刚才把SD分的区
/dev/sdb1 w95 FAT32
/dev/sdb2 Linux
==========================================
2.制作SD卡启动盘
上面已经将SD卡分成两个区,接下来是格式化SD卡,并拷贝文件的相应的分区,下面贴出的是执行脚本mksd-ti816x.sh:
#!/bin/bash if [[ -z $1 || -z $2 || -z $3 || -z $4 ]] then echo "mksd-ti816x Usage:" echo " mksd-ti816x <device> <MLO> <u-boot.bin> <uImage> <rootfs tar.gz >" echo " Example: mksd-ti816x /dev/sdc MLO u-boot.bin uImage nfs.tar.gz" exit fi if ! [[ -e $2 ]] then echo "Incorrect MLO location!" exit fi if ! [[ -e $3 ]] then echo "Incorrect u-boot.bin location!" exit fi if ! [[ -e $4 ]] then echo "Incorrect uImage location!" exit fi if ! [[ -e $5 ]] then echo "Incorrect rootfs location!" exit fi echo "All data on "$1" now will be destroyed! Continue? [y/n]" read ans if ! [ $ans == 'y' ] then exit fi echo "[Partitioning $1...]" DRIVE=$1 dd if=/dev/zero of=$DRIVE bs=1024 count=1024 SIZE=`fdisk -l $DRIVE | grep Disk | awk '{print $5}'` echo DISK SIZE - $SIZE bytes CYLINDERS=`echo $SIZE/255/63/512 | bc` echo CYLINDERS - $CYLINDERS { echo ,9,0x0C,* echo ,,,- } | sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE echo "[Making filesystems...]" mkfs.vfat -F 32 -n boot "$1"1 &> /dev/null mkfs.ext3 -L rootfs "$1"2 &> /dev/null echo "[Copying files...]" mount "$1"1 /mnt cp $2 /mnt/MLO cp $3 /mnt/u-boot.bin cp $4 /mnt/uImage umount "$1"1 mount "$1"2 /mnt tar zxvf $5 -C /mnt &> /dev/null chmod 755 /mnt umount "$1"2 echo "[Done]"
将这个执行脚本和所需的文件拷贝到/tftpboot目录(其他目录也可以)下,在执行脚本前mount一下,如果发现挂载了的umount卸载。
执行./mksd-ti816x.sh /dev/sdb MLO u-boot_dvr.bin uImage_ud816x_dvr rootfs.tar.gz命令,最终在在分区一放入加载镜像文件,在分区二放入根文件系统。
最后执行: setenv bootcmd 'mmc rescan 0;fatload mmc 0 0x81000000 uImage;bootm 0x81000000'
setenv bootargs 'console=ttyO2,115200n8 rootwait rw mem=256M notifyk.vpssm3_sva=0xBEE00000 vram=20M root=/dev/mmcblk0p2 noinitrd'
saveenv
重新启动开发板,成功启动u-boot,linux内核和根文件系统。