AM335x U-Boot User's Guide
/******************************************************************
* author: 盧浩
* time: 2012.09.11
* environment: ubuntu10.04LTS +TI AM3359
* kernel version: linux-3.2
* QQ Group For Technology Exchange:122879839
******************************************************************/
U-boot
AM335x的ROM代碼作爲第一階段引導加載程序。第二和第三階段引導加載程序是基於
U-BOOT[1]。在本文檔的其餘部分時參照的二進制文件,二進制文件的第二階段被稱爲
SPL和簡單的U-Boot的二進制文件的第三階段。 SPL是一個非交互的加載器和一個特製的U-Boot的版本。同時它是建立在構建U-Boot的。ROM代碼可以從任何下列設備加載SPL鏡像。
•存儲設備非XIP(NAND/ SDMMC)
兩個階段的uboot設計
搭建uboot開發環境
進入官方提供的SDK包的uboot目錄
$ cd ./AM335x-LINUX-PSP-MM.mm.pp.bb/src/u-boot/u-boot-MM.mm.pp.bb
編譯口令
$ [ -d ./am335x ]&& rm -rf ./am335x
$ make O=am335xCROSS_COMPILE=arm-arago-linux-gnueabi- ARCH=arm am335x_evm
編譯完成將會生成可執行性文件MLO和u-boot.img。
主機配置:
用串口線把主機和EVM板連接起來,設置超級終端參數如下:
*Baud rate:115,200
*Data bits: 8
*Parity: None
*Stop bits: 1
*Flow control: None
開發板配置:
設置啓動方式:
請注意,紅色位置爲off,綠色位置爲on
Nand啓動,請設置撥碼開關如下:
SPI啓動,請設置撥碼開關如下:
UART啓動,請設置撥碼開關如下:
SD啓動,請設置撥碼開關如下:
CPSW啓動,請設置撥碼開關如下:
注意,從CPSW啓動這樣設置是因爲EVM板用的是RGMIImode。
燒寫:
利用超級終端從串口燒寫:
撥碼開關設置爲串口啓動模式
這裏我們將用到spl/u-boot-spl.bin,MLO和u-boot.img文件,文件已經在光盤中提供。
1. 連接串口,給開發板上電,看到超級終端輸出cccc的時候,選擇發送,在文件裏面選擇u-boot-spl.bin,用x-modem傳輸文件,當傳輸完畢,會打印出關於TI spl的信息。
2. 再次選擇發送,在文件裏面選擇u-boot.img,用y-modem傳輸文件,當傳輸完畢,uboot將會啓動,此時按任意鍵進入控制檯。
3. 燒寫uboot到nand中
燒寫MLO到nand:
U-Boot# loadb 0x82000000
在超級終端選擇發送文件,MLO,用Kermit協議傳輸文件,等待發送完成,然後在控制檯進行如下操作
U-Boot# nand erase 0x0 0x20000
U-Boot# nandecc hw 2
U-Boot# nand write.i 0x82000000 0x0 0x20000
燒寫uboot到nand中:
U-Boot# loadb 0x82000000
在超級終端選擇發送文件,u-boot.img,用Kermit協議傳輸文件,等待發送完成,然後在控制檯進行如下操作:
U-Boot# nand erase 0x80000 0x40000
U-Boot# nandecc hw 2
U-Boot# nand write.i 0x82000000 0x800000x40000
4. 從SD卡啓動
撥碼開關設置爲SD啓動模式
這裏我們將用到MLO,u-boot.img,uImage這三個文件。
首先製作給SD卡分區
製作腳本:
創建新文件,將以下內容複製到文件中,並將文件命名爲mk3PartSDCard.sh:
#! /bin/sh
# mk3PartSDCard.sh v0.3
# Licensed under terms of GPLv2
DRIVE=$1
dd if=/dev/zero of=$DRIVE bs=1024count=1024
SIZE=`fdisk -l $DRIVE | grep Disk | awk'{print $5}'`
echo DISK SIZE - $SIZE bytes
CYLINDERS=`echo $SIZE/255/63/512 | bc`
sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE<< EOF
,9,0x0C,*
10,115,,-
126,,,-
EOF
mkfs.vfat -F 32 -n "boot"${DRIVE}1
umount ${DRIVE}1
mkfs.ext3-L "rootfs" ${DRIVE}2
umount${DRIVE}2
mkfs.ext3-L "START_HERE" ${DRIVE}3
保存,打開終端,輸入:
host$ chmod755 mk3PartSDCard.sh
然後把SD卡插入電腦,連接至ubuntu,並且識別到
之後ubuntu中會顯示出該SD卡。打開終端,輸入:
$ df –hT
將看到類似如下信息:
FilesystemType Size Used Avail Use% Mounted on
/dev/sda1ext4 19G 16G 2.5G87% /
nonedevtmpfs 245M 308K 245M 1% /dev
none tmpfs 249M 192K 249M 1% /dev/shm
none tmpfs 249M 340K 249M 1% /var/run
none tmpfs 249M 0 249M 0% /var/lock
none tmpfs 249M 0 249M 0% /lib/init/rw
/dev/sdb1vfat 1.9G 4.0K 1.9G 1% /media/00F8-E7F0
在以上信息中,/dev/sdb1 是我的SD卡設備,也許你正在使用的SD卡設備名稱不太一樣,所以請記住你的SD卡設備名稱,接下來會用到。
運行腳本
打開終端,輸入:
$ umount/dev/sdb1(換成你的SD卡設備名)
$ sudo./mk3PartSDCard /dev/sdb
等待腳本執行完畢後,輸入:
$ umount/dev/sdb1
$ umount/dev/sdb2
$ umount/dev/sdb3
拔出 USB讀卡器,再次插入電腦,在終端輸入:
$ df –hT
將顯示以下內容:
FilesystemType Size Used Avail Use% Mounted on
/dev/sda1ext4 19G 16G 2.5G87% /
nonedevtmpfs 245M 308K 245M 1% /dev
none tmpfs 249M 192K 249M 1% /dev/shm
none tmpfs 249M 340K 249M 1% /var/run
none tmpfs 249M 0 249M 0% /var/lock
none tmpfs 249M 0 249M 0% /lib/init/rw
/dev/sdb1vfat 70M 512 70M 1% /media/boot
/dev/sdb2ext3 888M 18M 826M3% /media/rootfs
/dev/sdb3ext3 881M 17M 819M3% /media/START_HERE
至此,SD 卡分區完成
拷貝 MLO, U-Boot,Kernel,Filesystem
將之前編譯好的MLO,u-boot.img,uImage文件拷貝至SD卡boot分區。
拷貝 Filesystem:
打開終端,輸入:
$ sudo cp -rv~/ti-sdk-am335x-evm-05.03.02.00/targetNFS/* /media/rootfs
執行完畢後FilesSystem拷貝完畢。
此時將SD卡插入板子上SD插槽,上電,linux系統就可以起來了,串口也能看到打印信息。
板載LCD上會顯示如下
至此,完成AM3359上linux系統的啓動。