最近参加了一个项目,主板采用的是TI的OMAP-L138,为了引导linux内核,准备采用u-boot作为bootloader。在搜集资料的过程中发现关于移植u-boot到基于OMAP-L138电路板的资料非常少,而且TI的OMAP-L138采用三级boot,比其他单arm9核的SOC要复杂的多,因此纠结了很长时间。好不容易参照hawkboard的配置把u-boot-2011.03移植到我们的板子(gcboard)上,在此记录下我的一点经验,希望能对后来者有所帮助。
step 1.移植准备
u-boot-2011.03 已经包含了对hawkboard开发板的完整支持,这是一款基于OMAP-L138的开发板,它的外设主要有:
1)128MB DDR2 SDRAM
2)128MB NAND Flash
3)一个标准RS232串口
4)一个10M/100M高速网卡
而我们的项目所用的开发板与hawkboard主要的区别在于没有nand flash,多了一块SPI flash(采用STMicro公司的M25P128,)
移植u-boot主要是为了在开发初期调试内核,文件系统,后期一般他只需要做适当的初始化,再引导内核就可以了,所以移植需要关注的基本就是这些。
为了熟悉程序结构,首先使用hawkboard的默认配置对uboot进行编译:
make hawkboard_config
make
编译完成后可以看到在主目录下生成了uboot.bin文件,为了方便分析,使用如下命令将其反汇编:
arm-linux-objdump -D -m arm u-boot > u-boot.asm
利用u-boot.asm 和 system.map,u-boot.lds这三个文件,再配合源代码,我们可以很容易的分析程序流程:
首先看u-boot.lds文件,它指定了程序链接顺序,在最初几行我们可以看到:init_sequence
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SEC