U-Boot传承了开源软件的真谛,那就是“指导你,但是绝对不帮你做任何事情”,看着DENX上那长长的长长的Documents目录,俺心中的绝望无止境的蔓延,千万匹草泥马奔腾而过。这种痛并快乐着的赶脚,真是虐我千百变,待你如初恋啊。。。
现在我手上是一块Forlinx的开发板,光盘上有编译好的镜像文件,能够正常运行并且驱动所有的外设;已经在Fedora20下安装好了光盘提供的交叉编译器arm-arago-linux-gnueabi,并且下载与镜像文件同版本以及最新版本的Linux内核及U-Boot源代码。使用tar命令解压U-Boot源代码(这里使用的是最新版本u-boot-2014.04.tar.bz2,它才有将am335x收进了mainline),并进入它的source目录。
DENX Manual->4. System Setup
编译U-Boot时需要主机的串口和TFTP server,文档里不推荐使用minicom,而使用包含文件传输协议的kermit。
还要按照这里的提示,修改tftp-server的配置。
另外,貌似最好能够搭建DHCP server和NFS server,现在暂时跳过,等需要的时候再搭。
DENX Manual->5.3. Configuration
U-Boot默认支持很多开发板的config,见include/configs/,以TI的beagle开关板为例,编译U-Boot的时候:
make ARCH=arm CROSS_COMPILE=/opt/arm-arago-linux-gcc/bin/arm-arago-linux-gnueabi- O=../build omap3_beagle_config
make ARCH=arm CROSS_COMPILE=/opt/arm-arago-linux-gcc/bin/arm-arago-linux-gnueabi- O=../build all
这时候就会在上一级目录的build子目录下,生成一大堆文件了。
DENX Manual->5.4.2. Installation Using a BDM/JTAG Debugger
给完全空白的新存储器烧写数据,一般使用JTAG。这里推荐的JTAG是BDI2000/BDI3000,价格有点贵,所以暂时还是打算使用包含在SD卡里面的具备烧写功能的u-boot来烧写数据。单独更新MLO、u-boot.img、uImage、ubi.img的命令,是SD卡拔下来,上电从NandFlash运行之后,u-boot提供的。所以自己编译的u-boot必须也具备这些功能。调试阶段的u-boot会一直等待用户指令,而不是一溜烟的装载完内核镜像就告别自身使命了。总之,SD卡应该能搞定烧写阶段所有的事情。
DENX Manual->5.5. Tool Installation
u-boot启动时,要以特殊的image format调用其他images,所以mkimage这个工具要安装,从而将Linux内核的zImage变成uImage。Forlinx光盘里面包含有mkimage,也可以通过yum install uboot-tools来安装。
DENX Manual->5.9. U-Boot Command Line Interface
到了这里,就是介绍运行起来的u-boot各种命令了,包括存储管理、烧写、设置环境变量等等。在往下走之前,需要根据自己的硬件来添加相应文件和修改对应配置。
=====================================================================>>>
http://blackfin.uclinux.org/doku.php?id=bootloaders:u-boot:porting
top-level Makefile and MAKEALL and MAINTAINERS
board configuration file: include/configs/bf537-cow.h
board directory: boards/bf537-cow/
要想使用自己的硬件来编译一个u-boot的话,基本上要修改的就是上面的东西了。
1.本来是要修改Makefile/MAKEALL/MAINTAINERS的内容,但是最新版本的U-Boot提供了一个board.cfg文件,只要在这个文件里面增加内容就行了,像下面这样:
Active arm armv7 am33xx ti maria_am335x maria_am335x maria_am335x:SERIRAL1,CONS_INDEX=1,EMMC_BOOT
意思是新增加了一个board,名字为maria_am335x。
(千万要注意拼写,我就是把第四个am33xx写成了am335x,编译的时候总是提示说找不到“asm/arch/omap.h”这个文件,造成这个的原因应该是am33xx与CPU的宏有关。)
第一个maria_am335x是指board下面的目录名;
第二个maria_am335x是指board对应的开发板名;
第三个maria_am335x是指提示option选项(?)。
2.board configuration file使用接近的替代。
(最新版的U-Boot提供了beagle和am335x_evm的支持,这两个我都使用默认的配置编译了一下,分别从SD卡启动之后发现,beagle的串口没有打印信息,而am335x_evm会输出一些。使用vim查看MLO文件,发现beagle的image header指示的是从0x40200800开始,而am335x_evm是从0x402f0400开始。0x40200800是AM37x的内部RAM起始地址,0x402f0400是AM335x的内部RAM起始地址,因此还是打算在am335x_evm的基础上修改。)
将include/configs/am335x_evm.h复制为include/configs/maria_am335x.h,记得修改它的预编译宏定义。
修改include/configs/maria_am335x.h的CONFIG_SYS_LDSCRIPT定义,改过来相应的目录名。
3.board directory使用接近的替代。
将board/ti/am335x/复制为board/ti/maria_am335x/,除此之外,还要将其中u-boot.lds的一条包含路径的代码,相应的修改过来。
<<<=================================================================
完成之后,按照前面提到的步骤make,build目录下就会生成需要的MLO和u-boot.img了,将这两个文件复制到已经正确格式化的SD卡中,插入开发板上电,就会发现串口的打印信息了。但是,这离完整的驱动核心板还有很长的距离。
用户377235 2014-6-19 07:28