根文件系统制作

1,为什么要划分用户空间和内核空间:主要是保证安全性,ARM 7种工作模式: 用户模式(usr),快速中断(fiq),外部

中断(irq),管理模式(svc),数据访问中止(abt),系统模式(sys),未定义指令异常(und).不同的模式对寄存器访问

有不同权限。linux利用了CPU这一特性,分级来运行内核和应用,避免了用户误操作产生系统崩溃。使操作系统得到保护。

通过系统调用和硬件中断进入内核模式。
2,为什么需要文件系统:设备,内核运行依赖于文件系统。挂载文件系统,必须指定一个挂载点。

rootfs是必不可少的,PC上主要实现ramdisk和直接挂载的HD上根文件系统,一般不从HD上启动,而是从FLASH上启动,将

rootfs load到RAM中。
稍复杂的 直接从flash读取cramfs,更复杂的在flash上直接分区,并构建JFFS2等文件系统。

RAMDisk 将制作好的 rootfs 压缩后写入 Flash,启动的时候由 Bootloader load 到RAM,解压缩,然后挂载到 /。这种方

法操作简单,但是在 RAM 中的文件系统不是压缩的,因此需要占用许多嵌入式系统中稀有资源 RAM。

ramdisk 就是用内存空间来模拟出硬盘分区,ramdisk通常使用磁盘文件系统的压缩存放在flash中,在系统初始化时,解压缩

到SDRAM并挂载根文件系统, 在linux系统中,ramdisk有二种,一种就是可以格式化并加载,在linux内核2.0/2.2就已经支持,

其不足之处是大小固定;另一种是 2.4的内核才支持,通过,ramfs来实现,他不能被格式化,但用起来方便,其大小随所需要的

空间增加或减少,是目前linux常用的ramdisk技 术.

Cramfs 是 Linus 写的很简单的文件系统,有很好的压缩率,也可以直接从 Flash 上运行,不须 load 到 RAM 中,因此节

约了 RAM。但是 Cramfs 是只读的,对于需要运行时修改的目录(如: /etc, /var, /tmp)多有不便,因此,一般将这些

目录做成ramfs 等可写的 fs。


Ramdisk制作
RAMDisk的制作方法如下:

(1) 在PC机的Linux操作系统环境下,生成可以虚拟成块设备的文件,假设文件名为init.img。

$ dd if=/dev/zero of=init.img bs=4096 count=1024

其中bs*count为块设备大小(单位:字节),生成init.img文件以后,还必须对该文件进行格式化。

$ mke2fs –m0 –F init.img

(2) 新建一个文件夹ram,并将init.img挂接到ram目录。

$ mkdir ram

$ mount init.img ram/ -o loop

  这时,读写ram目录,等效于读写init.img文件。用户可以将根文系统所需的文件写入到ram目录中。往ram目录写完文

件以后,还需要使用umount ram命令卸载init.img,才能将已写入的文件保存到init.img中。

(3)添加完毕,需要umount ram
4. Cramfs制作
CramFS(Compressed Rom File System)是Linux Torvalds在Transmeta任职时,所参与开发的文件系统。它是针对Linux内核

2.4之后的版本所设计的一种新型只读文件系统,采用了zlib 压缩,压缩比一般可以达到1:2,但仍可以作到高效的随机读

取,Linux系统中,通常把不需要经常修改的目录压缩存放,并在系统引导的时候再将压缩文件 解开。因为Cramfs不会影响

系统的读取文件的速度,而且是一个高度压缩的文件系统。因此非常广泛应用于嵌入式系统中。

  在嵌入式的 环境之下,内存和外存资源都需要节约使用。如果使用RAMDISK方式来使用文件系统,那么在系统运行之后

,首先要把Flash上的映像文件解压缩到内存 中,构造起RAMDISK环境,才可以开始运行程序。但是它也有很致命的弱点。

在正常情况下,同样的代码不仅在Flash中占据了空间(以压缩后的形式存 在),而且还在内存中占用了更大的空间(以解压

缩之后的形式存在),这违背了嵌入式环境下尽量节省资源的要求。

  使用CramFS文件 系统就是一种解决这个问题的方式。CramFS是一个压缩格式的文件系统,它并不需要一次性地将文件

系统中的所有内容都解压缩到内存之中,而只是在系统需 要访问某个位置的数据的时候,马上计算出该数据在CramFS中的

位置,将它实时地解压缩到内存之中,然后通过对内存的访问来获取文件系统中需要读取的数 据。CramFS中的解压缩以及

解压缩之后的内存中数据存放位置都是由CramFS文件系统本身进行维护的,用户并不需要了解具体的实现过程,因此这种方

式增强了透明度,对开发人员来说,既方便,又节省了存储空间。

但是Cramfs也有其缺点:延迟、小于16MB、不支持写,只支持PAGE_CREATE_SIZE=4096的内核。

制作的命令:(root文件夹中存放着文件系统)

#mkcramfs root cramfs.img
5. 其他根文件系统的制作
制作yaffs文件系统: mkyaffsimage myroots myroots.img

制作squashfs: mksquashfs $(FS_DIR) $(FS_NAME) -noappend -be -lzma -no-fragments –noI
6. BusyBox编译以及移植(根文件系统内命令的制作移植) 建立目标板空根目录文件夹及根目录下的文件夹:
[root@190 friendly-arm]# mkdir myroots

[root@190 friendly-arm]#pwd

/friendly-arm/myroots

[root@190 friendly-arm]#cd myroots

[root@190 myroots]# mkdir bin sbin usr lib dev mnt opt root etc home proc tmp var

[root@190 myroots]# mkdir etc/init.d
进入etc/init.d目录下,建立一个脚本文件,并命名为rcS,用gedit打开,添加如下内容:
#! /bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:

runlevel=S

prevlevel=N

umask 022

export PATH runlevel prevlevel

#

# Trap CTRL-C &c only in this shell so we can interrupt subprocesses.

#

trap ":" INT QUIT TSTP

创建 dev 中的节点

如果使用“linux 2.6.xx”的内核,应该事先创建节点“console”、“null”。否则在系统启动时内容会提示以下错误:
Warning: unable to open an initial console.
Kernel panic - not syncing: Attempted to kill init!
 
创建节点的命令如下:
# mknod dev/console c 5 1
# mknod dev/null c 1 3 移植Busybox:
进入到压缩文件存放的目录下,并解压。然后进入解压后的busybox目录文件夹,随后配置busybox 。
 
[root@190 busybox-1.2.0]# make menuconfig

1) Support for devfs
 
2) Build BusyBox as a static binary ( no shared libs ) //将busybox编译成静态链接
 
3) Do you want to build busybox with a Cross Compile?
 
(/usr/local/arm/3.3.2/bin/arm-linux-) Cross Compile prefix //指定交叉编译器
 
4) init
 
5) Support reading an inittab file //支持init读取/etc/inittab 配置文件
 
6) (X) ash选中ash //建立的rcS脚本才能执行
 
7)ash
 
8)cp cat ls mkdir mv //可执行命令工具的选择,自己看着办吧,需要用到的就选上
 
9) mount
 
10) umount
 
11) Support loopback mounts
 
12) Support for the old /etc/mtab file
 
13) insmod
 
14) Support version 2.2.x to 2.4.x Linux kernels
 
15) Support version 2.6.x Linux kernels
 
16) vi
 
17)don’t use user

以上内容必须选上,其他可按默认值;如果要支持其他功能,如网络支持等,可按需选择,英语不是很烂的话,这些都没有

问题。
 
配置好之后,保存退出。然后对其编译和安装到刚才建立的根文件系统目录下:
 
[root@190 busybox-1.2.0] make TARGET_ARCH=arm CROSS=arm-linux- \ PREFIX=/friendly-arm/myroots/ all install
 
安装好之后,将相应的二进制文件拷贝到根文件系统相应的目录下:


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值