环境:
PC机系统:Redhat6.1
目标板: OK6410
目标板系统:linux3.0.101
编译器: arm-linux-gcc4.3.2
uboot文件已经上传到这里:http://download.csdn.net/detail/king_bingge/6820791
移植步骤:
1. tar -xf linux-3.***
2. make distclean 清楚所有中间文件和配置文件
3. 进入linux-3.***/arch/arm/mach-s3c64xx目录,我们能看到如下文件
可以看到,对于我们的时s3c6410这个芯片来说,linux3.0.1的内核已经支持了这几款开发板,那么我们可以选择一个功能相近的来进行移植,mini6410是个不错的选择。
4. 执行cp mach-mini6410.c mach-ok6410.c
5. 打开mach-ok6410.c文件,将里面的mini6410全部替换为ok6410,总共有64处,暂时修改完毕。
6. 在同一目录下,gedit Kconfig 打开这个文件,找到MINI6410的配置,为了不破坏源码,我们复制一份ok6410的出来,如下图示
要注意此处的OK6410都是大写的,这会在后边用到。
7. 下面就说一下刚刚提到大写的原因,继续打开我们的gedit mach-ok6410.c这个文件,找到下面的东西,改为大写OK,这两个就是匹配我们之前提到的那个字符串
8. 自然,因为我们加入了mach-ok6410.c这个文件,所以在对应的目录下面的makefile中需要添加该文件进去,如下图示
还是一样没找到mini6410的地方。
注意红色箭头部分一定要正确,否则会出现如下错误
9. 到这里为止,该目录的一些需要注意的地方就修改完毕了。但是有一点非常重要的就是,我们此时的机器码变成了ok6410,所以,为了我们的uboot能够引导kernel,所以这里的机器码必须要匹配,进入linux-3.***/arch/arm/tools,打开mach-types文件,修改机器码,如下图示
Smdk6410的修改为ok6410,当然这个需要和你的uboot对应起来,否则将无法引导内核。
10. 当然了,为了使得我们编译出来的内核能够在开发板上运行,在顶层目录下的makefile也需要做相应的修改,这个和uboot移植是一样的道理
修改为
到这里,我们kernel的移植已经完成了百分之八十了。继续完成最后的战役!
11. cd linux-***/arch/arm/configs 找到配置文件 s3c6400_defconfig
12. cp s3c6400_defconfig ../../../.config
其中,.config文件在我们使用make menuconfig的时候会用到
13. cd ../../../进入顶层目录,执行make menuconfig
14. 在 -->General setup-->Cross-compiler tool prefix中输入arm-linux- 如下图示
16. KernelFeatures --->选上Use the ARM EABI to compile thekernel,因为我是用的arm-linux-gcc-4.3.2.tgz编译器使用了EABI方式,所以这就需要内核同样配置EABI编译属性才能支持EABI编译出来的应用程序如下
16. System Type --->进入勾选上自己的OK6410,如下图示,其他复选框去掉
17. 保存配置,然后执行make zImage 编译内核。
18. 做完这些工作,我们就可以把生成的zImage文件烧写到开发板,如下可以看到,内核已经正常启动了。