第九章:基于九鼎X210开发板移植2014.10版U-boot之启动内核

时间:2020-12-11 16:34:04

 

 接下来要启动内核了。首先要先将机器码设置成我们开发板的机器码,将/board/Samsung/x210目录下的x210.c中的board_init函数中的bi_arch_number传入MACH_TYPE_SMDKV210,传入正确的机器码才能启动内核。

    第九章:基于九鼎X210开发板移植2014.10版U-boot之启动内核

但事实上,无论怎么样都启动不了内核,我用tftp下载了之前编译好的内核,内核格式是zImage的,使用bootm来启动,发现启动不了,会提示:

       第九章:基于九鼎X210开发板移植2014.10版U-boot之启动内核

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就没反应了。 

      第九章:基于九鼎X210开发板移植2014.10版U-boot之启动内核

 如果出现无法启动内核的情况,一般就以下几种原因:

 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了。
        第九章:基于九鼎X210开发板移植2014.10版U-boot之启动内核
至此,2014.10版的uboot算是能够正常使用了,当然,这里面还有非常多的细节值得去深究。也有很多地方还没完善,但如果只是要用来启动内核,已经足够了。