grub linux rootfs,rootfs文件系统(笔记)(草稿)
文件系統(tǒng)簡介
文件系統(tǒng)就是個(gè)軟件,幫用戶來管理一些二進(jìn)制的信息,管理外存上存儲的這些二進(jìn)制
各種文件在內(nèi)存中都是以二進(jìn)制的形式來存在的,如果沒有文件系統(tǒng),用戶就需要自己去決定這些二進(jìn)制的東西是什么,需要自己去和硬件打交道,有了文件系統(tǒng),就省去了用戶和硬件直接打交道的過程。
linux和windows以及嵌入式linux文件系統(tǒng)的區(qū)別?
在pc機(jī)上的linux的boot和根文件系統(tǒng)是一起的,不在一起,是掛載看到的,雖然是在根文件系統(tǒng)是能看到boot的,但是物理上是分開的。因?yàn)檫@個(gè)的boot是有文件系統(tǒng)的
而在嵌入式linux中,boot和根文件系統(tǒng)是分開的,在根文件下是看不到內(nèi)核grub等東西的,1.是因?yàn)楦募到y(tǒng)沒有去把boot做進(jìn)來,2.因?yàn)榍度胧絣inux的boot中是沒有文件系統(tǒng)用的。在嵌入式linux中是沒有swap
優(yōu)盤上的文件系統(tǒng)
掛載機(jī)制
基于內(nèi)存的文件系統(tǒng)
可以把內(nèi)存中的一塊當(dāng)成文件系統(tǒng)中的一部分
文件系統(tǒng)就分為:根文件系統(tǒng)和普通的文件系統(tǒng)。比如優(yōu)盤就有自己的普通的文件系統(tǒng),是fat32的文件系統(tǒng)
而根文件系統(tǒng)則不一定是fat32的。
還有一種nfs的網(wǎng)絡(luò)文件系統(tǒng)
根文件系統(tǒng)為這些文件系統(tǒng)提供了一種框架
VFS
不基于硬件,作用是去識別各個(gè)設(shè)備上的文件系統(tǒng),只存在于內(nèi)存中的
執(zhí)行的linux.rc這個(gè)可執(zhí)行程序,進(jìn)程號是1的程序就是這個(gè)。
pc機(jī)上的內(nèi)核會通過bootpImage來識別硬盤上的文件系統(tǒng)
用ext3的read讀出來數(shù)據(jù),在用ext2的write寫進(jìn)去,中間就是用VFS這個(gè)借口來,調(diào)用不同的文件系統(tǒng)的函數(shù)來去實(shí)現(xiàn)一個(gè)cp的命令。
常見的根文件系統(tǒng)有基于flash的jffs2、yaffs、yaffs2、cramfs、基于網(wǎng)絡(luò)的nfs等
nfs比較特別
用df來查看自己的根文件系統(tǒng)掛載
看到的就是這樣子
/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就內(nèi)存中的根文件系統(tǒng)
69%本來應(yīng)該是sda1
顯示的是掛載過來的
Linux根文件系統(tǒng)目錄結(jié)構(gòu)
/bin /sbin /dev /etc /lib /usr /var
/proc /tmp /home /root /mnt /sys
/bin /sbin
放的是命令,bin下是常用的
sbin是系統(tǒng)常用的命令
usr/bin 下是用戶的命令
/dev 下是一些設(shè)備文件
比如 tty0 touchscreen sound usb 等
一般掛載devfs或udev
這些名字可以自己改,是在內(nèi)核中去修改的,修改的自己認(rèn)識就可以的,這些東西都是內(nèi)核啟動(dòng)完成后放進(jìn)去的,做文件系統(tǒng)的只是起個(gè)文件夾得名字就可以了,具體放什么,是在內(nèi)核啟動(dòng)中去放的
/etc 系統(tǒng)啟動(dòng)中需要的各種配置文件
比如啟動(dòng)時(shí)自動(dòng)掛載的文件系統(tǒng),自動(dòng)運(yùn)行的腳本,包括root一般的初始密碼為什么是6個(gè)1,boa服務(wù)器配置腳本等東西,這是linux做根文件系統(tǒng)特別重要的文件,一般啟動(dòng)不起來,都是以為這個(gè)文件夾中的東西沒有配置好
/lib
存放應(yīng)從程序所需要的共享庫
如 ls,cp ifconfig等系統(tǒng)明亮以及自己交叉編譯器所用的
/usr/bin
比如qt需要的庫就會放到這里
/usr
一般存放用戶需要的東西,比如用戶自己安裝的東西,總的來說就是不是根文件系統(tǒng)需要的東西會放在這里
/var
存放系統(tǒng)啟動(dòng)過程會自動(dòng)保存的一些東西,這里放的一些,日志之類的東西,都是掉電丟失的
一般掛載ramfs
ramfs就是把內(nèi)存中的一塊拿出來當(dāng)做文件系統(tǒng)
tmpfs也是用來基于ramfs的文件系統(tǒng)
/tmp
一般是些臨時(shí)文件的程序需要的目錄
上面的這兩個(gè)都是占的內(nèi)存的
/proc
dev 是用來放設(shè)備節(jié)點(diǎn)
而這里是用來放 存放記錄了當(dāng)前存在多少模塊,還有中斷的使用情況,使用次數(shù),包括當(dāng)前系統(tǒng)的字符設(shè)備
里面存放的那些數(shù)字表示的是進(jìn)程,里面就存放了這些進(jìn)程所需要的一些東西,實(shí)際去做的時(shí)候做成空的,去掛載,一般都是需要去寫腳本自動(dòng)掛載,若不掛載一般系統(tǒng)會出各種奇怪的錯(cuò)誤
/root
root的家
/home
其他用戶的家目錄
/mnt
臨時(shí)文件系統(tǒng)掛載的目錄
/sys
和proc類似,每加載一個(gè)驅(qū)動(dòng),就會記錄這個(gè)驅(qū)動(dòng)申請了哪些硬件資源等等,dev中只是存放了設(shè)備的名字,而這里面則是具體的東西
/rc(pc 機(jī)上的linux沒,在開發(fā)板上才有)
是啟動(dòng)起來的第一個(gè)進(jìn)程
(重要 :根文件系統(tǒng)的構(gòu)建)
需要了解嵌入linux的啟動(dòng)過程
"noinitrd ?root=/dev/mtdblock/1 ?init=/linuxrc ?console=ttyS0";
root: ? 指定了根文件系統(tǒng)在FLASH分區(qū)中的位置
console:指定了內(nèi)核啟動(dòng)后首選的控制臺
init: ? 指定了linux內(nèi)核啟動(dòng)完畢后調(diào)用的第一個(gè)用戶態(tài)程序,即進(jìn)程號為1的進(jìn)程。
root=/dev/mtdblock/1??表示從這里去找根文件系統(tǒng) ,看內(nèi)核中去怎么寫,內(nèi)核中是2就是2
init=/linuxrc 啟動(dòng)以后的第一個(gè)用戶態(tài)的進(jìn)程
console=ttyS0 啟動(dòng)信息打印到那里去 ,這個(gè)是串口
linuxrc那里來的?linuxrc就是init進(jìn)程,內(nèi)核只啟動(dòng)這一個(gè)程序,其他的根文件系統(tǒng)都是由這個(gè)進(jìn)程來啟動(dòng)的,內(nèi)核是工作在內(nèi)核態(tài)的,只要啟動(dòng)用戶態(tài)的這個(gè)linuxrc這個(gè)進(jìn)程,就表示內(nèi)核啟動(dòng)的工作的結(jié)束(有系統(tǒng)調(diào)用的時(shí)候內(nèi)核還是會工作的)。
其他的用戶進(jìn)程都是屬于這個(gè)進(jìn)程子進(jìn)程,因?yàn)槎际沁@個(gè)進(jìn)程的子進(jìn)程
會讀取inittab的配置文件,來按照這個(gè)腳本來執(zhí)行
linuxrc的執(zhí)行過程
(結(jié)合ppt來看)
(后續(xù)補(bǔ)充……)
inittab是在etc文件下的
inittab文件的格式
(補(bǔ)圖)
第一個(gè)id是表示使用的控制臺,啥也不寫,表示和內(nèi)核是一樣的,可以和內(nèi)核不一樣,一般是默認(rèn)不寫
第二個(gè)runlevels是 對嵌入式是沒有意義,對于pc機(jī)的linux有意思,從0到5,5代表圖形界面,表示開機(jī)的時(shí)候是進(jìn)圖形界面,3是表示字符界面 ,0是啟動(dòng)不起來了,1是單用戶模式,類似于安全模式,2是多用戶
可以在/etc/inittab 中看到
第三action個(gè)是 表示程序是怎么去執(zhí)行的(補(bǔ)圖)
respawn 啟動(dòng)的進(jìn)程是不允許退出的 在嵌入式linux中的bash就是不允許退出的 會不斷的重啟
第四個(gè)process是要執(zhí)行的程序的名字(需要路徑)
init進(jìn)程只能控制這8個(gè)進(jìn)程
console c 5 1 ?(c是字符 5 是主設(shè)備號 1是從設(shè)備號)
比如 5 表示是串口,1就是具體com1或者別的com口
什么是設(shè)備節(jié)點(diǎn)?
就是dev下的一個(gè)名字
字符設(shè)備
最多可以有0到254,共255個(gè)(類)設(shè)備,是空的就可以去申請
塊設(shè)備
網(wǎng)絡(luò)設(shè)備
所有的驅(qū)動(dòng)都是工作在內(nèi)核態(tài)的
內(nèi)核啟動(dòng)linuxrc就把工作權(quán)利交給根文件系統(tǒng)了
在profile中寫
alies vi = ‘vim’ 這樣以后vi就相當(dāng)于vim了
嵌入式領(lǐng)域中的命令基本上都是從busybox連接過來的
可以在bin下執(zhí)行l(wèi)l -h來看
總結(jié)
以上是生活随笔為你收集整理的grub linux rootfs,rootfs文件系统(笔记)(草稿)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle cannot alloca
- 下一篇: html5中的css特性,浅谈HTML5