加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

嵌入式根文件系统制作

发布时间:2020-12-15 06:21:02 所属栏目:百科 来源:网络整理
导读:? 1:文件系统分类: ?? 基于flash的文件系统: flash有两种 , 一种是NOR ,另一种NAND 。 NOR型 FLASH主要用于存放程序 。 NAND型 FLASH主要用于存放数据 。 NOR的特点是可在芯片内执行。这样应用程序可以直接在flash内存内运行,不必再把代码读到系统的RAM
?

1:文件系统分类:
?? 基于flash的文件系统:flash有两种一种是NOR,另一种NANDNOR型 FLASH主要用于存放程序NAND型 FLASH主要用于存放数据NOR的特点是可在芯片内执行。这样应用程序可以直接在flash内存内运行,不必再把代码读到系统的RAM中。NOR的传输效率很高,但写入和擦除速度较低而NAND结构能提供极高的单元密度。并且写入和擦除也很快。是提高数据存储密度的最佳选择JFFS2型文件系统主要用于NOR型flash。其特点为可读写,支持数据压缩的日志型文件系统.而yaffs文件系统一般是基于NAND FLASH上。yaffs文件系统与jffs相比,减少了一些功能(如支持数据压缩),所以挂载时间更短,速度更快,对内存占用更小。cramfs文件系统既可以用在NOR型flash上,也可以用在NAND型FLASH上。其特点为只读的压缩文件系统

??? 基于RAM的文件系统:ramdisk文件系统,严格的讲ramdisk并不是一种文件系统,而只是一种磁盘访问技术。是将内存中一块区域当作磁盘来用。是一种将实际的文件系统(如ext2)装入内存的机制。还有一种initramfs文件系统,也是基于RAM的。不做介绍了。进入主题。

?? cramfs是一个压缩式的文件系统,它并不需要一次性地将文件系统中的所有内容都解压缩到内存中,
而只是在系统需要访问到某个位置的数据的时候,马上计算出该数据在cramfs中的位置,将其实时地
解压缩到内存之中,然后通过对内存的访问来获取文件中需要读取的数据
cramfs中的解压缩以及解
压缩之后的内存中数据存放位置都是由cramfs文件系统本身进行维护的,用户并不需要了解具体的实现
过程,因此这种方式增强了透明度,对开发人员来说,既方便、又节省了存储空间。
cramfs拥有以下一些特性:
1、采用实时解压缩方式,但解压缩的时候有延迟
2、cramfs的数据都是经过处理、打包的,对其进行写操作有一定困难。所以cramfs不支持写操作,这个特性
刚好适合嵌入式应用中使用Flash存储文件系统的场合
3、在cramfs中,文件最大不能超过16MB

2.1 Linux根文件系统

  根文件系统不同于普通文件系统,它是在内核启动时挂载(mount)的第一个文件系统, 内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后把一 些基本的初始化脚本和服务程序等加载到内存中。

  Linux 根文件系统是树型结构组织[1,3],它包含了内核和系统管理所需要的各种文档和程序等。一般来说,根目录“/”下顶层目录都有一些比较固定命名和用途,下面列出一

  个Linux 根文件系统中的比较常见的目录结构。

  /bin:存放二进制可执行命令的目录。

  /dev:存放设备文件和目录。

  /etc:存放系统管理和配置文件和目录。

  /home:用户主目录,比如用户user 的主目录就是/home/user,可以用~user 来表示。

  /lib:存放动态链接共享库的目录。

  /sbin:存放系统管理员使用的管理程序的目录。

  /tmp:公用的临时文件存储点。

  /root:系统管理员的主目录。

  /mnt:用以临时挂载其他的文件系统。

  /proc:虚拟文件系统,可直接访问这个目录来获取系统信息。

  /var:某些大文件溢出区。

  /usr:存放应用程序和文件。

  对于嵌入式 Linux 系统的根文件系统来说,由于受系统资源的限制,一般没有上述 那么复杂仅保留一些常用的目录即可。如/bin、/dev、/etc、/lib、/proc、/var、/tmp、/usr、 /mnt 等[2]。 由于嵌入式系统的设计冗余度小、系统紧凑,通常存储容量有限,因此,必须选择 一个合适的根文件系统以使系统运行最佳。目前嵌入式Linux 根文件系统主要的根文件系 统类型有Romfs,JFFS2,RAMDISK,YAFFS/YAFFS2,Cramfs,Squashfs 等[1]。本文主要对 Cramfs 根文件系统进行讨论

?

?

3:根文件系统的制作

(1):新建一个目录,取名为rootfs,在其文件夹下创建根文件系统必须的目录。这些目录有:bin,dev,etc,lib,proc,sbin,sys,usr,mnt,tmp,var.usr/bin,usr/lib,usr/sbin,lib/modules。

(2):创建设备文件,以下两个设备文件必须创建。

?? mknod -m 666 console c 5 1 (说明:C为字符型设备的意思,5为主设备号,1为次设备号)

?? mknod -m 666 null c 1 3

(3)在/etc目录下装以上文件。inittab,profile,fstab,init.d(文件夹),init.d/rcS.这几个文件必须要有,我做实验的时候是直接拷的开发箱上的这几个文件。

(4)编译内核模块????????? make modules

(5)安装内核模块

make modules_install INSTALL_MOD_PATH=/XXX/rootfs(后面跟根文件系统路径,为什么要安装模块到根文件系统,是因为这些模块是用的时候才加入内核中。保存在根文件系统的lib/modules目录中)

(6)配置busybox

? busybox主要是制作根文件系统下面的命令,如ls,mkdir等。这是一个很好用的工具。最后编译成功会生成一个busybox文件,然后这些命令最后都是链结到这个busybox文件上。busybox配置中注意的选项有:编译选项中选择使用静态链接库,交叉编译环境的选择。特别注意里面有一个installation option.里面有一个busybox installation prefix,把你建的rootfs的路径填进去。

(7)如果busybox成功配置好,那么你转到rootfs下的bin目录就可以看到很多的命令和一个busybox文件。最后一步就是把rootfs打包成适合开发板的镜像文件了,这一步根据你要选择的文件系统,开发板的文件系统地址有关。我用的是jffs2文件系统。最后的命令为./mkfs.jffs2 -r rootfs -o rootfs.img -e 0x20000 --pad=0xd00000

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读