Chinaunix首页 | 论坛 | 博客
  • 博客访问: 152430
  • 博文数量: 43
  • 博客积分: 3000
  • 博客等级: 中校
  • 技术积分: 601
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-22 17:24
文章分类
文章存档

2010年(43)

我的朋友

分类: LINUX

2010-12-08 11:18:19

文件系统简介

文件系统就是个软件,帮用户来管理一些二进制的信息,管理外存上存储的这些二进制

各种文件在内存中都是以二进制的形式来存在的,如果没有文件系统,用户就需要自己去决定这些二进制的东西是什么,需要自己去和硬件打交道,有了文件系统,就省去了用户和硬件直接打交道的过程。

linux和windows以及嵌入式linux文件系统的区别?

在pc机上的linux的boot和根文件系统是一起的,不在一起,是挂载看到的,虽然是在根文件系统是能看到boot的,但是物理上是分开的。因为这个的boot是有文件系统的

而在嵌入式linux中,boot和根文件系统是分开的,在根文件下是看不到内核grub等东西的,1.是因为根文件系统没有去把boot做进来,2.因为嵌入式linux的boot中是没有文件系统用的。在嵌入式linux中是没有swap


优盘上的文件系统

挂载机制

基于内存的文件系统

可以把内存中的一块当成文件系统中的一部分

文件系统就分为:根文件系统和普通的文件系统。比如优盘就有自己的普通的文件系统,是fat32的文件系统
而根文件系统则不一定是fat32的。


还有一种nfs的网络文件系统

根文件系统为这些文件系统提供了一种框架

VFS

不基于硬件,作用是去识别各个设备上的文件系统,只存在于内存中的
执行的linux.rc这个可执行程序,进程号是1的程序就是这个。

pc机上的内核会通过bootpImage来识别硬盘上的文件系统




用ext3的read读出来数据,在用ext2的write写进去,中间就是用VFS这个借口来,调用不同的文件系统的函数来去实现一个cp的命令。
 

常见的根文件系统有基于flash的jffs2、yaffs、yaffs2、cramfs、基于网络的nfs等

nfs比较特别

用df来查看自己的根文件系统挂载

看到的就是这样子
/dev/mapper/VolGroup00-LogVol00
                      14093368   9200464   4165456  69% /
/dev/sda1               101086     15783     80084  17% /boot
tmpfs                   257800         0    257800   0% /dev/shm
.host:/              122873120  51227228  71645892  42% /mnt/hgfs

sda1中挂载的就是boot 
tmpfs就内存中的根文件系统
69%本来应该是sda1 
显示的是挂载过来的

Linux根文件系统目录结构

/bin /sbin /dev /etc /lib /usr /var 
/proc /tmp /home /root /mnt /sys
/bin /sbin 
放的是命令,bin下是常用的
sbin是系统常用的命令
usr/bin 下是用户的命令

/dev 下是一些设备文件
比如 tty0 touchscreen sound usb 等
一般挂载devfs或udev
这些名字可以自己改,是在内核中去修改的,修改的自己认识就可以的,这些东西都是内核启动完成后放进去的,做文件系统的只是起个文件夹得名字就可以了,具体放什么,是在内核启动中去放的

/etc 系统启动中需要的各种配置文件

比如启动时自动挂载的文件系统,自动运行的脚本,包括root一般的初始密码为什么是6个1,boa服务器配置脚本等东西,这是linux做根文件系统特别重要的文件,一般启动不起来,都是以为这个文件夹中的东西没有配置好

/lib  

存放应从程序所需要的共享库
如 ls,cp ifconfig等系统明亮以及自己交叉编译器所用的
/usr/bin
比如qt需要的库就会放到这里

/usr
一般存放用户需要的东西,比如用户自己安装的东西,总的来说就是不是根文件系统需要的东西会放在这里
/var
存放系统启动过程会自动保存的一些东西,这里放的一些,日志之类的东西,都是掉电丢失的
一般挂载ramfs 
ramfs就是把内存中的一块拿出来当做文件系统

tmpfs也是用来基于ramfs的文件系统
/tmp 
一般是些临时文件的程序需要的目录

上面的这两个都是占的内存的

/proc

dev 是用来放设备节点
而这里是用来放 存放记录了当前存在多少模块,还有中断的使用情况,使用次数,包括当前系统的字符设备
里面存放的那些数字表示的是进程,里面就存放了这些进程所需要的一些东西,实际去做的时候做成空的,去挂载,一般都是需要去写脚本自动挂载,若不挂载一般系统会出各种奇怪的错误

/root
root的家
/home
其他用户的家目录
/mnt
临时文件系统挂载的目录

/sys
和proc类似,每加载一个驱动,就会记录这个驱动申请了哪些硬件资源等等,dev中只是存放了设备的名字,而这里面则是具体的东西
/rc(pc 机上的linux没,在开发板上才有)
是启动起来的第一个进程

(重要 :根文件系统的构建)

需要了解嵌入linux的启动过程

"noinitrd  root=/dev/mtdblock/1  init=/linuxrc  console=ttyS0";
root:   指定了根文件系统在FLASH分区中的位置
console:指定了内核启动后首选的控制台
init:   指定了linux内核启动完毕后调用的第一个用户态程序,即进程号为1的进程。

root=/dev/mtdblock/1  表示从这里去找根文件系统 ,看内核中去怎么写,内核中是2就是2
init=/linuxrc 启动以后的第一个用户态的进程
console=ttyS0 启动信息打印到那里去 ,这个是串口

linuxrc那里来的?linuxrc就是init进程,内核只启动这一个程序,其他的根文件系统都是由这个进程来启动的,内核是工作在内核态的,只要启动用户态的这个linuxrc这个进程,就表示内核启动的工作的结束(有系统调用的时候内核还是会工作的)。
其他的用户进程都是属于这个进程子进程,因为都是这个进程的子进程

 
会读取inittab的配置文件,来按照这个脚本来执行


linuxrc的执行过程
(结合ppt来看)
(后续补充……)

inittab是在etc文件下的
inittab文件的格式
(补图)
第一个id是表示使用的控制台,啥也不写,表示和内核是一样的,可以和内核不一样,一般是默认不写
第二个runlevels是 对嵌入式是没有意义,对于pc机的linux有意思,从0到5,5代表图形界面,表示开机的时候是进图形界面,3是表示字符界面 ,0是启动不起来了,1是单用户模式,类似于安全模式,2是多用户
可以在/etc/inittab 中看到
第三action个是 表示程序是怎么去执行的(补图)
respawn 启动的进程是不允许退出的 在嵌入式linux中的bash就是不允许退出的 会不断的重启
第四个process是要执行的程序的名字(需要路径)

init进程只能控制这8个进程

console c 5 1  (c是字符 5 是主设备号 1是从设备号)
比如 5 表示是串口,1就是具体com1或者别的com口


什么是设备节点?

就是dev下的一个名字

字符设备
最多可以有0到254,共255个(类)设备,是空的就可以去申请

块设备

网络设备

所有的驱动都是工作在内核态的
内核启动linuxrc就把工作权利交给根文件系统了

在profile中写


alies vi = ‘vim’ 这样以后vi就相当于vim了

嵌入式领域中的命令基本上都是从busybox连接过来的
可以在bin下执行ll -h来看

阅读(9209) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~