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系统的启动。