详细解析uboot移植(针对开发板mini2440)
下面会对每一个步骤详细解答,包括为什么这样做?版本用的是u-boot-2008.10。(不知道为什么,新浪直接屏蔽掉所有以这种格式的注释,所以有些内容显示不出来,不过不影响阅读)
我们选择一般都是寻找最相近的进行移植,首先应该考虑选择MCU(微型控制芯片)一样的开发板,如果没有这类存在,就退而求其次,选择MPU(微型处理芯片,即IP核)一样的开发板。在uboot中没有支持S3C2440(MCU)的开发板,就考虑MPU,S3C2440是arm920t的IP核,所以选择相近的,锁定目标smdk2410开发板,它是以arm920t为核心,三星公司开发的一块开发板。选定目标之后就可以开始移植了。
第一步:移植一般从最顶层文件开始,最顶层当然是Makefile了,从它开始编译的。打开Makefile后找到下面这行字:(最左边的是行数,这个在同类版本中有一些出入,大家找到关键词就行了)
2625 smdk2400_config :
2626
2627
2628 smdk2410_config :
2629 @$(MKCONFIG) $(@:_config=) armarm920t smdk2410 NULL s3c24x0
2630
2631
2632
这几行有什么用呢?定义开发板的名字和其他相关信息,以smdk2410为例,即:
arm:cpu架构;
arm920t:cpu的核;
smdk2410:开发板的名字;
NULL:开发者,这里没有,也可写上你想取的名字;
S3C24X0:片上系统(Soc);
现在我们就可以知道哪些可以修改,哪些不用修改了。
这里没有对我们想要移植的开发板的支持,所以应该加上,改成如下:(红色字为修改的):
2625 smdk2400_config :
2626
2627
2628 smdk2410_config :
2629 @$(MKCONFIG) $(@:_config=) armarm920t smdk2410 NULL s3c24x0
2630
2631MINI2440_config :
2632@$(MKCONFIG) $(@:_config=) arm arm920t MINI2410 NULLs3c24x0
2633
2634
2635
这里注意一点,如果你取名为MINI2440,那么以后涉及开发板的名字时(接下去的会讲到)就必须以这个名字,而且是必须是大写的,否则编译时会找不到相应的文件。
修改完顶层文件后就开始修改其他与顶层文件不在同一层的文件了,我们知道uboot中很多都不需要修改,不同的大部分在于cpu以及board这两个目录中,为什么呢?因为一个关于cpu架构,一个关于开发板类型的。比如smdk2410在board中就有自己的目录,所以新建的这个开发板就得在board中也有自己的目录,这个待会再讲。那么cpu呢?这里面有自己的各种核,比如arm920t,powerPC,x86等,接下去修改的便是arm920t这个目录,让这个IP核也支持它的产品S3C2440。
第二步:进入/cpu/arm920t/start.S,这是一个很重要的文件,我们根据链接脚本可以看出,程序执行都是从这个文件开始执行的。我们讲一下,当在编译前,我们不是一般都会执行这个命令:makesmdk2410_config,这意味着待会编译时就只会讲与smdk2410有关的文件链接一起,所以其他不相关的不会参与编译。那么这个start.S里面有哪些内容需要修改呢?我们查看文件不难发现,里面有对S3C2410的支持,那么S3C2410与S3C2440很类似,所以修改的地方就不多了,只是添加上一些宏定义而已,源代码如下:
136 #if defined(CONFIG_S3C2400) ||defined(CONFIG_S3C2410)
137
138
138 # ifdefined(CONFIG_S3C2400)
140 #
141 #
142 #
143 #else
144 #
145 #
146 #
147 #
148# endif
149
150
151
152
153
154
157
158
159
160 # ifdefined(CONFIG_S3C2410)
161
162
163
164 # endif
165
166
167
168
169
170
171 #endif
现在修改这些代码如下:
135
136 #ifdefined(CONFIG_S3C2400) ||defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440)
137
138
139 #if defined(CONFIG_S3C2400)
140 #
141 #
142 #
143 #else
144 #
145 #
146 #
147 #
148 #endif
149
150#
151#
152#
153#
154#
155#
156#