日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

构建根文件系统之busybox(四)完善

發布時間:2025/4/5 windows 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 构建根文件系统之busybox(四)完善 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • busybox(四)完善
  • proc掛載
  • 手動掛載
  • proc解析
  • 使用腳本自動掛載
  • 使用mount-a掛載
  • udev/mdev 掛載
  • 使用jffs2 文件系統格式
  • 安裝zlib
  • 安裝jffs2 生成工具
  • 修改命令行識別
  • NFS網絡文件系統
  • 設置主機
  • 設置單板(手動掛載)
  • NFS啟動
  • FAQ

busybox(四)完善

proc掛載

手動掛載

在Linux中存在著一類特殊的偽文件系統,用于使用與文件接口統一的操作來完成各種功能,例如ptyfs、devfs、sysfs和procfs。procfs是Linux內核信息的抽象文件接口,大量內核中的信息以及可調參數都被作為常規文件映射到一個目錄樹中,這樣我們就可以簡單直接的通過echo或cat這樣的文件操作命令對系統信息進行查取和調整了。

嘗試使用ps命令來查看當前單板的進程,發現不能使用,這是因為proc文件系統還未掛載,

# psPID Uid VSZ Stat Command ps: can't open '/proc': No such file or directory

嘗試手動掛載

mkdir proc mount -t proc none /proc ps 即可查看

使用man mount?查看下幫助,使用/proc搜索下,發現使用-t是掛載虛擬文件系統的意思

mount -t type device dir 對于proc文件系統來說,它沒有設備,proc filesystem根本沒有處理dev_name這個參數,所以傳什么都沒有影響,只影響你的mount命令輸出。好的實踐應該將設備名指定為nodev。 參考鏈接 https://www.zhihu.com/question/263885160

然后我們使用reboot重啟系統,發現這次雖然有proc文件夾,但是沒有自動掛載,所以也不能再次正確顯示

proc解析

打開proc目錄,發現里面有按數字命名的文件夾,他實際上就是進程號.我們打開文件夾1,查看fd文件夾,其文件1,2,3分別指向了標準輸出輸入和錯誤

# cd /proc/1/fd # ls -l lrwx------ 1 0 0 64 Jan 1 00:21 0 -> /dev/console lrwx------ 1 0 0 64 Jan 1 00:21 1 -> /dev/console lrwx------ 1 0 0 64 Jan 1 00:21 2 -> /dev/console

使用腳本自動掛載

參考下默認的配置文件中的腳本::SYSINIT:/etc/init.d/rcS,手動添加

::CTRLALTDEL:reboot ::SHUTDOWN:umount -a -r ::RESTART:init ::ASKFIRST:-/bin/sh: tty2::ASKFIRST:-/bin/sh tty3::ASKFIRST:-/bin/sh tty4::ASKFIRST:-/bin/sh ::SYSINIT:/etc/init.d/rcS

默認的配置表的路徑在/etc/inittab,這個是在busybox代碼中的parse_inittab函數體現的.修改為:

#/etc/inittab console::askfirst:-bin/sh ::sysinit:/etc/init.d/rcS #這個是本次新增的

注意,這里的sysinit是小寫的,==大寫是不識別的==,提示Bad inittab entry: ::SYSINIT:/etc/init.d/rcS

然后創建所需的腳本mount -t proc none /proc

#/etc/init.d/rcS mount -t proc none /proc

手動先創建proc文件夾,加上可執行權限

mkdir proc chmod +x rcS

然后制作映像文件啟動

mkyaffs2image 2th 2th.yaffs2

使用mount-a掛載

重新燒錄最原始的文件系統,手動使用mount -a掛載,這個命令依賴于etc/fstab文件【實際上一般的mount命令也受它的控制】,實際的格式如下:

devicemount-ponittypeoptionsdumpfsck
設備名,對于proc可以為任意值掛載點文件系統類型掛載參數,逗號隔開??
proc/procprocdefaults00

手動建立文件etc/fstab

# etc/fstab#device mount-ponit type options dump fsck proc /proc proc defaults 0 0

手動創建文件夾proc,執行掛載,成功

# mkdir proc # mount -a # ps

自動掛載

同樣的我們可以使用etc/init.d/rcS來實現自動掛載,對rcS添加可執行權限

# /etc/inittab console::askfirst:-bin/sh ::sysinit:/etc/init.d/rcS# /etc/init.d/rcS mount -a# etc/fstab#device mount-ponit type options dump fsck proc /proc proc defaults 0 0

手動創建文件夾proc后制作映像文件mkyaffs2image 3th/ 3th.yaffs2

然后可以查看下掛載了什么文件系統

# cat proc/mounts rootfs / rootfs rw 0 0 /dev/root / yaffs rw 0 0 proc /proc proc rw 0 0

udev/mdev 掛載

dev目錄下對應著設備和驅動,我們最開始使用手動創建的形式添加.Linux下使用udev來實現自動創建dev下的設備節點.在busybox有其簡化般般mdev.在busybox下搜索mdev的幫助docs/mdev.txt.

Here's a typical code snippet from the init script: [1] mount -t sysfs sysfs /sys 掛載sysfs文件系統 [2] echo /bin/mdev > /proc/sys/kernel/hotplug [3] mdev -sOf course, a more "full" setup would entail executing this before the previous code snippet: [4] mount -t tmpfs mdev /dev [5] mkdir /dev/pts [6] mount -t devpts devpts /dev/pts

先創建sysfs文件夾mkdir sys

然后實現掛載文件系統,使用mount -a根據etc/fstab去掛載[1,4,6]

# etc/fstab#device mount-ponit type options dump fsck proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0

修改腳本文件/etc/init.d/rcS

# /etc/init.d/rcS #這里去掛載`fstab`的文件 #1,4 mount -a #5 mkdir /dev/pts #6 mount -t devpts devpts /dev/pts #2,支持熱拔插,hotplug指向mdev,自動創建設備節點 echo /sbin/mdev > /proc/sys/kernel/hotplug #3創建內核原有的設備系統 mdev -s

制作文件系統后燒入

mkyaffs2image 4th/ 4th.yaffs2

使用ls dev可以看到自動生成很多節點設備

# ls dev console ptyrf tty17 ttyq7 dsp ptys0 tty18 ttyq8 event0 ptys1 tty19 ttyq9 ----......

再使用cat /proc/mounts?查看已經掛載的文件系統

# cat proc/mounts rootfs / rootfs rw 0 0 /dev/root / yaffs rw 0 0 proc /proc proc rw 0 0 sysfs /sys sysfs rw 0 0 tmpfs /dev tmpfs rw 0 0 devpts /dev/pts devpts rw 0 0

使用jffs2 文件系統格式

這個文件格式一般使用在nor上,當然也可以在nand使用.zlib是個壓縮庫,jffs2是一個壓縮的文件系統.jffs2需要用到zlib工具

安裝zlib

  • 源碼包是zlib-1.2.3.tar.gz,使用xzf,不是xjf來解壓.tar xzf zlib-1.2.3.tar.gz

  • 配置./configure --shared --prefix=/usr/?,shared表示動態庫,prefix表示安裝路徑
  • make
  • 最后安裝到系統,sudo make install

  • 安裝jffs2 生成工具

  • 源碼包是mtd-utils-05.07.23.tar.bz2,先解壓tar xjf mtd-utils-05.07.23.tar.bz2

  • cd util/去make

  • 安裝?sudo make install

  • 生成工具mkfs.jffs2

  • 使用生成,不同的flash使用不同的參數

    mkfs.jffs2 -n -s 2048 -e 128KiB -d first_fs -o first_fs.jffs2-s 一頁大小是2048 -e 一個塊大小 128KiB -d 源目錄 -o 輸出
  • 修改命令行識別

  • 啟動單板,輸入j使用dnw燒寫,啟動后發現內核還是以yaff去識別VFS: Mounted root (yaffs filesystem).

  • .需要在啟動命令行指定根文件系統的類型

    Enter your selection: q OpenJTAG> print bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0 bootcmd=nand read.jffs2 0x30007FC0 kernel; bootm 0x30007FC0 baudrate=115200 ethaddr=08:00:3e:26:0a:5b ipaddr=192.168.7.17 serverip=192.168.7.11 netmask=255.255.255.0 mtdids=nand0=nandflash0 mtdparts=mtdparts=nandflash0:256k@0(bootloader),128k(params),2m(kernel),-(root) bootdelay=10 stdin=serial stdout=serial stderr=serial partition=nand0,0 mtddevnum=0 mtddevname=bootloaderEnvironment size: 444/131068 bytes

    設定根文件系統格式并保存rootfstype=jffs2

    set bootargs noinitrd root=/dev/mtdblock3 rootfstype=jffs2 init=/linuxrc console=ttySAC0 save

    輸入boot啟動VFS: Mounted root (jffs2 filesystem).成功啟動

  • NFS網絡文件系統

    設置主機

  • 啟動NFS服務,使得主機上的文件夾允許被單板訪問掛載.NFS服務在/etc/exports上配置,在該文件上增加新建的文件系統的路徑sudo vi /etc/exports,添加內容,其中*表示允許所有文件

    /work *(rw,sync,no_root_squash,no_subtree_check)/home/book/stu/fs/5th *(rw,sync,no_root_squash,no_subtree_check)
  • 重啟主機NFS,?sudo /etc/init.d/nfs-kernel-server restart

  • showmount -e?即可查看已經聲明過的可被掛載的目錄

  • 嘗試使用主機自己掛載自己的NFS文件夾,主機自身ip為192.168.5.107,然后可以在mnt下看到文件

    book@100ask:~/stu/fs$ sudo mount -t nfs 192.168.76.135:/home/book/stu/fs/5th /mnt book@100ask:~/stu/fs$ ls /mnt bin dev etc lib linuxrc proc sbin sys usr
  • 設置單板(手動掛載)

  • 查詢設置ip

    ifconfig eth0 up ifconfig eth0 192.168.5.200
  • 新建mnt文件夾,嘗試掛載

    mkdir /mnt mount -t nfs -o nolock 192.168.5.222:/home/book/stu/fs/5th /mntmount :掛載命令 nfs :使用的協議 nolock :不阻塞 IP : NFS服務器的IP(NFS服務器運行在哪個系統上,就是哪個系統的IP) /work/nfs: 要掛載的目錄(Ubuntu的目錄) /mnt : 要掛載到的目錄(開發板上的目錄,注意掛載成功后,/mnt下原有數據將會被隱藏,無法找到)
  • 在主機新建一個文件echo hello >test.txt,單板可以馬上看到,在單板更改文件?echo mcu > test.txt,主機也能看到

  • 注意看下etc/init.d/rcS?里面是否有ip配置,如果有,可以刪除或者改成對的.光盤的文件有設置這個,如果復制過來需要修改

  • NFS啟動

    上述方式是先掛載了FLASH的文件系統,然后掛載另一個文件系統,下面嘗試使用NFS文件系統為根文件系統

  • 命令行參數 ,具體格式在linux\Documentation\nfsroot.txt中有說明.或者直接搜索root nfs mount

    https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt

    nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>] ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
  • 查看之前的啟動參數bootargs,修改省略hostname

    # 原來的 # bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0 set bootargs noinitrd root=/dev/nfs nfsroot=192.168.5.222:/home/book/stu/fs/5th ip=192.168.5.200:192.168.5.222:192.168.5.222:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
  • 運行提示

    IP-Config: Complete:device=eth0, addr=192.168.5.200, mask=255.255.255.0, gw=192.168.5.222,host=192.168.5.200, domain=, nis-domain=(none),bootserver=192.168.5.222, rootserver=192.168.5.222, rootpath= Looking up port of RPC 100003/2 on 192.168.5.222 Looking up port of RPC 100005/1 on 192.168.5.222
  • 可以在主機直接使用arm-linux-gcc編譯,產生的程序直接在單板運行

  • FAQ

    NFS:Network File System(網絡文件系統),NFS只是一種文件系統,本身并沒有傳輸功能,是基于RPC協議實現的,為C/S架構。也就是說,NFS也只是文件系統而已,與jffs2,yaffs,ext4等是一類東西。但是NFS的特殊之處在于,它可以通過網絡來掛載,而不用燒寫到設備上。這就跟網吧里使用PXE啟動來搭建無盤系統一樣:每臺電腦并沒有安裝硬盤,而是直接通過PXE啟動服務器上的系統,看起來每臺電腦都有硬盤,其實都是掛載服務器上的硬盤。

    NFS怎么用??前邊已經介紹過,NFS是C/S架構,也就是說,使用NFS需要搭建服務器和客戶端。客戶端很簡單,自帶的uboot已經添加了對NFS客戶端的支持,我們只需要管NFS服務器。這個服務器其實跟TFTP、Samba、 Ftp服務器是一類的東西,直接在Ubuntu上使用命令安裝即可,

  • 主機安裝NFS
  • sudo apt-get install nfs-kernel-server sudo vi /etc/exports
  • showmount -e?即可查看已經聲明過的可被掛載的目錄
  • sudo /etc/init.d/nfs-kernel-server status即可查看nfsd是否正在運行
  • 光盤提供的文件系統中etc/init.d/rcS文件中已經默認添加了設置開發板IP的命令,如果你不需要這個IP或者跟你的網段不同,可以修改以符合自己的需要。光盤里提供的文件系統都是用arm-linux-gcc 3.4.5版本制作的),因此你必須使用2.6.22.6的內核來啟動,否則無法掛載文件系統。
  • 轉載:https://www.cnblogs.com/zongzi10010/p/10023719.html?

    總結

    以上是生活随笔為你收集整理的构建根文件系统之busybox(四)完善的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。