解压u-boot后,u-boot下面有许多许多的目录,有成百上千个文件。想想都觉得恐怖,怎看这么多的文件。刚开始真的是没有办法,连程序的入口都不知道在哪,用些时间熟悉了它的目录结构,开始有些了解。
u-boot支持很多的平台和板子,我们只关心的是ARM平台,我们可以把不相关的平台的内容删除,以免妨碍我们,看着文件少了看着也舒服点。既然要移植那就要分析它的代码,得弄明白我们需要改什么地方、怎么改,具体是要非常清楚cpu启动那部分的汇编和班子初始化那里,其它所有平台都通用的代码就没有必要去看了。
我觉得在启动第一阶段,那些汇编部分更简单 很容易明白,用汇编它也复杂不到那里去。从start_armboot()开始的C代码就越看越复杂,那些太复杂了,数据类型定义又多,光是找这些数据类型的定义就已经晕了,有些地方又插入些别的,简直就混编了。
对于Makefile,我打开u-boot的第一个主Makefile有2200多行,最初以为Makefile不会很复杂,现在什么都变得很复杂了。像u-boot和Linux系统这些大工程,面对它们需要的是更多的耐心和信心,比如Makefile的:
objects = program.o foo.o utils.o
program : $(objects)
cc -o program $(objects)
这个很简单,一眼就看出来
files = foo.elc bar.o lose.o
$(filter %.o,$(files)): %.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
$(filter %.elc,$(files)): %.elc: %.el
emacs -f batch-byte-compile $<
那么这个复杂点,又多了变量,有函数和自动变量。仔细看看也不难
%.d: %.c
@set -e; rm -f $@; \
$(CC) -M $(CPPFLAGS) $< >; $@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ >; $@; \
rm -f $@.$$$$
这个呢??实在太难看了,................................
就这样,这些内容就像我们画板子,刻电路板一样。即使要手动布线,一套常用的完整的规则我们很容易把握,可是总是有一些不怎么规则的东西,要我们去注意每一个细节。要你精疲力尽!!
哥做嵌入式也不容易...........
