在制作Initramfs文件系统之前,我先简单介绍下linux各文件系统。linux支持多种文件系统类型,包括ext2,ext3,vfat,jffs,

ramfs,nfs等,为了对各类文件系统进行统一管理,linux引入了虚拟文件系统vfs(virtual file system),为各类文件系统提供一个统一的应用编程接口。

文件系统类型主要有如下:

根据存储设备的硬件特性,系统需求,不同的文件系统类型有不同的应用场合。在嵌入式linux应用中,主要的存储设备为ram和flash,常用的基于存储设备的文件系统类型包括:jffs2,yaffs,cramfs,ramdisk,ramfs等。

基于flash的文件系统

Flash(闪存)作为嵌入式系统的主要存储媒介,主要有nor和nand两种技术。flash存储器的擦写次数是有限的,nand闪存还有特殊的硬件接口和读写时序。因此,必须针对flash的硬件特性设计符合应用要求的文件系统。

jffs2:主要用于nor型flash,特点是可读写,支持数据压缩的日志型文件系统。

yaffs/yaffs2:主要用于nand型flash,支持跨平台。

cramfs:只读的压缩文件系统。可用于两种flash。

ramdisk:基于ram的文件系统。是将一部分固定大小的内存当做块设备来用。它并非是一个实际的文件系统,而是一种将实际的文件系统装入内存的机制。将一些经常访问而又无需更改的文件通过ramdisk放在内存中,可以明显的提高系统的性能。

initramfs:基于ram的文件系统。initramfs出现在2.6内核中,它类似于tmpfs,是一种基于内存的文件系统,它的使用不需要创建内存块设备。增加文件到ramfs会自动配置更多的内存,并删除或截去文件以释放内存。(若ramdisk没有满,已被占用的额外的内存也不能用来做其它事情,若ramdisk满了,但其它仍有闲置的内存,也必须重新格式化以后才能扩展使用)

nfs:是由sun开发的一种在不同机器之间通过网络共享文件的技术。在嵌入式linux系统的开发调试阶段,可以利用该技术在主机上建立基于nfs的根文件系统,挂载到嵌入式设备,可以很方便的修改根文件系统的内容。

Initramfs文件系统其实就是压缩的ramdisk文件系统,估计大家很少又听说过的,我也一样,但是我这次调试板子的时候用的NFS文件系统,发现固化文件系统时,没有什么好选择的,u-boot不能直接支持yaffs2,需添加补丁;ramdisk不能直接固化到flash上,jffs2和cramfs都需要其他工具制作,最后找到了Initramfs文件系统。Inittamfs是将ramdisk文件文件系统被编译到内核中,其实就是ramdisk文件系统(Inital ramdisk filesystem)。在制作initramfs文件系统时,我们首先需要制作ramdisk文件系统,这个挺简单的,资料也挺齐全的,我这里简单介绍下:

1、创建根文件系统的目录

mkdir rootfs

cd rootfs

mkdir bin dev etc lib proc sbin sys usr mnt tmp var

mkdir usr/bin usr/lib usr/sbin lib/modules

2、创建设备文件

cd /dev

mknod -m 666 console c 5 1

mknod -m 666 null    c 3 1

cd ..

3、安装/etc

tar etc.tar.gz -c /xxx/rootfs

这步我就不提供资源了,我也是在国嵌上找到找到的,感兴趣的自己可以找找看,里面东西堵都不是很难。

4、编译内核模块

进入Linux内核目录(linux-2.6.30.4)

make modules   注意:最好将内核根目录下的Makefile文件中的ARCH改成arm CROSS-COMPILE改成arm-linux-,因为很多地方会用到这些两个环境变量,同时在宿主机上编译驱动程序时,如果没有修改这两个变量,会报奇怪的错误:http://blog.csdn.net/pengrui18/article/details/12044369

5、安装内核模块

make modules_install INSTALL_MOD_PATH=/xxx/rootfs

6、配置busybox

进入busybox目录执行make menuconfig

a、进入Busybox Setting->

build options->

[]"Build busybox as a static binary"//动态链接

Cross Compile prefix(arm-linux-)

Installation Option->

[*]Don't usr/usr//避免busybox安装至宿主系统的usr,目录下

Busybox Installation Prefix(/xxx/rootfs)//安装位置

其他选项默认

7、编译、安装busybox

make

make install

基本上按照上面的步骤就可以完成文件系统的制作,下面贡献下我个人一直觉得不多的一个文件系统模板:http://download.csdn.net/detail/pengrui18/6513401

还需补充几点:

1、使用动态编译busybox时,如果交叉编译工具的版本信息为4.0以上,需要在内核中将以下选中(否则会包kernel panic错误,以前一直以为是少了库文件):

Kernel Features  --->
            [*] Use the ARM EABI to compile the kernel                   
            [*]   Allow old ABI binaries to run with this kernel (EXPERIMENTA)

2、需要将交叉编译工具下的lib目录下的库文件拷贝过去,最好全部拷贝,毕竟以后程序运行还有可能用到

接下来开始制作Initramfs文件系统:

1、建立Initramfs文件系统启动时所需文件init(initramfs文件系统启动时会在根文件系统中执行第一个init程序,它对uboot传过来的参数init=/linuxrc不予理睬,所以需要在制作的根文件系统里的根目录加入init程序,否则无法启动。init程序和linuxrc程序一样都是符号链接文件,它们都是指向/bin/busybox程序。)

cd rootfs

mv linuxrc init

2、添加内核对Initramfs文件系统支持

make menuconfig

General setup  --->

[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
         (/xxx/rootfs) Initramfs source file(s)    #输入根文件系统的所在目录

3、修改u-boot的启动参数

printenv

setenv bootcmd nand read 30008000 100000 500000;bootm 30008000//启动500000为内核镜像文件大小

以上就是我制作Initramfs文件系统的过程,如有问题或者错误,请留言。

Initramfs文件系统的制作相关推荐

  1. 根文件系统(三)——initramfs文件系统制作

    什么是initramfs文件系统? 在 根文件系统分类 章节中讲述了内核会去挂载一个特殊的rootfs,然后再通过解析"root=xxx"命令行,去挂载 /dev/xxx 真正的根 ...

  2. Linux——根文件系统的制作(jffs2 and ubifs)

    一.根文件系统简介 根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统而言它还是内核启动时所挂载(mount)的第一个文件系统,系统引导启动程序 ...

  3. 开发板与linux文件系统,基于topeer 4412开发板 ***面linux文件系统的制作

    Exynos-4412不仅可以运行Android,还可以运行简单的linux最小文件系统(不带显示界面的linux系统),下面我们来讲解一下这种文件系统的制作. 制作文件系统我们需要使用到Busybo ...

  4. Linux根文件系统的制作

    1. 根文件系统 文件系统是包括在一个磁盘(包括光盘.软盘.闪盘及其它存储设备)或分区的目录结构:一个可应用的磁盘设备可以包含一个或多个文件系统:如果您想进入一个文件系统,首先您要做的是挂载(moun ...

  5. linux 内核移植和根文件系统的制作【转载】

    原文地址:http://www.cnblogs.com/hnrainll/archive/2011/06/09/2076214.html 1.1 Linux内核基础知识 在动手进行Linux内核移植之 ...

  6. (三)linux之根文件系统的制作

    (一)准备工作 Ubuntu 16.04系统 linux-3.5内核:linux-3.5-20190929 交叉编译工具arm-linux-gcc-4.5.1-v6-vfp-20120301.rar ...

  7. linux 文件系统字体小,基于嵌入式Linux平台的最小文件系统的制作

    工作平台:FL2440 交叉编译环境:arm-linux-gcc 3.4.1 busybox版本:1.9.1 1) 制作文件系统总目录: mkdir my_rootfs 2) 编译&安装bus ...

  8. 细说嵌入式Linux文件系统的制作方法

    说到Linux文件系统对于刚刚接触Linux的初学者来说还是有些生疏,其实理解了他的定义并且掌握他的使用方法并不是什么难事.在下文中大家就会详细的了解到什么是Linux文件系统,并且可以学会嵌入式Li ...

  9. Porting:linux内核的模块化、根文件系统的制作和自动挂载

    1.关于内核模块($: linux   #: 开发板)      模块化设计. $:' vi drivers/char/Makefile             obj-m    += led_drv ...

最新文章

  1. opencv教程大全
  2. 虚拟机安装Ubuntu过程记录
  3. mysql 字符串不限长度,mysql中的字符串长度是否有限制?
  4. Newbe.Claptrap 0.10.2 发布,Blazor 演示
  5. java中domain什么意思_java解析URL中domain、端口和协议的两种方法
  6. ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程
  7. 测试一下你对IP地址的掌握水平(网管面试时会用到)
  8. 《Spring技术内幕(第2版)》PDF 国内经典分析spring源代码
  9. GDS 的Tide配置(使用spring)
  10. [HDU1712]ACboy needs your help
  11. 【对话】对话系统经典:检索式对话
  12. Scala学习01——Scala介绍
  13. 用Hough投票做物体检测(续)
  14. win10应用商店linux_win10应用商店中有哪些推荐的应用?
  15. 01背包问题—dp算法(动态规划)—java代码
  16. 什么是好用的身份证实名认证api接口?其应用场景有哪些?
  17. 华裔科学家成功解码脑电波 AI直接从大脑中合成语音
  18. 利用android的通知Notification来实现msn的登录状态
  19. ES6看这一篇就够了
  20. 数据压缩课程作业——LZW压缩算法完整仿真代码和分析

热门文章

  1. javaWeb核心技术第六篇之BootStrap
  2. Java并发编程(总结最全面的面试题)
  3. IBM研究院院长:量子计算“大爆发”将在十年内到来
  4. 连续空间和离散空间的距离基础
  5. 二分图的最大匹配-解决匹配问题
  6. autocad2014点击保存闪退_AutoCAD2014闪退的原因和解决方法 一打开就闪退怎么办
  7. Cocos2d-x JSB 自己主动绑定bindings
  8. CSS3实现3D立体效果
  9. AdapterView之ListView简介
  10. Android6.0以上应用在长时间在后台,因为内存不足导致系统回收内存,当再次启动应用出现Fragment重叠或者空白、异常解决方案(提供模拟内存不足导致系统回收内存的方案)。