在嵌入式linux/android系统开发时,前期往往是学习了解针对厂商demo板的代码,到软件需求成熟后需要进行自己产品的代码开发。浏览嵌入式linux/android SDK时,会发现每个厂商都会在这些开发源代码中维护自己的产品代码(我将这个称为板级代码)。下面笔记就自身经验介绍如果在u-boot中增加自己的产品代码。
1.浏览u-boot/board/ ,E文没问题的话应该看到其他厂商所维护的产品代码目录,在这里需要新建一个文件夹,文件夹自由发挥命名为产品相关的信息,这里举例如命名为my_board。
2.在my_board下创建至少(为什么?)三个文件 Makefile, config.mk, my_borad.c 。注意my_board.c文件名要与刚才新建的文件夹名一致,kids,这里不要自由发挥命名。
为什么说要至少三个呢,因为这三个文件是必须的,my_board.c最终会被执行,做一些产品的私有配置,如果在开发中有其他很多配置要做的,则可以在这里再新建多一些.c文件,名字自由发挥,然后实现的函数由my_board.c去调用即可。
TIPS: Makefile, config.mk, my_borad.c 这三个文件一般是从你的demo源码中拷贝过来,然后修改.c文件命名.
3.修改你的Makefile文件,增加:
OBJS := my_board.o other.o #kids:other指你刚才加入的除my_board.c外的.c文件
4. 浏览u-boot/include/configs, 这里都是厂商维护自己的板级配置文件,在这里加入my_board.h,配置文件,同一,这个文件一般是从demo中拷贝过来,然后做适当的更改。注意这个.h文件不要自由发挥命名,要上面的一致,不然编译时无法由这个文件找到你产品板级代码的目录。
5.修改 u-boot/Makefile 文件,加入产品代码编译选择。
my_board_config : unconfig
@./mkconfig $(@:_config=) arm omap4 my_board
再一次强调,上面的修改,名字该和上面对应要严格对应,不要自由发挥。另外对立面不明白的信息可以参考demo来修改。
6.Mach Type 修改,Mach就是平台ID的意思。Mach Type最终会在u-boot/board/my_board.c中进行注册。u-boot/board/my_board.c所注册Mach Type一定要和Linux kenel的定义的ID一致。否则u-boot无法加载内核。浏览include/asm/mach-types.h 这里是厂商的Mach Type宏定义。在这里定义一个你产品的Mach Type宏,然后在my_board.c中将此Mach Type注册进去。
Tips:ARM Linux Mach Type定义在:arch/arm/tools/mach-types 文件中
7.努力配置完你的交叉编译环境后,通过下面命令编译
make my_board_config
这里的my_board_config用来指定配置,my_board这个前缀就是和上面的命名遥相呼应的。
tips:makefile就是通过这些名字信息来匹配编译配置的。