黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

嵌入式根文件系統(tǒng)的構(gòu)建

系統(tǒng) 2293 0

嵌入式根文件系統(tǒng)的構(gòu)建
JustDo
我將從一個(gè)初學(xué)者的視角,全面的介紹根文件系統(tǒng)的構(gòu)建,力求最通俗,最易懂,最簡(jiǎn)潔。
首先我們來了解一下什么叫做根文件系統(tǒng)
一,什么叫根文件系統(tǒng)
用一句話來講就是"操作系統(tǒng)提供給用戶的一個(gè)接口",比如說windows,你要是沒有C盤,D盤之類的構(gòu)架,你程序怎么存入硬盤?你如何操作硬盤數(shù)據(jù)?進(jìn)程如何從硬盤讀取數(shù)據(jù)?
Linux操作系統(tǒng)更能體驗(yàn)接口這個(gè)概念,因?yàn)樗阉械脑O(shè)備都虛擬成一個(gè)文件,對(duì)設(shè)備的操作就是對(duì)文件的操作。在Linux中如果沒有文件系統(tǒng)的話,用戶就和操作系統(tǒng)的交互就斷開了,我們無法通過shell要求操作系統(tǒng)執(zhí)行各種命令,也無法運(yùn)行各種程序。
更細(xì)致的來說根文件系統(tǒng),它其實(shí)包括管理目錄和數(shù)據(jù)的方法和文件?目錄的組織方法,及所有文件和目錄構(gòu)成一個(gè)根文件系統(tǒng)
根文件系統(tǒng)有很多種種類,最常用的有
MS-DOS的FAT32
Linux發(fā)行版經(jīng)常用的ext3 etx4
嵌入式經(jīng)常用的ramfs yaffs
不同的種類的根文件系統(tǒng)有不同組織文件的方法和數(shù)據(jù)的組織方法。如想了解的更深入點(diǎn),去查百度百科。
二linux根文件目錄結(jié)構(gòu)
所有Linux的遵循一個(gè)文件系統(tǒng)標(biāo)準(zhǔn)叫"FHS"(filesystem hierarchy standrad), http://www.pathname/該網(wǎng)站可以看
通常一個(gè)Linux文件系統(tǒng)應(yīng)該如下

嵌入式根文件系統(tǒng)的構(gòu)建
/dev device的簡(jiǎn)寫,意思是這個(gè)目錄存放的全部是設(shè)備文件,linux將所有設(shè)備都抽象成文件放在這個(gè)目錄,通過對(duì)文件的操作就可以控制設(shè)備,比如說硬盤,一般是sda打頭的,可以通過 mount /dev/sda /mnt來掛載硬盤
/root 這個(gè)是系統(tǒng)管理員專用的目錄,這里存放了一些引導(dǎo)系統(tǒng)的備份文件,文件系統(tǒng)掛載信息,系統(tǒng)修復(fù)工具備份工具等
/usr 這個(gè)目錄存放的是共享、只讀的程序和數(shù)據(jù)。
/var variable的簡(jiǎn)寫,存放的是一些可變的數(shù)據(jù),日志文件,臨時(shí)文件什么的
/home 家目錄,大家用過Linux應(yīng)該都知道這個(gè)目錄是干嘛的,這個(gè)目錄相當(dāng)于windows的我的文檔,一般工作都在這個(gè)目錄里進(jìn)行。
/proc這是一個(gè)空目錄,不過系統(tǒng)跑起來之后就不是空的了,里面的目錄文件都是由系統(tǒng)生成的,但他并不在物理存儲(chǔ)設(shè)備上有數(shù)據(jù),是系統(tǒng)在內(nèi)存上構(gòu)建的,所有是個(gè)虛擬的家伙。里面包含了一些系統(tǒng)信息,cpu信息什么的
/bin 存放的普通命令的可執(zhí)行文件
/sbin 存放的是系統(tǒng)命令的可執(zhí)行文件
/etc 存放了很多配置文件,比如系統(tǒng)初始化腳本,掛載文件的配置文件等等
/boot 存放的是系統(tǒng)的bootloader和內(nèi)核及其配置文件,一般嵌入式系統(tǒng)不需要這個(gè)目錄,因?yàn)榍度胧絙ootloder都是單獨(dú)放的一個(gè)分區(qū)
/lib 系統(tǒng)的庫文件
/initrd 這個(gè)目錄是空的,用來啟動(dòng)時(shí)掛載initrd.img鏡像的,initrd.img鏡像也是一種根文件系統(tǒng),一般發(fā)行版得linux使用兩階段掛載根文件系統(tǒng),第一次階段使用initrd.img根文件系統(tǒng),根文件直接在內(nèi)存里運(yùn)行,速度快,然后掛載硬盤上的根文件系統(tǒng),這樣可以加快速度,嵌入式一般不需要這個(gè)目錄。
/tmp 臨時(shí)文件目錄
/mnt 臨時(shí)掛載點(diǎn)
三,yaffs2文件系統(tǒng)的構(gòu)建
Yaffs2能很好的支持flash,在嵌入式領(lǐng)域應(yīng)用廣泛,所以我們選擇yaffs2
1 首先我們要根據(jù)需要?jiǎng)?chuàng)建一個(gè)根文件系統(tǒng)框架
參考上面的目錄結(jié)構(gòu),我們不需要的是boot,initrd這兩個(gè)目錄,并增加一個(gè)sys目錄,這個(gè)sys目錄是busyBox的一個(gè)支持熱拔插的程序mdev需要的目錄
首先建一個(gè)總目錄我命名為root_fs,然后建立好子目錄
mkdir root_fs
cd root_fs
mkdir bin dev etc home lib mnt proc root sbin sys tmp
2 安裝好busybox
進(jìn)入busybox目錄
Make menuconfig
進(jìn)入busybox setting->
Build options->
選中 build busybox as a static binary和bulid with lager file support選項(xiàng)
表示使用靜態(tài)庫編譯,支持大文件
再進(jìn)入 busybox library tuning
選中vi-style line editing commands和fancy shell prompts設(shè)置命令行風(fēng)格
然后編譯,
Make
安裝 make install
然后拷貝安裝目錄 _install下的所有文件 到我們先前建的root_fs目錄下
cp _install/* ../root_fs -rf
3 在dev目錄下創(chuàng)建兩個(gè)設(shè)備節(jié)點(diǎn)
mknod console c 5 1
mknod null c 1 3
這兩個(gè)是系統(tǒng)運(yùn)行第一個(gè)初始化進(jìn)程必需要使用的使用的倆個(gè)設(shè)備
C表示字符設(shè)備 再后面是主設(shè)備號(hào)和次設(shè)備號(hào) 用來指示操作系統(tǒng)找到驅(qū)動(dòng)的
拷貝busybox的實(shí)例配置文件到etc下面
Cp ../busybox-1.15/examples/bootfloopy/etc/* ./
這里面有四個(gè)文件
Fstab init.d inittab profile
Busybox構(gòu)建的根文件系統(tǒng)啟動(dòng)流程是這樣的,先根據(jù)命令行參數(shù)init=linuxrc
啟動(dòng)linuxrc程序
Linurc根據(jù)inittab配置文件來啟動(dòng)相應(yīng)的腳本或進(jìn)程
Inittab格式:<id>::<runlevels>:<action>:<process>
現(xiàn)在我們修改inittab如下

嵌入式根文件系統(tǒng)的構(gòu)建
這表示
運(yùn)行的rcS腳本,運(yùn)行級(jí)別為sysinit,該腳本要使用使用控制臺(tái)
運(yùn)行shell解釋器,運(yùn)行級(jí)別為askfirst,該進(jìn)程要使用串口一
這個(gè)名字是由busybody產(chǎn)生的,s3c2410 s3c2440都是這個(gè)名
運(yùn)行umount -a -r當(dāng)按下ctr alt del組合鍵的時(shí)候
這里可以看到linuxrc通過inittab啟動(dòng)了rcS腳本
現(xiàn)在我們修改init.d目錄下的rcS文件為

嵌入式根文件系統(tǒng)的構(gòu)建

這文件是先設(shè)置PATH變量
再設(shè)置runlevel 和 prelevel變量
Mount -a會(huì)根據(jù)fstab掛載目錄,修改fstab如下

嵌入式根文件系統(tǒng)的構(gòu)建

掛載所需的文件系統(tǒng)
然后設(shè)置文件默認(rèn)屬性
然后掛載devpts文件系統(tǒng) 這個(gè)是用來支持外部網(wǎng)絡(luò)鏈接虛擬中端得
重定向mdev輸出到內(nèi)核的hotplug文件來支持熱拔插
運(yùn)行mdev -s在/dev目錄下生成內(nèi)核支持的所有設(shè)備文件
從HOSTNAME文件讀取主機(jī)名
所以
在/dev/下創(chuàng)建sysconfig目錄再在此目錄下創(chuàng)建HOSTNAME文件
修改HOSTNAME文件為JustDo

最好
修改profile

嵌入式根文件系統(tǒng)的構(gòu)建
這是你登陸命令解釋器的配置文件,他能夠改變你命令行前面顯示的內(nèi)容


/W是當(dāng)前目錄名

最后一步:將所需的庫文件全部拷貝到lib目錄下,這個(gè)庫文件在你所使用的交叉工具鏈中
cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/* ./lib

好了 完成上面所有的步驟之后

使用mkyaffs2image工具編譯好之后下載到開發(fā)板的根文件分區(qū)就可以跑了
如果出現(xiàn)
"Failed to execute /linuxrc. Attempting defaults...
Kernel panic - not syncing: No init found. Try passing init= option to kernel. "

有可能是你使用的mkyaffs2image工具不支持128M的flash
我的另外一篇博客已經(jīng)提到怎么解決了

綜上 系統(tǒng)啟動(dòng)的流程大概是這個(gè)樣子的到處必要的環(huán)境變量,Mount上所需的分區(qū),最后運(yùn)行腳本解釋器

PS:如有錯(cuò)誤,還請(qǐng)指正:JustDo,QQ:843308498

嵌入式根文件系統(tǒng)的構(gòu)建


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!??!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論