天天看點

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的方法設定環境變量,然後就可以将闆子啟動起來了。

繼續閱讀