打印

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

[复制链接]
4137|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huzhiyang|  楼主 | 2013-6-1 21:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现象如下图:

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

但就是内核启动不了,不知道为什么,还请各位高手指教,还有一点,我在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
找开发板原始的映像烧进去看是否可以启动。确认是否是内核配置问题

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

使用特权

评论回复
地板
jlass| | 2013-6-3 09:23 | 只看该作者
huzhiyang 发表于 2013-6-3 07:55
uboot是我自己移植的,内核和根文件系统是韦东山的,我之前烧过韦东山的uboot1.1.6和这个内核,文件系统 ...

那就说明你的uboot移植出问题了
常见的应该有两个地方
1、环境变量,就是bootargs
2、内核引导代码,就是bootcmd

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

使用特权

评论回复
5
阿南| | 2013-6-3 15:12 | 只看该作者
用开发板原理的,应该是OK的吧

使用特权

评论回复
6
huzhiyang|  楼主 | 2013-6-4 19:57 | 只看该作者
jlass 发表于 2013-6-3 09:23
那就说明你的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上面啊,搞不懂

使用特权

评论回复
7
huzhiyang|  楼主 | 2013-6-4 19:57 | 只看该作者
阿南 发表于 2013-6-3 15:12
用开发板原理的,应该是OK的吧

那个是OK的

使用特权

评论回复
8
jlass| | 2013-6-5 08:56 | 只看该作者
huzhiyang 发表于 2013-6-4 19:57
我问过韦东山,他叫我先把NAND的params分区删掉,原因就是UBOOT使用了NAND上之前保存的参数,我也按照做 ...

没怎么看懂

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

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

使用特权

评论回复
9
阿南| | 2013-6-5 09:01 | 只看该作者
对,擦完再写,否则就是代码及配置问题了

使用特权

评论回复
10
huzhiyang|  楼主 | 2013-6-5 22:01 | 只看该作者
jlass 发表于 2013-6-5 08:56
没怎么看懂

原因就是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");

难道是找不到这个环境变量,怎么可能呢 ,我没改动其它地方啊,还请指教!

使用特权

评论回复
11
huzhiyang|  楼主 | 2013-6-5 22:02 | 只看该作者
阿南 发表于 2013-6-5 09:01
对,擦完再写,否则就是代码及配置问题了

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

使用特权

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

使用特权

评论回复
13
ymind| | 2013-6-6 23:10 | 只看该作者
莫名其妙。

使用特权

评论回复
14
jlass| | 2013-6-7 08:26 | 只看该作者
本帖最后由 jlass 于 2013-6-7 08:28 编辑
ymind 发表于 2013-6-6 23:10
莫名其妙。

不好意思,我以为你是楼主。
回帖已删。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

190

帖子

2

粉丝