接下来要启动内核了。首先要先将机器码设置成我们开发板的机器码,将/board/Samsung/x210目录下的x210.c中的board_init函数中的bi_arch_number传入MACH_TYPE_SMDKV210,传入正确的机器码才能启动内核。
但事实上,无论怎么样都启动不了内核,我用tftp下载了之前编译好的内核,内核格式是zImage的,使用bootm来启动,发现启动不了,会提示:
1.3.6老版本的uboot中bootm是支持启动zImage的内核,所以这时候,就得开始编译uImage的内核。
编译方法,
1、首先将uboot源码目录下的/tools文件夹中的mkimage复制到/usr/local/bin/目录下,
2、直接在内核源码文件夹的根目录下,直接make uImage,就会在kernel目录下的/arch/arm/boot下生成uImage
用bootm启动我们做好的uImage,打印出以下log就没反应了。
如果出现无法启动内核的情况,一般就以下几种原因:
1、机器码不对。
2、Bootarges没传到内核进去。
用了各种方法来解决这个问题,最终都没成功,最后找到前人写的一篇帖子才解决问题。
参考帖子http://blog.csdn.net/yuanzhi7/article/details/64131085
主要原因是uboot启动了内核,但是内核卡死在了kernel里面的putc函数里面,而卡死的原因是,新版的uboot用的是串口的fifo模式,而内核用的串口是非fifo模式的,所以就出现问题了。要么修改内核,要么修改uboot的串口,我这里对uboot的串口进行修改,但是uboot中串口打印的东西就会有问题。
偷个懒,我并不想对内核进行修改,想到一个折中的方法,就是启动内核的时候,再讲uboot设置成非fifo模式,这样在没启动内核的时候,还能正常使用uboot。
方法:
设置bootcmd=mw.l e2900804 0x3c5;mw.l e2900808 0x0;tftp 0x30007fc0 uImage;bootm 0x30007fc0使用mw对串口2相关的寄存器进行修改,然后再加载内核。这样再次启动内核,发现就能正常打印出内核的log了。