问题解决办法总结_Failed_to_execute_/linuxrc (转)

标签:
linuxkernel |
分类: 嵌入式 |
根据网友们遇到的这个共同问题,总结一下各种解决的办法。
遇到这样问题的网友可以根据下面的建议逐个检查。
1. bin/busybox文件是可以执行的。
2. 在配置busybox的时候要选中shell选项中的一个选项
3. linuxrc
是可执行的。
4. 制作文件系统的时候利用的工具也要留意区分:
4. 你使用的是256MB的Nand
Flash,而在配置内核的nand时选择ecc校验???(在选择了出现问题,注销了就不出问题了)
在移植linux2.6.38过程中,遇见了很多的问题,通过在网上查阅相关信息和在图书馆不停的查阅资料,终于成功了。下面将移植过程中产生的问题及其解放方法与大家共享一下。
1、编译内核时yaffs2出现unknown field 'clear_inode' specified in initializer的
错误,原因是所下载的yaffs2不支持linux2.6.38.
具体为在终端输入git
clone
载完成给内核打补丁,进入yaffs目录,执行
2、移植linux内核到开发板后,出现data abort的错误,错误原因为内核大小超过了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选项删掉。
5.编译串口驱动是出现error: implicit declaration of function 's3c2410_gpio_cfgpin'的错误,是因为内核版本2.6.38的内核定义s3c2410_gpio_cfgpin是在 linux/gpio.h中,所以添加#include 后即可。
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。