OMAP3EVM板从SD卡启动的方法

我的板子一拿下来ramdisk和NAND就被一个师弟和一个师妹擦除了,所以拿到板子后还没有看到启动起来过。在网上查了一下,可以用SD卡启动,方法总结如下:

注:关于启动过程及步骤还可以参考另一篇稍微详细点的文档《ICETEK-OMAP3530-Mini使用手册》,mini板与evm板差别较小。

一、格式化SD卡,将SD卡分成FAT32+EXT3两个分区;

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中拷贝出来的,但是这个PSP里面的uImage没法在我的Mistral OMAP3530 EVM板上启动起来,老是报CRC错误:

OMAP3_EVM # pri
bootargs=setenv bootargs console=ttyS2,115200n8 noinitrd root=/dev/mtdblock4 rw
rootfstype=jffs2 (这里没有设置mem大小,所以后面启动kernel时还会卡住)
bootcmd=onenand read 80200000 280000 400000 ; bootm 80200000
bootdelay=10
baudrate=115200
netmask=255.255.254.0
bootfile="uImage"
filesize=1000
stdin=serial
stdout=serial
stderr=serial
mmcboot=mmcinit; fatload mmc 0 0x80000000 uImage; bootm 0x80000000
Environment size: 349/131068 bytes
接着,run mmcboot
OMAP3_EVM # run mmcboot
reading uImage
Invalid FAT entry 4096 bytes read (A)
## Booting kernel from Legacy Image at 80000000 ... ( B1)
Image Name: Linux-2.6.29-rc3-omap1
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2128064 Bytes = 2 MB
Load Address: 80008000 (B2)
Entry Point: 80008000 (B3)
Verifying Checksum ... Bad Data CRC(C)
ERROR: can't get kernel image!

所以,网上关于Bad Data CRC的错误的原因说了很多,大多是存储空间没有分配正确造成的,经过检查后确定我这里不是这个原因,所以我先换了一个uImage,这时可以启动uImage了,但是会在booting kernel处卡住:

OMAP3_EVM # setenv mmcboot 'mmcinit; fatload mmc 0 0x80000000 uImage.bin; bootm
0x80000000'
OMAP3_EVM # run mmcboot
reading uImage.bin
2393456 bytes read
## Booting kernel from Legacy Image at 80000000 ...
Image Name: Linux-2.6.32
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2393392 Bytes = 2.3 MB
Load Address: 80008000
Entry Point: 80008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK
Starting kernel ...
Uncompressing Linux.............................................................
................................................................................
.......... done, booting the kernel.

网上关于这个错误的说法也很多,像http://processors.wiki.ti.com/index.php/Kernel_-_Common_Problems_Booting_Linux,Cause2说如果kernel和bootloader的版本不一致也会出现这种错误。所以,我去找了一个经过验证的uImage文件来启动。而这次又卡在"Memory policy: ECC disabled, Data cache writethrough"这里了,在网上搜了一下,是bootargs中没有设定内存大小,所以需要在bootargs中加入mem参数并按照http://processors.wiki.ti.com/index.php/AM35x_EVM_Boot_from_SD/MMC_card给出的方法将bootargs补全。

注:我的板子是mistral omap3530 evm板,不能用mmc init启动起来,得将中间的空格符删掉。

这时,可以将kernel启动起来,但是还没有挂载文件系统。所以还需要将PSP里面的ramdisk.gz拷贝到SD卡的FAT32分区中,然后再按照Booting from MMC using Ramdisk stored on MMC card的方法设置环境变量,然后就可以将板子启动起来了。

 

你可能感兴趣的:(Davinci/Omap,image,linux,windows,table,虚拟机,command)