免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 793 | 回复: 0
打印 上一主题 下一主题

移植linux2.6.38产生的问题及其解决方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-21 08:41 |只看该作者 |倒序浏览
在移植linux2.6.38过程中,遇见了很多的问题,通过在网上查阅相关信息和在图书馆不停的查阅资料,终于成功了。下面将移植过程中产生的问题及其解放方法与大家共享一下。

1、编译内核时yaffs2出现unknown field 'clear_inode' specified in initializer的

错误,原因是所下载的yaffs2不支持linux2.6.38.
   解决方法:最新的yaffs2采用git发布,所以采用git工具下载最新的yaffs2源代码。

具体为在终端输入git clone    git://www.aleph1.co.uk/yaffs2下载最新的yaffs2,下

载完成给内核打补丁,进入yaffs目录,执行
 ./patch-ker.sh c m opt/Andy/linux-2.6.38(以自己的内核目录为准),其中的c代表复制,m代表复合类型。

 

2、移植linux内核到开发板后,出现data abort的错误,错误原因为内核大小超过了2M,

天嵌的Uboot只分配给内核2M的空间,所以报错。
   解决方法:精简内核,使其小于2M。或者修改Uboot,是内核大小大于2M。
所以个人认为天嵌的Uboot值得改进,下一步我将移植Uboot,用自己的Uboot就不存在这个问题了。嘿嘿

 

3.移植内核时,出现Uncompressing Linux... done, booting the kernel后,系统不能启动,网上好多人说是因为在menuconfig选项中的Boot options中的Default kernel command string中没有设置noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0 rootfs=yaffs2 rw。其实不用设置这个参数也可以,我采用在内核配置文件中将Kernel Feature/Provide old way to pass kernel parameters选上就行了,因为天嵌用的bootloader太老了,从打印的内核信息中就可以看出。(ATAG_INITRD is deprecated; please update your bootloader.)

 

4.内核启动时,出现Failed to execute /linuxrc的错误,原因是:
(1)文件系统中没有包含linuxrc的可执行文件。在文件系统中添加linuxrc就可完成linux的启动。
(2)在/driver/mtd/nand/s3c2410.c中将chip->ecc.mode = NAND_ECC_SOFT;改为chip->ecc.mode = NAND_ECC_NONE;并在配置内核中将Samsung S3C NAND Hardware ECC选项删掉。

    这个问题纠结了我好久,我遇见这个问题后,先尝试用nfs挂载,能够挂载上,所以我确定肯定是nandflash出了问题了,以为nandflash坏了(因为被我不停的擦写,嘿嘿),后来用天嵌自带的镜像试了是好的,我就明白了,估计是我的nand驱动有问题了,仔细检查驱动,发现内核配置中的Samsung S3C NAND Hardware ECC没有去掉,移植linux2.6.38产生的问题及其解决方法,一个小小的问题折磨了我这么久。所以一定一定要仔细啊。

 

5.编译串口驱动是出现error: implicit declaration of function 's3c2410_gpio_cfgpin'的错误,是因为内核版本2.6.38的内核定义s3c2410_gpio_cfgpin是在linux/gpio.h中,所以添加#include <linux/gpio.h>后即可。

 

6.编译串口驱动是出现error: 'S3C2410_GPH6' undeclared (first use in this function)是因为在内核版本2.6.38的内核定义s3c2410_gpio_cfgpin的函数变量采用的是S3C2410_GPH(6),而非S3C2410_GPH6,将其改为S3C2410_GPH(6)即可解决问题。

 

7.linux内核2.6.38的串口程序samsung.c在/driver/tty/serial中。这里与原来的内核版本不一致。这个要注意,内核版本改了,接口也改了,我当时找不到samsung.c,然后通过find命令一看,晕,原来在这里面。

 

8.在添加yaffs2内核支持时,找不到Kconfig,复制Yaffs2文件夹中的Kconfig_muti到linux内核的fs/yaffs2中,并将Kconfig_muti修改为Kconfig。

 

    还有一下细小的问题就不在这说了,有其他问题的朋友我们可以一起探讨,我们一起进步!最后,小小祝贺自己一下,今天终于可以睡个好觉了!哈哈!

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP