有道云笔记地址:
详情看这里链接,记录太多,就不一一排版了。
http://note.youdao.com/noteshare?id=4df8da7c54557abfe7089285917c65f9
一、内核移植初体验
(2)这个文件最初是来自于三星的SMDKV210开发板附带的光盘资料
(3)删除无关文件,一般都是在arch文件下的架构文件,需要删除其他的架构,只保留ARM相关的。
进入arch/arm文件下,删除mach-xx其他文件。只保留三星相关的。
(1)检查Makefile中ARCH和CROSS_COMPILE
所以,我们是执行: make smdkv210_android_defconfig
默认情况下直接make则会直接单线程编译。但是如果make -j4则会4线程编译。
将生成的zImage拷贝到tftp服务器目录文件下,方便使用TFTP下载运行
cp arch/arm/boot/zImage /tftpboot/ -f
二、初步移植以看到启动信息
(1)根据运行结果,分析发现:linux内核的自解压代码都没有运行(因为没有看到:Uncompressing Linux... done, booting the kernel.参考上节启动的内核,可以看出)
(2)说明zImage根本没有被解压成功,内核代码根本就没有被运行,当然没有输出信息了。所以问题出在解压相关的部分。
(4)内核配置的解压地址应该等于链接地址,否则自解压之后内核无法运行。现在问题变成:第一,内核的链接地址等于多少?第二,内核中配置的解压地址是多少?
(5)这里面还有个问题:内核的链接地址是一个虚拟地址,而自解压代码解压内核时需要物理地址,因此上面说的等于,其实是链接地址对应的物理地址等于自解压地址。
(6)由上节kernel配置分析可知,连接地址和他对应的物理地址通过head.S中可以查到,分别是0xC0008000和0x30008000。那么自解压代码配置的解压地址应该是30008000.
(7)自解压代码对应的自解压地址在mach-s5pv210/Makefile.boot文件中。在其中修改,加入两行:
zreladdr-$(CONFIG_MACH_SMDKV210) := 0x30008000
params_phys-$(CONFIG_MACH_SMDKV210) := 0x30000100