OMAP353X EVM制作SD/MMC卡

来源:互联网 发布:cocoa编程开发者手册 编辑:程序博客网 时间:2024/04/29 22:06

参考文献:

http://blog.csdn.net/lzhengp1986/article/details/6858925

http://blog.chinaunix.net/space.php?uid=23373524&do=blog&id=2426924


1.分区

一、格式化SD卡,将SD卡分成FAT32+EXT3两个分区;(经实验不必那么麻烦,不用在windows格式化)

A)按照http://blog.sina.com.cn/s/blog_68e596750100jx9m.html中给出的步骤,先执行到第11步。如果出现重启的警告,那么格式化可能不会成功。

前11步如下:

1、首先在Windows下使用FAT32格式化整个SD卡,不要使用快速格式化。SD卡的大小尽量大些,OMAP3 EVM要求大于2G,我用的8G。

2)启动Linux,卸载掉Windows下的SD卡。在Linux下加载,最好是用读卡器(虚拟机下)。加载成功后,可以看到你的SD卡。

注:链接中作者的SD卡已经分成两个区了,所以可以看见两个盘符。

3)查看文件系统信息和SD卡的挂载点,输入命令:$ df -h,可以看见SD卡的挂载点/dev/sdb1(sdb或者sdc等)。
4)卸载SD卡。在格式化SD卡之前需要卸载SD卡,输入命令:$ umount /dev/sdb1,或者直接在图形化界面中卸载。

注:卸载后最后再使用$ df -h命令确认一下是否卸载成功。

5)格式化SD卡。输入命令:$ sudo fdisk /dev/sdb。如果你的文件系统显示为/dev/sdc,就替换为/dev/sdc。

注:但是,如果挂载点显示为/dev/sdb1,那仍然输入$ sudo /dev/sdb。显示为sdb1的原因是里面已经有一个分区了。

7) 输入命令p,参看SD卡的具体信息。我的SD卡总共有7969MB,7969177600 bytes,246个heads,62个sectors/track,1020个cylindes,有一个分区(这些信息会根据自己的情况而定)。

8) 删除所有的SD卡分区。输入命令 :d。

9) 如果SD卡不是255 heads,63 sectors/track,按照以下步骤建立扇区。输入命令扩展命令x,然后输入命令 h,改变heads = 255;接着输入命令 s,改变sectors/track = 63;输入命令 c,计算出cylinders =  (SD卡的字节数目)/255/63/512 = 7969177600 bytes/255/63/512 = 968,这里取整数。输入命令 r,返回普通命令页面。输入命令 p,确认SD卡信息。

10)建立两个分区FAT32和EXT3,首先建立第一个分区,输入:n,然后选择p,分区号输入1,First cylinder为1,last cylinder输入300。然后,改变分区的系统ID,输入命令t,并且选择第一分区,输入分区类型码c(FAT32)。激活第一分区的bootable标志,输入命令a,选择第一分区。接着,建立第二个分区,输入:n,然后选择p,分区号输入2,First cylinder为默认值301,last cylinder也为默认值968。到此,FAT32和EXT3分区建立完毕,输入命令p,确认分区信息。

11)输入命令w,将分区信息写入到SD卡并推出格式化菜单。

注:这里会出现两个Warning,多了一个16号警告,内容如下

            Command (m for help): w
           The partition table has been altered!

           Calling ioctl() to re-read partition table.

           WARNING: <新的分区表要重启后才生效,kernel仍然使用旧的分区表>

           WARNING: Re-reading the partition table failed with error 16: Device
           or resource busy.
           The kernel still uses the old table.
           The new table will be used at the next reboot.
           Syncing disks.


         这时需要重启系统,然后再在虚拟机中载入SD卡。此时使用$ df -h命令仍然只能看到一个挂载点。然后,卸载SD卡!接着执行后面的步骤。

12)格式化分区1:$ sudo mkfs.msdos -F32 /dev/sdb1 -n LABEL1,回车后显示mkfs.msdos 2.11 (12 Mar 2005)。格式化分区2:sudo mkfs.ext3 -L LABEL2 /dev/sdb2,回车后显示

            mke2fs 1.40.8 (13-Mar-2008)
            Filesystem label=LABEL2
            OS type: Linux
            Block size=4096 (log=2)
            Fragment size=4096 (log=2)
            335872 inodes, 1341427 blocks
            67071 blocks (5.00%) reserved for the super user
            First data block=0
            Maximum filesystem blocks=1375731712
            41 block groups
            32768 blocks per group, 32768 fragments per group
            8192 inodes per group
            Superblock backups stored on blocks: 
             32768, 98304, 163840, 229376, 294912, 819200, 884736

            Writing inode tables: done                            
            Creating journal (32768 blocks): done
            Writing superblocks and filesystem accounting information: done

            This filesystem will be automatically checked every 22 mounts or
            180 days, whichever comes first.  Use tune2fs -c or -i to override.

 

到此创建Linux的启动SD卡完成。这时,会出现两个可见的分区;否则,格式化失败。其主要原因出在“新的分区表在重启后生效”这一步,也就是重启后新的分区表没能生效。在网上搜一下有相关的解决办法,我采用了版本更高的Ubuntu系统来完成分区

分区成功后,最好重新在Windows下再次使用FAT32格式化第一个引导分区LABEL1。我的电脑>>管理>>计算机管理>>磁盘管理。

2、将xloader文件的名字改成MLO,首先复制到SD卡的FAT32分区,然后再复制uboot和uImage文件。注意:xloader、uboot和uImage的版本最好一致,而且一定要和板子上的bootloader版本一致。关于查看bootloader版本的方法相关的网站上有介绍。我的xloader和uboot是从OMAP35x-PSP-SDK-02.01.03.11中拷贝出来的,


3.在LABEL2分区,放入文件系统NFS挂载的文件系统

root  usr etc ....

等多个文件夹

4.设置板上的环境变量
setenv mmcboot 'mmcinit; fatload mmc 0:1 0x80000000 uImage; bootm 0x80000000'
setenv bootargs mem=99M console=ttyS0,115200n8 root=/dev/mmcblk0p2 rw rootdelay=2 rootfstype=ext3 rootwait
可以启动

#pri
baudrate=115200
netmask=255.255.254.0
bootfile="uImage"
get_kernel=run nand_kernel
get_initrd=run nand_initrd
nand_kernel=nand read.i 0x80000000 280000 220000
nand_initrd=nand read.i 0x81600000 780000 1000000
tftp_kernel=tftpboot 0x80000000 uImage
tftp_initrd=tftpboot 0x81600000 ramdisk.gz
bootargs_nfs=mem=128M console=ttyS0,115200n8 noinitrd rw root=/dev/nfs nfsroot=/mnt/nfs,nolock
addip=setenv bootargs $(bootargs) ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname):eth0:on
boot_rd=run get_kernel; run get_initrd; setenv bootargs $(bootargs_rd); run addip; bootm 0x80000000
boot_fs=run get_kernel; setenv bootargs $(bootargs_fs); bootm 0x80000000
boot_nfs=run get_kernel; setenv bootargs $(bootargs_nfs); run addip; bootm 0x80000000
bootdelay=6
ethaddr=00:50:C2:7E:8E:05
nfshost=192.168.1.165
bootargs_rd=mem=128M console=ttyS0,115200n8 root=/dev/ram0 initrd=0x81600000,40M ramdisk_size=40960
bootargs_fs=mem=99M console=ttyS0,115200n8 noinitrd root=/dev/mtdblock4 rw rootfstype=jffs2
bootcmd=run mmcboot
filesize=B040F0
mmcboot=mmcinit; fatload mmc 0:1 0x80000000 uImage; bootm 0x80000000
bootargs=mem=99M console=ttyS0,115200n8 root=/dev/mmcblk0p2 rw rootfstype=ext3 rootwait
stdin=serial
stdout=serial
stderr=serial