grub linux rootfs,rootfs文件系统(笔记)(草稿)

文件系统简介

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

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

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来识别硬盘上的文件系统

101208120444.jpg

用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来看

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值