内核移植和文件系统制作(3)Ramdisk简介和常见问题

摘要:
由于这个特性,我们可以将一些经常被访问而又不会更改的文件通过Ramdisk放在内存中,这样可以明显地提高系统的性能。在Linux的启动阶段,内核和ramdisk都是由bootloader在启动时加载至内存的指定位置,而initrd提供了一套机制,可以将内核映像和根文件系统一起载入内存。initrd是bootloaderinitializedRAMdisk,顾名思义是在系统初始化引导时候用的ramdisk,它的作用是完善内核的模块机制,让内核的初始化流程更具弹性。

一,Ramdisk简介:

Ramdisk是一种基于内存的虚拟文件系统(并非一个实际的文件系统),它将一部分固定大小(这个大小在编译内核的make menuconfig时配置)的内存当作硬盘一个分区来使用。ramdisk是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统,通常我们会使用ext2或ext3文件系统来格式化它。由于ramdisk是在内存中进行操作的,所以我们可以对里面的文件进行添加,修改,删除等等操作,但是一掉电,就什么也没有了。由于这个特性,我们可以将一些经常被访问而又不会更改的文件(如只读的根文件系统)通过Ramdisk放在内存中,这样可以明显地提高系统的性能。

在Linux的启动阶段,内核和ramdisk都是由 bootloader在启动时加载至内存的指定位置,而initrd提供了一套机制,可以将内核映像和根文件系统一起载入内存。initrd 是boot loader initialized RAM disk,顾名思义是在系统初始化引导时候用的ramdisk,它的作用是完善内核的模块机制,让内核的初始化流程更具弹性。

1,添加内核支持:

General setup --->

[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
() Initramfs source file(s)

支持根文件的挂载,指定initrd,支持Ramdisk根文件系统

Device Drivers --->

[*] Block devices --->

<*> RAM block device support
(1) Default number of RAM disks
(4096) Default RAM disk size (kbytes)

添加对ramdisk的支持,修改(4096DefaultRAMdisksizekbytes,这里就是要制作Ramdisk文件系统大小。当然如果你想制作8192KB大小的ramdisk,这里就要对应为8192了,以此类推。此项的默认配置就是(4096)。如这大小和你做的ramdisk不匹配,则启动时仍然会出现kernelpanic内核恐慌,提示ramdisk格式不正确,挂载不上ramdisk

File systems --->

<*> Second extended fs support

[*] Ext2 extended attributes
[*] Ext2 POSIX Access Control Lists
[*] Ext2 Security Labels
[*] Ext2 execute in place support

ramdisk是一种内存虚拟磁盘技术,实质上并不是一种文件系统,它使用的文件系统时ext2文件系统。所以一定要在makemenuconfig时候进入Filesystems菜单,选上<*>Secondextendedfssupport,以提供对ext2文件系统的驱动支持。

二,常见问题解决(转载:http://blog.csdn.net/qiaoliang328/article/details/4724511

1.

Uncompressing Linux................................................................done,bootingthekernel.

问题在与传参,u-boot中传递:

bootargs=console=ttyS0,115200 mem=64M rw loglevel=7

我使用linux-3.8,在drivers/tty/serial/samsung.c中修改,FL2440有两个虚拟串口,ttyS0和ttyS1,由于在u-boot已经指定串口ttyS0,所以在linux内核设定需要保持一致 改:#define S3C24XX_SERIAL_NAME "ttyS"

2.启动参数initrd=0x30800000,0x20000,0x30800000表示ramdisk在RAM中的地址,0x20000表示ramdisk的大小

3.Failedtoexecute /linuxrc;Kernel panic No init fo...

原因:initrd=0x30800000,0x20000;0x20000小于ramdisk的实际大小

4. RAMDISK: incomplete write (-28 != 32768) 4194304
RAMDISK: ran out of compressed data
invalid compressed format (err=1)
Root-NFS: No NFS server available, giving up.
VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "" or unknown-block(2,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)

出现上面情况,查阅资料才知道是因为没有修改
Driver device ->
Block device ->
(4096)Default RAM disk size (kbytes)
改4096为8192

5.Error: unrecognized/unsupported machine ID (r1 = 0x33f60264).

解决办法:参考我的CSDN博客

6. Kernel panic - not syncing: Attempted to kill init!

其中一个原因是内核不是用带eabi的的编译器编译的,而制作rootfs是的busybox使用带eabi的编译器编译的。

7.编译busybox时可能遇到的问题

将会遇到下面问题:
applets
/applets.c:20:2:error:#warning Static linking against glibc produces buggy executables
applets
/applets.c:21:2:error:#warning (glibc does not cope well with ld --gc-sections).
applets
/applets.c:22:2:error:#warning See sources.redhat.com/bugzilla/show_bug.cgi?id=3400
applets
/applets.c:23:2:error:#warning Note that glibc is unsuitable for static linking anyway.
applets
/applets.c:24:2:error:#warning If you still want to do it, remove -Wl,--gc-sections
applets
/applets.c:25:2:error:#warning from top-level Makefile and remove this warning.
make
[1]:*** [applets/applets.o]Error1这个警告的定义在applets/applets.c中。将这段警告注释掉就可以了。这段警告的意思是告诉你最好用uclibc编译,而不是用glibc因为glibc比较大,busybox在寸土寸金的嵌入式系统中运用比较多,所以会有这样的要求。


免责声明:文章转载自《内核移植和文件系统制作(3)Ramdisk简介和常见问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇user-select 用户禁止选中Yii2的深入学习--行为Behavior下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux 系统 LVM(Logical Volume Manager)逻辑卷管理

一.前言 每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到 当前某个分区需要的容量,还要预见该分区以后可能需要的容量的最大值。因为如果估计不准确,当遇到某个分区不够用时管理员可能甚至要备份整个系统、清除硬 盘、重新对硬盘分区,然后恢复数据到新分区。 虽然现在有很多动态...

Linux 基础教程 33-硬盘分区及挂载

挂载命令     在Windows系统中如果插入了U盘、移动硬盘、光驱等,只要能被Windows系统识别出来,则系统会进行自动挂载并添加盘符,然后我们就可以访问,而这一切均由系统完成,用户并不需要做任何操作即可使用。那么在Linux系统中,虽然一些Linux系统已经做了一部分自动挂载功能,但大部分情况还是需要手动挂载完成。而这一功能则是由命令mount和u...

NFS挂载Android文件系统

NFS挂载Android文件系统 [日期:2012-02-14] 来源:Linux社区 作者:cjok376240497 [字体:大中小] 1.安装NFS服务 $sudo apt-get install nfs-kernel-serverportmap $sudo mkdir /nfsboot $sudo vim /etc/exports /...

linux --&amp;gt; 文件系统十问

文件系统十问   参考:http://djt.qq.com/article/view/620   关于Linux文件系统相关的问题: 1、机械磁盘随机读写时速度非常慢,操作系统是采用什么技巧来提高随机读写的性能的? 2、touch一个新的空文件占用磁盘空间吗? 占用的话占用多少? 3、新建一个空目录占用磁盘空间吗?占用多少?和新建一个文件相比,哪个占用的更...

迅为龙芯2K1000开发板系统编译编译Linux内核

龙芯目前主推的内核版本有 linux‐2.6.32 和 linux‐3.10 两个版本,其中 linux‐2.6.32 主要用于龙芯1号 CPU、龙芯2H和龙芯3A , linux‐3.10 主要用于龙芯 3A2000 和 2K 以上的 CPU 版本。LS2K1000 使用的内核版本为 linux‐3.10。交叉编译器版本为 gcc‐4.9.3‐64‐gn...

shell中的dd命令使用详解

一、dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2 参数注释: 1. if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file > 2. of=文件名:输出文件名,缺省为标准输出。即指...