[讨论] Ramdisk根文件系统启动Linux(单独的ramdisk镜像)

gooogleman   2013-5-27 00:16 楼主

具体步骤如下:
1.解压内核源码树
解压kernel.tar.gz2到自己的工作目录,其他的开发板就自己找相应的kernel,或者自已移植。


2.修改内核配置选项
进入内核源码目录目录

#cp config_mini2440_t35 .config
#make menuconfig ARCH=arm

上面两句诗对用arm某开发板的,我是用的内核不具有代表性,就不在这里写了。
打开配置菜单,修改两个配置项,分别是:


a):General setup-->选择 Initial RAM filesystem and RAM disk...... 项
b):Device Drivers-->Block devices-->选择 RAM block device support 项

并检查Optimize for size是否被选中,如果没有则选中,此项优化内核大小,根据需要进行配置。
修改(8192)Default RAM disk size kbytes选项为(4096)Default RAM disk size kbytes,之所以修改是因为我之后制作的ramdisk是4096KB大小的。当然如果你想制作8192KB大小的ramdisk,这里就要对应为8192了,以此类推。但是最小系统嘛,是不用那么大的ramdisk的。此项的默认配置就是(4096),以前我改过这个配置,所以是(8192)了。如果这个大小和你做的ramdisk不匹配,则启动时仍然会出现kernel panic内核恐慌,提示ramdisk格式不正确,挂载不上ramdisk。
然后特别要注意的一点是,ramdisk是一种内存虚拟磁盘技术,实质上并不是一种文件系统,它使用的文件系统时ext2文件系统。所以一定要在make menuconfig ARCH=arm的时候进入File systems菜单,选上<*> Second extended fs support。以提供内核对ext2文件系统的支持。我以前添加过了ext2文件系统了,所以开始的时候在此没有说明,在此为了说明为什么有的人照着我的方法做了,但是仍然kernel panic,特别把这一步也加上。
然后保存配置退出。
这样就为内核添加好了ramdisk启动功能和ramdisk的驱动支持了。



3.修改内核启动参数
方法有四:

a):修改.config的第310行,修改CONFIG_CMDLINE=""的定义(.config需要执行一条make语句才能生成,具体忘了)
修改为CONFIG_CMDLINE="initrd=0x31000000,0x200000 root=/dev/ram rw init=/linuxrc console=ttySAC0 mem=64M"
保存。
意思为从ramdisk启动,ramdisk压缩文件起始地址在内存地址0x31000000处,文件大小为0x200000。
此参数也可以在make menuconfig ARCH=arm时进入Boot options菜单,然后在Default kernel command string里修改。效果是一样的。

b):在内核的menuconfig中  boot options选项中  不要选  Passing command from u-boot

再在下面的一栏填入启动参数即可,具体不说了。
c):或者不修改.config的的第310行CMDLINE定义,而是用u-boot的bootargs环境变量来传递启动参数。
同样也是修改该环境变量为bootargs=initrd=0x31000000,0x200000 root=/dev/ram rw init=/linuxrc console=ttySAC0 mem=64M
并saveenv保存u-boot环境变量

d):修改u-boot的默认启动参数,要修改 uboot 源码文件夹下  include/开发版型号/config/sep6200.h 文件

我的开发板是SEP6200  所以就是sep6200.h

这里面定义了大量的宏定义,可以进行相应修改。

需要修改bootargs 加入 initrd=0x31000000

和bootcommand 加入将ramdisk 镜像 读入  内存的 命令。

这也是我采用的方法。


以上a),b),c),d)的效果是一样的。



[ 本帖最后由 gooogleman 于 2013-5-27 00:24 编辑 ]

回复评论 (2)

get_format
-------- 1 --------
## Loading init Ramdisk from Legacy Image at 20a00000 ...
   Image Name:   ramdisk
   Created:      2013-05-26   1:04:35 UTC
   Image Type:   ARM Linux RAMDisk Image (uncompressed)
   Data Size:    1264725 Bytes =  1.2 MB
   Load Address: 20800000
   Entry Point:  20800000
   Verifying Checksum ... OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.

之后就不停的重启,怎么回事呢?
点赞  2013-5-27 00:25
http://blog.csdn.net/dadoneo/article/details/8116814
参考文章地址
具体步骤如下:
1.解压内核源码树
解压kernel.tar.gz2到自己的工作目录,其他的开发板就自己找相应的kernel,或者自已移植。

2.修改内核配置选项
进入内核源码目录目录
#cp config_mini2440_t35 .config
#make menuconfig ARCH=arm
上面两句诗对用arm某开发板的,我是用的内核不具有代表性,就不在这里写了。
打开配置菜单,修改两个配置项,分别是:

a):General setup-->选择 Initial RAM filesystem and RAM disk...... 项
b):Device Drivers-->Block devices-->选择 RAM block device support 项

并检查Optimize for size是否被选中,如果没有则选中,此项优化内核大小,根据需要进行配置。
修改(8192)Default RAM disk size kbytes选项为(4096)Default RAM disk size kbytes,之所以修改是因为我之后制作的ramdisk是4096KB大小的。当然如果你想制作8192KB大小的ramdisk,这里就要对应为8192了,以此类推。但是最小系统嘛,是不用那么大的ramdisk的。此项的默认配置就是(4096),以前我改过这个配置,所以是(8192)了。如果这个大小和你做的ramdisk不匹配,则启动时仍然会出现kernel panic内核恐慌,提示ramdisk格式不正确,挂载不上ramdisk。
然后特别要注意的一点是,ramdisk是一种内存虚拟磁盘技术,实质上并不是一种文件系统,它使用的文件系统时ext2文件系统。所以一定要在make menuconfig ARCH=arm的时候进入File systems菜单,选上<*> Second extended fs support。以提供内核对ext2文件系统的支持。我以前添加过了ext2文件系统了,所以开始的时候在此没有说明,在此为了说明为什么有的人照着我的方法做了,但是仍然kernel panic,特别把这一步也加上。
然后保存配置退出。
这样就为内核添加好了ramdisk启动功能和ramdisk的驱动支持了。


3.修改内核启动参数
方法有四:
a):修改.config的第310行,修改CONFIG_CMDLINE=""的定义(.config需要执行一条make语句才能生成,具体忘了)
修改为CONFIG_CMDLINE="initrd=0x31000000,0x200000 root=/dev/ram rw init=/linuxrc console=ttySAC0 mem=64M"
保存。
意思为从ramdisk启动,ramdisk压缩文件起始地址在内存地址0x31000000处,文件大小为0x200000。
此参数也可以在make menuconfig ARCH=arm时进入Boot options菜单,然后在Default kernel command string里修改。效果是一样的。
b):在内核的menuconfig中  boot options选项中  不要选  Passing command from u-boot
再在下面的一栏填入启动参数即可,具体不说了。
c):或者不修改.config的的第310行CMDLINE定义,而是用u-boot的bootargs环境变量来传递启动参数。
同样也是修改该环境变量为bootargs=initrd=0x31000000,0x200000 root=/dev/ram rw init=/linuxrc console=ttySAC0 mem=64M
并saveenv保存u-boot环境变量
d):修改u-boot的默认启动参数,要修改 uboot 源码文件夹下  include/开发版型号/config/sep6200.h 文件
我的开发板是SEP6200  所以就是sep6200.h
这里面定义了大量的宏定义,可以进行相应修改。
需要修改bootargs 加入 initrd=0x31000000
和bootcommand 加入将ramdisk 镜像 读入  内存的 命令。
这也是我采用的方法。

以上a),b),c),d)的效果是一样的。
点赞  2013-5-27 00:25
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复