《理解Linux文件系統(tǒng)和設(shè)備文件系統(tǒng).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《理解Linux文件系統(tǒng)和設(shè)備文件系統(tǒng).ppt(23頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、Linux文件系統(tǒng)和設(shè)備文件系統(tǒng),,主要內(nèi)容,Linux文件系統(tǒng)目錄結(jié)構(gòu) sysfs文件系統(tǒng)及測(cè)試 設(shè)備文件系統(tǒng)及測(cè)試,一、Linux文件系統(tǒng)目錄結(jié)構(gòu),/dev: 設(shè)備文件存儲(chǔ)目錄。 /lib: 庫(kù)文件目錄。 /var: 這個(gè)目錄的內(nèi)容經(jīng)常變動(dòng),如/var/log目錄被用來(lái)存放系統(tǒng)日志。 /etc: 系統(tǒng)配置文件所在目錄。 /proc: 系統(tǒng)運(yùn)行時(shí),進(jìn)程和內(nèi)核信息存放在這里。 /bin: 包含基本命令。,一、Linux文件系統(tǒng)目錄結(jié)構(gòu)(續(xù)),/mnt: 用來(lái)存放掛載存儲(chǔ)設(shè)備的掛載目錄。 /usr: 存放用戶程序的目錄。 /tmp: 用來(lái)存放臨時(shí)文件。 /sys: sysfs文件系統(tǒng)被映射到此目
2、錄。 /sbin: 存放系統(tǒng)管理的命令,是超級(jí)用戶root的可執(zhí)行命令存放地。 /root: 超級(jí)用戶root的家目錄,查看系統(tǒng)中注冊(cè)的設(shè)備,輸入命令: cat /proc/devices 查看系統(tǒng)中注冊(cè)的設(shè)備。 分為“Character devices”和“Block devices”。 第1列為主設(shè)備號(hào),第2列為設(shè)備名。,查看系統(tǒng)中注冊(cè)的設(shè)備(續(xù)),輸入命令: ls l /dev/ 也可以查看系統(tǒng)注冊(cè)的設(shè)備文件。 日期的前兩列對(duì)應(yīng)于設(shè)備的主設(shè)備號(hào)和次設(shè)備號(hào)。,二、sysfs文件系統(tǒng),輸入命令: ls -l /sys 查看sysfs文件系統(tǒng)目錄。 sysfs文件系統(tǒng)把連接在系統(tǒng)上的設(shè)備和總線
3、組織成一個(gè)個(gè)分級(jí)的文件,向用戶空間導(dǎo)出內(nèi)核數(shù)據(jù)結(jié)構(gòu)以及它們的屬性,并可以由用戶空間存取。,二、sysfs文件系統(tǒng)(續(xù)),輸入命令: echo xxx /sys/devices/platform/hhtech_gpio/backlight_level 調(diào)節(jié)LCD屏的背光亮度。其中,“xxx”的范圍是0100,分別對(duì)應(yīng)背光的最小值和最大值。,輸入命令: cat /sys/devices/platform/hhtech_gpio/backlight_level 讀取當(dāng)前LCD屏的背光亮度。,二、sysfs文件系統(tǒng)(續(xù)),修改drivers/char/hhtech_gpio.c,添加如下內(nèi)容: sta
4、tic DEVICE_ATTR(backlight_level, 0666, hhtech_sysfs_show_backlight_level, hhtech_sysfs_store_backlight_level); 創(chuàng)建和初始化“backlight_level”屬性。,二、sysfs文件系統(tǒng)(續(xù)),修改drivers/char/hhtech_gpio.c,向數(shù)組attrs添加如下內(nèi)容: &dev_attr_backlight_level.attr 將“backlight_level”屬性添加到sysfs文件系統(tǒng)中。,二、sysfs文件系統(tǒng)(續(xù)),hhtech_sysfs_show_bac
5、klight_level函數(shù),hhtech_sysfs_store_backlight_level函數(shù),二、sysfs文件系統(tǒng)(續(xù)),重新編譯內(nèi)核,二、sysfs文件系統(tǒng)(續(xù)),重新打包固件并測(cè)試,三、設(shè)備文件系統(tǒng),/dev是設(shè)備文件的存放目錄,那怎么生成相應(yīng)的設(shè)備文件節(jié)點(diǎn)呢?使用設(shè)備文件系統(tǒng)udev。 udev完全工作在用戶空間,利用設(shè)備加入或者移除時(shí)內(nèi)核向應(yīng)用層發(fā)送的熱插拔事件來(lái)工作。 熱插拔時(shí),設(shè)備的詳細(xì)信息會(huì)由內(nèi)核輸出到sysfs文件系統(tǒng)中,udev利用sysfs的信息來(lái)動(dòng)態(tài)創(chuàng)建和刪除設(shè)備文件或者執(zhí)行其它動(dòng)作。,mdev(udev的精簡(jiǎn)版本)的原理,執(zhí)行mdev -s :以-s為參數(shù)調(diào)
6、用 /sbin/mdev,mdev掃描 /sys/class 和 /sys/block 中所有的類(lèi)設(shè)備目錄,如果在目錄中含有名為“dev”的文件,且文件中包含有設(shè)備號(hào),則mdev就利用這些信息為這個(gè)設(shè)備在/dev 下創(chuàng)建設(shè)備節(jié)點(diǎn)文件。一般只在啟動(dòng)時(shí)才執(zhí)行一次 “mdev -s”。,mdev的原理(續(xù)),熱插拔事件:由于啟動(dòng)時(shí)運(yùn)行了命令:echo /sbin/mdev /proc/sys/kernel/hotplug ,那么當(dāng)有熱插拔事件產(chǎn)生時(shí),內(nèi)核就會(huì)調(diào)用/sbin/mdev。這時(shí)mdev通過(guò)環(huán)境變量中的 ACTION 和 DEVPATH,來(lái)確定此次熱插拔事件的動(dòng)作及影響了/sys中的哪個(gè)目錄
7、。接著會(huì)看看這個(gè)目錄中是否有“dev”的屬性文件,如果有就利用這些信息為這個(gè)設(shè)備在/dev下創(chuàng)建設(shè)備節(jié)點(diǎn)文件。,mdev的使用,在啟動(dòng)時(shí)加上使用mdev的命令: # 掛載/sys為sysfs文件系統(tǒng) /bin/mount -t sysfs sysfs /sys # 啟動(dòng)mdev程序 /bin/echo /sbin/mdev /proc/sys/kernel/hotplug mdev -s,mdev的使用(續(xù)),在rootfs/etc/inittab文件中添加: ::sysinit:/bin/mount -t sysfs none /sys -o noexec,nosuid,nodev 掛載/s
8、ys為sysfs文件系統(tǒng),mdev的使用(續(xù)),在rootfs/etc/inittab文件中添加: ::sysinit:/bin/echo /sbin/mdev /proc/sys/kernel/hotplug ::sysinit:/sbin/mdev -s 啟動(dòng)mdev程序,mdev的使用(續(xù)),例如: 當(dāng)插入SD卡后,能自動(dòng)生成/dev/mmcblk1p1設(shè)備, 并且自動(dòng)mount到/mnt/mmcblk1p1目錄上去。,mdev的使用(續(xù)),例如: 當(dāng)拔出SD卡后,能自動(dòng)刪除/dev/mmcblk1p1設(shè)備。,mdev的實(shí)驗(yàn),將rootfs/etc/inittab文件中的“::sysinit:/bin/echo /sbin/mdev /proc/sys/kernel/hotplug”語(yǔ)句注釋掉 重新編譯固件,然后測(cè)試SD卡能否自動(dòng)識(shí)別?,Any Questions?,