Linux系统系统移植 和 驱动加载(4)

4、make menuconfig 配置内核。

       我是将飞凌提供的Linux2.6.36.11 内核下的.config 直接copy 到我的Linux2.6.34.11 根目录下的。这时 你在make menuconfig 时 要注意去掉去除部分:

1) Device Drivers ----》Graphics support  --->   Console display driver support  --->   [ ] VGA text console   这一项。不然会报错为drivers/video/console/vgacon.c:486: error: 'PCIMEM_BASE' undeclared (first use in this function) 。。这一项应该是ARM11 视频VGA输出的驱动,这里我们不需要就去掉。       

 2) 在  Device Driver -----》 Generic Driver Oprios有一个(sd8686.bin sd8686_helper.bin) 的是飞凌提供的wifi 模块需要加载的固件 ,如果你需要的话 就将他提供的内核中的这两个硬件拷贝的2.6.34 对应的目录就行。可以使用 命令 find -name sd8686.bin ./   找到它们。

5 、编译 make  zImage

      编译好了,以后通过OK6410 USB的下载方式,先将Uboot下载到开发板,在下载你自己编译好的内核到开发板,设置 为关在NFS 根文件系统。 看看你的内核成功启动了没。如果没有成功启动,这里可能的原因有。

1) 假如只显示Starting kernel ...   就不动了的话。可能原因是你编译的内核太大了,超过了3.4M 了 ,这里解决的办法,是在使用dnw 串口控制下载的时候,你擦除一个较大的空间  。我擦除了 100000  500000 。使用命令nand  erase 100000 500000 。 然后下载到nandflash 使用命令nand write.e 50008000 100000 500000。 (注意上面的命令只对应飞凌的uboot,其他的uboot我没测试过)。

2) 当只出现Uncompressing Linux... done,booting the kernel  然后停下来不动时。可能出现的原因可以参考一下这篇博文:

当也可能是你第二次启动错误,或者下载错误,也可以重新下载一下zImage 尝试一下。

 3) 当出现drivers/rtc/hctosys.c: unable to open rtc device(rtc0) 可以参考这篇博文

 因为Linux2.6.36 的内核已经支持,ARM11 s3c6410 的 RTC实时时钟,如果你是用的是2.6.36的内核 ,在配置的时只要  注意 --- Real Time Clock                                                                                         
                    [*]   Set system time from RTC on startup and resume                                                    
                     (rtc0)  RTC used to set the system time                                                         
                    [ ]   RTC debug support                                                                                    
                      *** RTC interfaces ***                                                                              
                    [*]   /sys/class/rtc/rtcN (sysfs)                                                                   
                    [*]   /dev/rtcN (character devices)                                                                 
                    [ ]     RTC UIE emulation on dev interface       
      *** on-CPU RTC drivers ***                                                                
                    <*>   Samsung S3C series SoC RTC    这几个配置选项就可以了。

但是我在参考这篇博文的时候却发现我的内核 在make  menuconfig 以后没有

     *** on-CPU RTC drivers ***                                                                
                    <*>   Samsung S3C series SoC RTC  
这一项,这也是大多2410、 或者ARM9 开发板的博客没有提到的,在我编译时就没有Samsung S3C series SoC RTC 这一项,怎么办呢,我将飞凌提供的2.6.36 make menuconfig 了一下,发现有这一项。我才认识到这个能是内核差异造成的。我同时在两个根目录下搜素 on-CPU 发现在 drivers/rtc/Kconfig 中有这个关键的字符串   然后搜索Samsung   找到在Linux2.6.34 中 config RTC  depend on ARCH_S3C24XX   而在Linux2.6.36中 depend on ARCH_S3C24XX || ARCH_S3C64XX 。 才知道Linux2.6.34 的内核中RTC时钟不支持ARM11 。现在要做的就是让它支持。这里你可以选择给内核打ARM 自己的补丁, 当时我们有。我将2.6.36的 RTC 文件目录  全部拷贝到对应的 2.6.34 下 当然 这是危险的,呵呵,不过我还是这样做了,因为打补丁可能会破环你先前的所有工作,所以还是选择这种方式修改。   不过在make zImage 的时候问题又来了,检测到在在rtc-s3c.c 文件中有一个宏变量S3C2410_INTP之前没有定义,

然后使用 grep -r [变量名] ./    在2.6.36根目录下搜索所有有个变量名字符串的文件,找到该宏在regs-rtc.h  中定义的,将其拷贝过去,就可以编译通过了,其实这已经实在移植ARM11 的RTC Soc了,呵呵这可能是个笨办法,但绝对是个可以很快就绝问题的办法,我的很多问题都是通过 用 grep 这个命令去解决的。

        到这里我编译好内核以后下载到开发板上就可以正常的进入文字终端了,如果你还没有成功,一定要细细找错误,不要着急。

        博文大多借鉴了网友们的资料,在这一也就一并谢过了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/ppjzs.html