huzhiyang 发表于 2013-6-1 21:01

请教linux内核自解压成功后无法启动的问题

现象如下图:

改设置的也设置了,环境变量如下:

但就是内核启动不了,不知道为什么,还请各位高手指教,还有一点,我在include/configs/mini2440.h中定义了,如下:

但是我发现uboot没有用我定义的参数,我看common/env_common.c中对default_environment[]赋值可以看到:

我都定义了,为什么不用我定义的呢,这跟内核无法启动是不是有关联呢,还请高手指点下,非常感谢!

阿南 发表于 2013-6-2 11:14

找开发板原始的映像烧进去看是否可以启动。确认是否是内核配置问题

huzhiyang 发表于 2013-6-3 07:55

阿南 发表于 2013-6-2 11:14 static/image/common/back.gif
找开发板原始的映像烧进去看是否可以启动。确认是否是内核配置问题

uboot是我自己移植的,内核和根文件系统是韦东山的,我之前烧过韦东山的uboot1.1.6和这个内核,文件系统,可以启动的。

jlass 发表于 2013-6-3 09:23

huzhiyang 发表于 2013-6-3 07:55 static/image/common/back.gif
uboot是我自己移植的,内核和根文件系统是韦东山的,我之前烧过韦东山的uboot1.1.6和这个内核,文件系统 ...
那就说明你的uboot移植出问题了
常见的应该有两个地方
1、环境变量,就是bootargs
2、内核引导代码,就是bootcmd

但是我发现uboot没有用我定义的参数
如果你使用save env保存过环境变量的话,重新烧写是不会改变环境变量的数据的,最简单的办法就是用nand erase把flash擦除干净,全部重新烧一遍:)

阿南 发表于 2013-6-3 15:12

用开发板原理的,应该是OK的吧

huzhiyang 发表于 2013-6-4 19:57

jlass 发表于 2013-6-3 09:23 static/image/common/back.gif
那就说明你的uboot移植出问题了
常见的应该有两个地方
1、环境变量,就是bootargs


我问过韦东山,他叫我先把NAND的params分区删掉,原因就是UBOOT使用了NAND上之前保存的参数,我也按照做了,把分区删掉了,这样编译之后烧进开发板,竟然用mtd命令还能看到分区信息,我又执行nand erase,再次用mtd命令也能获得分区信息,我彻底无语了,我定义了:
#define CONFIG_ENV_IS_IN_NAND 1   /*将环境变量保存到nandflash中*/
#define CONFIG_ENV_OFFSET   0x40000
#define CONFIG_ENV_SIZE          0x20000 /* Total Size of Environment Sector */
这样的话   我的环境变量应该就是保存在nand上面啊,搞不懂

huzhiyang 发表于 2013-6-4 19:57

阿南 发表于 2013-6-3 15:12 static/image/common/back.gif
用开发板原理的,应该是OK的吧

那个是OK的

jlass 发表于 2013-6-5 08:56

huzhiyang 发表于 2013-6-4 19:57 static/image/common/back.gif
我问过韦东山,他叫我先把NAND的params分区删掉,原因就是UBOOT使用了NAND上之前保存的参数,我也按照做 ...

没怎么看懂

原因就是UBOOT使用了NAND上之前保存的参数
基本就是这个原因,所以关键是要把环境变量中的数据擦除

竟然用mtd命令还能看到分区信息,我又执行nand erase,再次用mtd命令
uboot启动之后是在内存上运行的,跟nand erase没关系,所以这是正常的

阿南 发表于 2013-6-5 09:01

对,擦完再写,否则就是代码及配置问题了

huzhiyang 发表于 2013-6-5 22:01

jlass 发表于 2013-6-5 08:56 static/image/common/back.gif
没怎么看懂

原因就是UBOOT使用了NAND上之前保存的参数


又出现新的问题了,我删除了nand分区,我反复擦除几次后,再次烧写uboot到芯片,终于可以看到我在include/configs/mini2440.h里面的配置了:

然后我再次将分区添加上,再次编译烧进芯片,似乎找不到分区了,我用mtd命令查看,显示如下:

不明白这是为什么,我查看源码,
在common/cmd_mtdparts.c中找到了这句话:

parts = getenv("mtdparts");

.......

/* do no try to use defaults when mtdparts variable is not defined,
* just check the length */
if (!parts)
printf("mtdparts variable not set, see 'help mtdparts'\n");
难道是找不到这个环境变量,怎么可能呢 ,我没改动其它地方啊,还请指教!

huzhiyang 发表于 2013-6-5 22:02

阿南 发表于 2013-6-5 09:01 static/image/common/back.gif
对,擦完再写,否则就是代码及配置问题了

见我回复jlass的,也希望你的指教,非常感谢

ymind 发表于 2013-6-5 22:57

mtdparts环境变量的值,前面多了一个“mtdparts=”。
能成功解压缩,那意味着硬件没问题。接下来不能执行(console没输出),一般是machine id在u-boot和linux里不一致,或u-boot传进来ram size比实际硬件大(linux会死在内存分配器里)。

ymind 发表于 2013-6-6 23:10

莫名其妙。

jlass 发表于 2013-6-7 08:26

本帖最后由 jlass 于 2013-6-7 08:28 编辑

ymind 发表于 2013-6-6 23:10 static/image/common/back.gif
莫名其妙。
不好意思,我以为你是楼主。
回帖已删。
页: [1]
查看完整版本: 请教linux内核自解压成功后无法启动的问题