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

发布者:Yuexiang最新更新时间:2024-07-24 来源: elecfans关键字:内核移植  文件系统  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的支持,修改(4096)Default RAM disk size kbytes,这里就是要制作Ramdisk文件系统大小。当然如果你想制作8192KB大小的ramdisk,这里就要对应为8192了,以此类推。此项的默认配置就是(4096)。如这大小和你做的ramdisk不匹配,则启动时仍然会出现kernel panic内核恐慌,提示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文件系统。所以一定要在make menuconfig时候进入File systems菜单,选上<*> Second extended fs support,以提供对ext2文件系统的驱动支持。


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


1.

Uncompressing Linux................................................................ done, bootingthe kernel.

问题在与传参,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. Failed to execute /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] Error 1

这个警告的定义在applets/applets.c中。将这段警告注释掉就可以了。这段警告的意思是告诉你最好用uclibc编译,而不是用glibc因为glibc比较大,busybox在寸土寸金的嵌入式系统中运用比较多,所以会有这样的要求。



关键字:内核移植  文件系统  Ramdisk 引用地址:内核移植和文件系统制作(3)Ramdisk简介和常见问题

上一篇:FL2440驱动添加(1):hello world 驱动模块添加
下一篇:FL2440驱动添加(2): RTC(Real time clock)

推荐阅读最新更新时间:2024-11-11 16:42

Linux-2.6.32.2内核在mini2440上的移植(十八)---将UART2更成普通串口
移植环境 1,主机环境:VMare下CentOS 5.5 ,1G内存。 2,集成开发环境:Elipse IDE 3,编译编译环境:arm-linux-gcc v4.4.3,arm-none-linux-gnueabi-gcc v4.5.1。 4,开发板:mini2440,2M nor flash,128M nand flash。 5,u-boot版本:u-boot-2009.08 6,linux 版本:linux-2.6.32.2 7,参考文章: 嵌入式linux应用开发完全手册,韦东山,编著。 Mini2440 之Linux 移植开发实战指南 【1】硬件原理 S3C2440 芯片具有3 个串口:UART0,1,2,我们下载的L
[单片机]
Linux-2.6.32.2<font color='red'>内核</font>在mini2440上的<font color='red'>移植</font>(十八)---将UART2更成普通串口
1_5.4.3_根文件系统_构建根文件系统之busybox_P
构建根文件系统之前,先来编译一下busybox。 查看readme,看一下有没有讲怎么编译,里面有一些关于busybox的介绍,比如什么是busybox。 怎么使用busybox。 没有看到讲解怎么编译的,查看一下install文件,可以看到,编译busybox的方法和编译Linux kernel相似,也是先配置然后make编译,需要注意的是,直接执行make install,默认是会安装到PC机上的,我们需要额外指定一下安装的地址。 也就是执行#后面的那个make CONFIG_PREFIX=/path/from/root install,安装到我们指定的地方。 在busybox目录下执行make menuc
[单片机]
1_5.4.3_根<font color='red'>文件系统</font>_构建根<font color='red'>文件系统</font>之busybox_P
基于tiny4412的Linux内核移植 -- PWM子系统学习(七)
平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 (为支持uImage启动,做了少许改动) busybox版本:busybox 1.25 交叉编译工具链: arm-none-linux-gnueabi-gcc (gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29)) 概述 Exynos4412一共可以输出4路PWM(timer0、timer
[单片机]
基于tiny4412的Linux<font color='red'>内核</font><font color='red'>移植</font> -- PWM子系统学习(七)
ARM 内核移植中常见的错误
1.下载linux-2.6.36.1.tar.bz2 问题:tar -zxvf 解压压缩文件出现问题,无法识别. 解决:1.通过file linux-2.6.36.1.tar.bz2 查看压缩格式 2.通过命令 bzip2 -d linux-2.6.36.1.tar.bz2解压 3.再通过tar xvf linux-2.6.36.1.tar解压,不能使用 tar zxvf linux-2.6.22.6.tar解压 4.上面也可以通过一条指令bzip2 -dc linux-2.6.XX.tar.bz2 | tar xvf - 其中XX为内核压缩包文件名 2.下载p
[单片机]
迅为4412开发板V_4.0 ubuntu 在Android4.4.4的内核移植wifi
背景:由于厂家迅为的全能版的V4.0底板和V3.5底板的wifi部分有改动,所以需要重新移植wifi 软件基础 :基于迅为提供的全能版V_4.0的Android4.4.4源码编译出来的ubuntu内核之上移植ubuntu文件系统 硬件基础:全能版V4.0底板,4412的scp大内存,或者pop大内存都行 一. 预备知识: 1.WPA Supplicant,这里我使用的是wpa_supplicant-2.5.tar.gz 简介:WPA Supplicant is a Wi-Fi Protected Access (WPA) client and IEEE 802.1X supplicant. It
[单片机]
cramfs根文件系统移植成功(fs2410下亲测)
1 引言 依据Unix的习惯,通常会将linux系统中任何对象(包括设备)都视为文件。而根文系统是所有文件和设备节点的起始点,它是决定系统能否正常启动的关键所在。本文将详细介绍利用Busybox工具集制作一种简单的根文件系统即Cramfs根文件系统的方法。 2 开发平台简介 开发系统采用主机+目标板的开发模式,目标板和主机通过串行线和Ethernet网线实现通信。主机采用的是:pc机+VMware6.0虚拟机下的Red Hat 9 目标板:深圳优龙公司开发的FS2410实验开发板:其主要参数:CPU:三星S3C2410,主频203MHz;内存:64M 字节;NOR Flash:2M 字节(SST39VF1601)
[单片机]
cramfs根<font color='red'>文件系统</font>的<font color='red'>移植</font>成功(fs2410下亲测)
基于stm32f103zet6的FAT16文件系统学习4
本博文所用到的代码: http://download.csdn.net/detail/king_bingge/5739167 好几天没有写博客了,这几天都在忙挑战杯的事情,由于某些不和谐因素,昨天才开始准备今天的挑战杯答辩,虽然不知道结果是怎样的,但是个人感觉创新点还是有的,就是主评委老师拽着我们这个消费对象来说事,过去了就不再想了,也不知道能不能进入省赛,但是学习还是要继续的,今天总结的这个实验是实现从SD卡里面读bmp图片,bin图片,同时在将我制作的字库存放在SD卡中,从里面读取所需要的汉字,虽然之前早就实现了bmp图片读取和字库的读取,但是一直困扰我的就是bin格式的图片读取,今天下午花了些时间终于弄出来的,刷图是比bm
[单片机]
文件系统移植(五):jiffs2文件系统移植
内 核 版 本:linux-3.0 u-boot版本:u-boot-2010.09 开发板型号:FL2440 1、对根文件系统进行修改 无修改 2、添加内核对 jiffs2的支持 $ vt100 $ make menuconfig File systems --- Miscellaneous filesystems --- * Journalling Flash File System v2 (JFFS2) support (0) JFFS2 debugging verbosity (0 = quiet, 2 = n
[单片机]
<font color='red'>文件系统</font>的<font color='red'>移植</font>(五):jiffs2<font color='red'>文件系统</font>的<font color='red'>移植</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved