1.ubuntu下解压kernel
2 .配置编译下载
检查Makefile中ARCH和CROSS_COMPILE
make xx_defconfig
(找到三星的210对应的编译文件)
make menuconfig
make -j4 默认情况下直接make则会直接单线程编译。但是如果make -j4则会4线程编译。
编译完成:得到zImage
烧录后启动不起来。。。。。。。
正常的启动结果:
kernel启动后打印出来的第一句话:Uncompressing Linux... done, booting the kernel.
异常的启动结果:kernel启动的第一句话都没有运行。
3.分析问题
没有输出信息,说明zImage根本没有被解压成功,内核代码根本就没有被运行,问题出在解压相
关的部分。
问题出在内核配置的解压后代码放置的内存地址处,内核配置的解压地址应该等于连接地址,否则
自解压之后内核无法运行。现在问题变成:第一,内核的连接地址等于多少?第二,内核中配置的
解压地址是多少?
连接地址和他对应的物理地址在head.S中可以查到,分别是0xC0008000和0x30008000。
自解压代码对应的自解压地址在mach/Makefile.boot文件中。在其中修改,加入两行:
同步代码,并且编译,得到的zImage复制到/tftpboot,然后重新下载运行查看结果,但是内核还没
运行 。。。。。。。
但是有效果:打印出Uncompressing Linux... done, booting the kernel.
定义的物理地址不对,从20000000改到30000000即可。
kernel成功启动起来了。