打印

u-boot中的问题

[复制链接]
2792|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
db10|  楼主 | 2007-10-17 15:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   在u-boot中有环境变量,与linux启动息息相关,并且在linux内核编译时必须与u-boot里的保持一致,否则linux启动不了。u-boot中的环境变量 bootargs root=/dev/ram rw initrd=0x21100000,8000000 ramdisk_size=20000  console=ttyS0,115200,mem=32M

 其中
initrd=0x21100000,8000000意思是ramdisk盘空间位置在0x21100000,大小是1024*1024*7.629bytes,ramdisk_size=20000 是1024*1.95K大小空间,ramdisk_size=20000必须要。
root=/dev/ram,指明使用什么驱动设备,主要是提供是以什么为根文件系统(本设置里是ramdisk为根文件系统),设备的主设备号,从设备号参见内核中Document/devices文档。上面是使用的RAMDISK作为根文件系统的根文件系统在/dev/ram上。
console=/dev/tty0,115200说明初始化控制台时,使用设备/dev/tty0,波特率为115200。
  有点不是特明白8000000与ramdisk_size=20000关系和区别?请人解释一下!

相关帖子

沙发
whereis| | 2007-10-17 16:04 | 只看该作者

.

uboot中无启动参数,仅仅使用内核的启动参数,同样可以启动。
直接用go命令。

如果,没有8000000,单纯initrd=0x21100000,启动得了吗?试试

内核里面可以配置ramdisk大小的。

另外,谁提供提供的平台,谁负责吧,不是你自己倒腾的吧?

使用特权

评论回复
板凳
db10|  楼主 | 2007-10-18 22:31 | 只看该作者

whereis

 我要问得是8000000与ramdisk_size=20000分别指什么大小? 
你说得跟我问得没有直接联系。   
因为我只知道8000000是1024K*1024*7.6大小ramdisk 而ramdisk_size=20000是1024*1.95K大小ramdisk 感觉矛盾。

使用特权

评论回复
地板
whereis| | 2007-10-19 07:46 | 只看该作者

.

很难理解吗,有点跳tone而已。
其实,把"ramdisk_size=XXX"那个删掉,直接改为"initrd=0x21100000,0x800000",然后到内核中配个8MB ramdisk,应该就可以了。
你的这个启动参数是谁给的,或是你自己倒腾出来的?
另外,用你原来的参数,系统起得来吗?有没boot**,看看ramdisk那个是怎么输出的。

使用特权

评论回复
5
mybao| | 2007-10-19 09:33 | 只看该作者

..

lz自己动手吧,代码里搜索initrd和ramdisk_size,看看怎样解析的

使用特权

评论回复
6
mybao| | 2007-10-19 09:45 | 只看该作者

。。

archarmkernelsetup.c找了,没有对ramdisk_size解析,这个参数估计没意义了。
按照whereis的应该没问题。

使用特权

评论回复
7
db10|  楼主 | 2007-10-19 10:19 | 只看该作者

whereis

 真服了你,我问的是这两个参数为什么大小不一致,代表的意思。你说的一堆话等于没有说。你说的我如果不理解,否则移植不会成功。现在早跑起来了。

使用特权

评论回复
8
whereis| | 2007-10-19 10:51 | 只看该作者

.

呵呵,口水一下。
那你的,ramdisk,按照那个配置,到底多大?
有没boot**,show,show。

使用特权

评论回复
9
db10|  楼主 | 2007-10-19 14:39 | 只看该作者

d

启动相关信息: 
RAMDISK driver initialized: 16 RAM disks of 1953K size 1024 blocksize

Freeing initrd memory: 7812K

使用特权

评论回复
10
whereis| | 2007-10-19 23:22 | 只看该作者

.

哈哈,db10,你的这个问题有点意思,看看这个。
http://oldlinux.org/oldlinux/redirect.php?fid=22&tid=8527&goto=nextoldset

我想应该这样解释吧,"initrd=0x21100000,8000000",此处的8000000表示的是ramdisk实际大小8MB。(当然,实际做ramdisk的时候,拷贝到里面的内容,也不到8MB)
而后面的"ramdisk_size=20000",表示ramdisk块的个数,而ramdisk块的大小默认情况为1024字节,因此总共大约20MB的空间。

其实,2者应该不矛盾,就好比,你有个1GB的硬盘,但实际里面只存了50MB的内容。

不过,我很纳闷,你去掉"ramdisk_size=20000"选项之后,系统怎么会起不起来。
 

使用特权

评论回复
11
db10|  楼主 | 2007-10-21 09:59 | 只看该作者

whereis

 不过,我很纳闷,你去掉"ramdisk_size=20000"选项之后,系统怎么会起不起来。

 我现在可能理解这句话了,因为在内核配置时,有一选项ramdisk_size,如果配置上了,那u-boot里的环境变量也必须有这一项,值也保持一致,如果不一致,会启动不了。

使用特权

评论回复
12
JoveMeng| | 2007-10-21 18:27 | 只看该作者

在内核配置时,有一选项ramdisk_size,只要设置这个值>=你的ramdisk大小就行,并不一定要和U-boot的一样。如果你内术内核里没有设置这个值,那么默认的大小空间根据你的config文件来的,
如果initrd=0x21100000,8000000中的8000000比你的ramdisk.gz文件小的话,内核也许会起不来或者起来后你的文件系统里会少一些文件。
如果内核的起动参数里ramdisk_size的值存在,那里内核就会使用这个值而不是使用你在config时设置的值。
如果u-boot里bootargs变量存在,那么内核起动是使用的是u-boot里bootargs的值而不是配置内核时的cmdline的值,因些当u-boot的bootargs变量不存在时内核的cmdline参数才有效。也就是内核里设置好了的话就没有必要设置u-boot的bootargs变量。

使用特权

评论回复
13
mybao| | 2007-10-21 21:50 | 只看该作者

8错

使用特权

评论回复
14
db10|  楼主 | 2007-11-16 16:15 | 只看该作者

JoveMeng 说得很有道理

使用特权

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

本版积分规则

77

主题

2230

帖子

0

粉丝