04.嵌入式Linux文件系統(tǒng)

1.文件系統(tǒng)的一般定義是

負(fù)責(zé)管理和存儲文件信息的軟件系統(tǒng)

2.文件系統(tǒng)的功能

1.負(fù)責(zé)存儲器中文件的組織和分配
2.提高對存儲器資源的利用效率
3.將文件的存取剂公、共享、和保護(hù)等功能提供給操作系統(tǒng)和用戶
4.簡化用戶對文件的各項(xiàng)操作
5.保證在多用戶環(huán)境下文件的安全性和一致性

文件系統(tǒng)是操作系統(tǒng)的重要組成部分眨攘,是實(shí)現(xiàn)文件多元化管理的必要條件。

3.虛擬文件系統(tǒng)

      為了對各類文件系統(tǒng)進(jìn)行統(tǒng)一管理,Linux引入了虛擬文件系統(tǒng)--VFS(Virtual File System)递惋, 為各類文件系統(tǒng)提供統(tǒng)一的操作界面和應(yīng)用編程接口。

VFS并不是一種實(shí)際的文件系統(tǒng)溢陪, 它是物理文件系統(tǒng)與服務(wù)之間的一個(gè)接口層
VFS只存在于內(nèi)存中萍虽, 不存在于任何外存空間
VFS在系統(tǒng)啟動時(shí)建立, 在系統(tǒng)關(guān)閉時(shí)消亡

4.Linux根文件系統(tǒng)標(biāo)準(zhǔn)目錄

QQ截圖20181024111933.png

5.使用busybox制作跟文件系統(tǒng)

0.準(zhǔn)備工具
      0.0. busybox-1.29.3:或選用其他版本的 busybox,大同小異
      0.1. 下載地址:http://www.busybox.net/
      0.2. 交叉編譯器安裝:sudo apt-get install gcc-arm-linux-gnueabihf
1.構(gòu)建目錄結(jié)構(gòu)
    1.0. 創(chuàng)建根文件系統(tǒng)目錄形真,主要包括以下目錄:
        /dev /etc /lib /usr /var /proc /tmp /home /root /mnt /bin
        /sbin /opt /sys /media
    1.1. 命令:
        mkdir $HOME/rootfs
        cd $HOME/rootfs
        mkdir dev etc lib usr var proc tmp home root mnt bin sbin opt sys media
    *rootfs目錄位置可根據(jù)自己實(shí)際需求放置杉编,只要保證路徑中國無中文字符與特殊字符即可*
2.使用busybox構(gòu)建 /bin /sbin linuxrc
  2.1. 解壓busybox
         tar -jxvf busybox-x.xx.x.tar.bz2
         cd busybox-x.xx.x/
  2.2. 使用busybox的默認(rèn)配置 
         make defconfig
        *使用默認(rèn)配置 busybox,大部分的命令都會被選中*
      make menuconfig
      *如果此過程中出錯(cuò)多半是因?yàn)榧虞d庫文件失敗導(dǎo)致,  使用命令sudo apt-get install libncurses5-dev 安裝ncurses5即可*
      進(jìn)入Settings  ---> 找到 ---Build Options 
      選中Build static binary (no shared libs)
      選中Cross compiler prefix咆霜,設(shè)置交叉編譯前綴為 arm-linux-gnueabihf-
      向下滑動找到 ---Library Tuning
      選中Username completion
      選中Fancy shell prompts
      選中Query cursor position from terminal
      按左右鍵選中Exit退出到最后一層邓馒,選擇Save Configuration to an Alternate File保存
      最后選擇Exit退出界面
  2.3.make
  2.4.make install
  2.5.完成在 busybox 目錄下會看見  _install 目錄,里面有 bin sbin usr linuxrc 四個(gè)文件與目錄蛾坯,
      將這三個(gè)目錄或文件拷到第 1 步所建的 rootfs 文件夾下光酣,
      命令:cp bin sbin usr linuxrc $HOME/rootfs  -rfav
      *-a 的參數(shù)必不可少,因?yàn)?bin sbin 里面的命令大多是到 busybox 的動態(tài)鏈接,
      如果不加-a 則拷貝過程中會自動將每個(gè)命令復(fù)制一份*
**************************************************************************
*          到這里就實(shí)現(xiàn)了跟文件系統(tǒng)的基本工作脉课,文件系統(tǒng)就可以正常使用了           *
**************************************************************************
3.構(gòu)建 /lib 目錄
      進(jìn)入 /usr/arm-linux-gnueabihf/lib/ 目錄救军,將以下動態(tài)庫拷貝到$HOME/rootfs/lib 下
      命令:cp *so* $HOME/rootfs/lib -av
4.構(gòu)建 /etc 目錄
  4.1./etc 目錄下最重要的四個(gè)文件
      inittab:用來作為 linuxrc 的配置腳本财异。
      init.d/rcS:inittab 啟動的第一個(gè)腳本,一般用來掛載系統(tǒng)必需的文件系統(tǒng)唱遭,必要的設(shè)備連接戳寸,設(shè)置 IP 地址,啟動其他腳本等拷泽。默認(rèn)僅有 mount –a
      fstab:執(zhí)行 mount –a 時(shí)疫鹊,按照此文件掛載文件系統(tǒng)。
      profile:登陸完 shell 后自動執(zhí)行此腳本司致,一般用來配置用戶的登錄環(huán)境拆吆。
  4.2.進(jìn)入根文件系統(tǒng) rootfs 的 etc 目錄,執(zhí)行如下操作:
      拷貝 Busybox 目錄下 examples/bootfloopy/etc/ 下的所有文件到當(dāng)前目錄下蚌吸,以此為模板構(gòu)建我們的根文件系統(tǒng)锈拨。
      命令:cd $HOME/rootfs/etc
                 cp -rv ../../busybox-1.29.3/examples/bootfloppy/etc/ * .
  4.3.修改 inittab
      inittab 的作用及格式請參考其他說明
      刪除第三行代碼:tty2::askfirst:-/bin/sh
      命令:vi inittab
      將第三行刪除或者在本行最前面加一個(gè)#將其注釋
  4.4.修改 init.d/rcS 文件
      init 進(jìn)程通過 inittab 啟動的第一個(gè)進(jìn)程為此腳本,我們需要做以下修改:
      命令:vi init.d/rcS 或 gedit init.d/rcS 
      將下列信息覆蓋到打開的文件中
            #! /bin/sh
            
            #1.根據(jù) fstab 配置文件掛載相應(yīng)的文件系統(tǒng)
            /bin/mount -a
            
            #2.配置 telnetd 服務(wù)器的時(shí)候需要以下文件夾及文件系統(tǒng)
            /bin/mkdir -p /dev/pts
            /bin/mkdir -p /dev/shm
            /bin/mount -t devpts devpts /dev/pts
            /bin/mount -t tmpfs tmpfs /dev/shm
            
            #3.啟動需要以下文件夾
            /bin/mkdir /var/tmp
            /bin/mkdir /var/modules
            /bin/mkdir /var/run
            /bin/mkdir /var/log
            
            #4.在 lib 下創(chuàng)建相應(yīng)文件夾(與當(dāng)前內(nèi)核版本相同) 羹唠,為驅(qū)動模塊加載作準(zhǔn)備
            if ! [ -d /lib/modules ]; then
                mkdir /lib/modules
            fi
            
            if ! [ -d /lib/modules/$(uname -r) ]; then
                mkdir /lib/modules/$(uname -r)
            fi
            
            #5.自動在/dev 下創(chuàng)建設(shè)備節(jié)點(diǎn)
            /sbin/mdev -s
5.修改 fstab 文件奕枢,將一下內(nèi)容替換源文件fstab 中的內(nèi)容
    #device mount-point type options dump fask order
    proc   /proc  proc   defaults 0 0
    ramfs  /var   ramfs  defaults 0 0
    ramfs  /tmp   ramfs  defaults 0 0
    none   /sys   sysfs  defaults 0 0
    none   /dev   ramfs  defaults 0 0
6.修改 profile,將一下內(nèi)容填寫到profile的第五行位置
    #1.初始化 PATH 環(huán)境變量及動態(tài)鏈接庫路徑
    export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
    #2.初始化主機(jī)名以及當(dāng)前工作路徑
    /bin/hostname TechManZhang
    USER="`id -un`"
    LOGNAME=$USER
    HOSTNAME='/bin/hostname'
    PS1='[\u@\h \W]# '
6.用戶名佩微、密碼文件構(gòu)建(這步可以不做缝彬,一般開發(fā)板都不帶密碼)
    拷貝虛擬機(jī)上的/etc/passwd, /etc/group, /etc/shadow 到 rootfs/etc 下。
    命令:
            cp /etc/passwd $HOME/rootfs/etc
            cp /etc/group $HOME/rootfs/etc
            cp /etc/shadow $HOME/ rootfs/etc
    對以下三個(gè)文件修改哺眯,只保存與 root 相關(guān)的項(xiàng)(每個(gè)文件的第一行)只保留 passwd 第一行谷浅,為:
    root:x:0:0:root:/root:/bin/sh
    (而且最后改成/bin/ash,PC 使用 bash 作為默認(rèn) shell奶卓,嵌入式系統(tǒng)不支持 bash一疯,這里改為 sh 或 ash)只保留 group 第一行,為:
    root:x:0:root
    只保留 shadow 第一行夺姑,為:
    root:$1$x9yv1WlB$abJ2v9jOlOc9xW/y0QwPs.:14034:0:99999:7:::
    (注意這個(gè)值不一定一樣墩邀,各人密碼不一樣,這個(gè)值也不一樣盏浙,這個(gè)的密碼是六個(gè)1:111111)這個(gè)文件在本地登錄或者 ftp眉睹、telnet 登錄時(shí)起作用打開/etc/inittab
    把第二行:::respawn:-/bin/sh
    改為::respawn:-/bin/login //登錄時(shí)需要用戶名、密碼驗(yàn)證
    這樣废膘,以后登陸開發(fā)板時(shí)需輸入用戶名密碼竹海,同虛擬機(jī)相同
    登陸后可以通過 passwd 命令修改密碼或通過 adduser 增加新用戶

至此,根文件系統(tǒng)制作完畢

6.根文件系統(tǒng)驗(yàn)證及鏡像制作

驗(yàn)證根文件系統(tǒng)主要有兩種方式:
1.通過 Nfs 啟動根文件系統(tǒng)驗(yàn)證
2.制作鏡像燒寫到開發(fā)板中驗(yàn)證

6.1.nfs 啟動根文件系統(tǒng)

網(wǎng)絡(luò)文件系統(tǒng)是 FreeBSD 支持的文件系統(tǒng)中的一種丐黄, 也被稱為 NFS斋配。 NFS允許一個(gè)系統(tǒng)在網(wǎng)絡(luò)上與他人共享目錄和文件。通過使用 NFS,用戶和程序可以像訪問本地文件一樣訪問遠(yuǎn)端系統(tǒng)上的文件许起。
在 u-boot 的配置界面按照以下格式十偶,可設(shè)置 nfs 啟動系統(tǒng)菩鲜。
模板:
setenv bootargs ‘noinitrd root=/dev/nfs nfsroot=(虛擬機(jī)路徑),rsize=1024,wsize=1024 ip=(開發(fā)板 iP):(服務(wù)器 ip):(網(wǎng)關(guān)):255.255.255.0::eth0:off init=/linuxrc console=ttySAC0园细,115200’
注:服務(wù)器 ip 一般是虛擬機(jī) ip
例子:
setenv bootargs ‘noinitrd root=/dev/nfs nfsroot=/home/zhang/MyShare/04_day/rootfs_test_2,rsize=1024,wsize=1024 ip=10.0.108.117:10.0.108.229:10.0.108.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 , 115200’
saveenv
如果想恢復(fù)本機(jī) emmc 啟動,請輸入:
setenv bootargs 'noinitrd root=/root=/dev/mmcblk0p2 rwrootfstype=ext4 init=/linuxrc lcd=wy070ml tp=gslx680'
saveenv

6.2.制作文件系統(tǒng)鏡像

用 make_ext4fs 制作 ext4 文件系統(tǒng)鏡像
tar xvf mkfs_ext4.tar.gz
cp make_ext4fs /bin/make_ext4fs
sudo chmod 777 $HOME/rootfs/ -R
 制作 ext4 鏡像
make_ext4fs -s -l 314572800 -a root -L linux gtk.img  /home/edu/rootfs
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末接校,一起剝皮案震驚了整個(gè)濱河市猛频,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蛛勉,老刑警劉巖鹿寻,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異诽凌,居然都是意外死亡毡熏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門侣诵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痢法,“玉大人,你說我怎么就攤上這事杜顺〔聘椋” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵躬络,是天一觀的道長尖奔。 經(jīng)常有香客問我,道長穷当,這世上最難降的妖魔是什么提茁? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮馁菜,結(jié)果婚禮上茴扁,老公的妹妹穿的比我還像新娘。我一直安慰自己火邓,他們只是感情好丹弱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著铲咨,像睡著了一般躲胳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纤勒,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天坯苹,我揣著相機(jī)與錄音,去河邊找鬼摇天。 笑死粹湃,一個(gè)胖子當(dāng)著我的面吹牛恐仑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播为鳄,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼裳仆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了孤钦?” 一聲冷哼從身側(cè)響起歧斟,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎偏形,沒想到半個(gè)月后静袖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡俊扭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年队橙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萨惑。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捐康,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出咒钟,到底是詐尸還是另有隱情吹由,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布朱嘴,位于F島的核電站倾鲫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏萍嬉。R本人自食惡果不足惜乌昔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望壤追。 院中可真熱鬧磕道,春花似錦、人聲如沸行冰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽悼做。三九已至疯特,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肛走,已是汗流浹背漓雅。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人邻吞。 一個(gè)月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓组题,卻偏偏與公主長得像,于是被迫代替她去往敵國和親抱冷。 傳聞我的和親對象是個(gè)殘疾皇子崔列,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容