/sys文件系統(tǒng)最重要的目錄結(jié)構(gòu)
① /sys/devices
該目錄下是全局設(shè)備結(jié)構(gòu)體系,包含所有被發(fā)現(xiàn)的注冊在各種總線上的各種物理設(shè)備。一般來說,所有的物理設(shè)備都按其在總線上的拓?fù)浣Y(jié)構(gòu)來顯示,但有兩個例外,即platform devices和system devices。platform devices一般是掛在芯片內(nèi)部的高速或者低速總線上的各種控制器和外設(shè),它們能被CPU直接尋址;system devices不是外設(shè),而是芯片內(nèi)部的核心結(jié)構(gòu),比如CPU,timer等,它們一般沒有相關(guān)的驅(qū)動,但是會有一些體系結(jié)構(gòu)相關(guān)的代碼來配置它們。
② /sys/dev
該目錄下有字符設(shè)備(block)和塊設(shè)備(char)兩個子目錄,里面全是以主次設(shè)備號(major:minor)命名的鏈接文件,鏈接到/sys/devices。
③ /sys/class (按功能分類設(shè)備)
該目錄下包含所有注冊在kernel里面的設(shè)備類型,每個設(shè)備類型表達(dá)具有一種功能的設(shè)備。每個設(shè)備類型子目錄下是具體設(shè)備的符號鏈接,這些鏈接指向/sys/devices/…下的具體設(shè)備。設(shè)備類型和設(shè)備并沒有一一對應(yīng)的關(guān)系,一個物理設(shè)備可能具備多種設(shè)備類型;一個設(shè)備類型只表達(dá)具有一種功能的設(shè)備,比如:系統(tǒng)所有輸入設(shè)備都會出現(xiàn)在/sys/class/input之下,而不論它們是以何種總線連接到系統(tǒng)的。(/sys/class也是構(gòu)成linux統(tǒng)一設(shè)備模型的一部分)
④ /sys/block (從linux2.6.26版本開始已經(jīng)移到了/sys/class/block)
代表著系統(tǒng)中當(dāng)前被發(fā)現(xiàn)的所有塊設(shè)備。按照功能來說防止在/sys/class下會更合適,但由于歷史遺留因素而一直存在于/sys/block,但從linux2.6.22內(nèi)核開始這部分就已經(jīng)標(biāo)記為過去時,只有打開了CONFIG_SYSFS_DEPRECATED配置編譯才會有這個目錄存在,并且其中的內(nèi)容在從linux2.6.26版本開始已經(jīng)正式移到了/sys/class/block,舊的接口/sys/block為了向后兼容而保留存在,但其中的內(nèi)容已經(jīng)變?yōu)榱酥赶蛩鼈冊?sys/devices/中真實設(shè)備的符號鏈接文件。
⑤ /sys/bus (按總線類型分類設(shè)備)
一般來說每個子目錄(總線類型)下包含兩個子目錄,一個是devices,另一個是drivers;其中devices下是這個總線類型下的所有設(shè)備,這些設(shè)備都是符號鏈接,它們分別指向真正的設(shè)備(/sys/devices/…下);而drivers下是所有注冊在這個總線上的驅(qū)動,每個driver子目錄下 是一些可以觀察和修改的driver參數(shù)。 (它也是構(gòu)成linux統(tǒng)一設(shè)備模型的一部分)
⑥ /sys/module
該目錄包含所有被載入Kernel的模塊,無論這些模塊是以內(nèi)聯(lián)(inlined)方式編譯到內(nèi)核映像文件中還是編譯為外模塊(.ko文件)
⑦ /sys/fs
該目錄用來描述系統(tǒng)中所有的文件系統(tǒng),包括文件系統(tǒng)本身和按照文件系統(tǒng)分類存放的已掛載點。
⑧ /sys/kernel
該目錄下存放的是內(nèi)核中所有可調(diào)整的參數(shù)
⑨ /sys/firmware
該目錄下包含對固件對象(firmware object)和屬性進(jìn)行操作和觀察的接口,即這里是系統(tǒng)加載固件機制的對用戶空間的接口.(關(guān)于固件有專用于固件加載的一套API)
⑩/sys/power
該目錄下有幾個屬性文件可以用于控制整個機器的電源狀態(tài),如向其中寫入控制命令讓機器關(guān)機/重啟等等。
sys目錄是一個虛擬文件系統(tǒng),它包含了與內(nèi)核相關(guān)的文件。這些文件通常是只讀的,因此在sys目錄下創(chuàng)建或編輯文件是不被支持的,也不會生效。如果您需要在啟動時執(zhí)行一些操作,可以考慮使用/etc/rc.local或者其他的系統(tǒng)啟動腳本來實現(xiàn)。但是請注意,修改內(nèi)核相關(guān)的配置或文件可能會導(dǎo)致系統(tǒng)不穩(wěn)定或無法啟動,因此在進(jìn)行此類操作時應(yīng)當(dāng)非常謹(jǐn)慎并備份數(shù)據(jù)。
sys目錄下的文件通常是只讀的,因為這些文件包含了與內(nèi)核相關(guān)的信息,不建議直接修改。如果您需要修改內(nèi)核參數(shù)或配置,請使用sysctl命令或者在/etc/sysctl.conf文件中進(jìn)行修改。對于其他的sys目錄下的文件,建議不要隨意修改。如果您一定需要修改,可以考慮使用initramfs技術(shù),在系統(tǒng)啟動時加載一個自定義的initramfs鏡像,其中包含了您需要修改的文件。這樣可以避免重啟后還原。但是請注意,修改內(nèi)核相關(guān)的配置或文件可能會導(dǎo)致系統(tǒng)不穩(wěn)定或無法啟動,因此在進(jìn)行此類操作時應(yīng)當(dāng)非常謹(jǐn)慎并備份數(shù)據(jù)。
Initramfs(Initial RAM Filesystem)是一個用于在Linux系統(tǒng)啟動時加載臨時根文件系統(tǒng)的技術(shù)。它包含了必要的內(nèi)核模塊和文件,可以在系統(tǒng)啟動時使用。如果您需要在啟動時修改sys目錄下的文件并使其生效,可以考慮使用initramfs技術(shù)。
initramfs技術(shù)前提
在Linux系統(tǒng)中,initramfs是一個內(nèi)核自帶的功能,因此不需要單獨安裝。initramfs是在操作系統(tǒng)啟動時由內(nèi)核自動加載的,用于初始化和加載內(nèi)核模塊、掛載根文件系統(tǒng)等操作。用戶可以通過編輯initramfs文件,添加、刪除或修改其中的內(nèi)容,以滿足自己的需求。
另外,建議在使用initramfs技術(shù)前先了解相關(guān)知識和經(jīng)驗,并備份好系統(tǒng)數(shù)據(jù),以防出現(xiàn)操作失誤或其他問題。在對initramfs文件進(jìn)行任何修改之前,請確保您已經(jīng)完全理解其中的文件結(jié)構(gòu)和內(nèi)容,以及其作用和影響。
確認(rèn)系統(tǒng)內(nèi)核支持initramfs。在Linux內(nèi)核的配置中,可以通過CONFIG_INITRAMFS_SOURCE選項來啟用initramfs功能。您可以使用以下命令查看當(dāng)前內(nèi)核是否支持initramfs:
zgrep CONFIG_INITRAMFS_SOURCE /proc/config.gz
如果該命令輸出“# CONFIG_INITRAMFS_SOURCE is not set”信息,則表示當(dāng)前內(nèi)核不支持initramfs。否則,該選項將列出其相應(yīng)的值(通常是一個文件路徑)。
準(zhǔn)備基本的initramfs環(huán)境。在創(chuàng)建自己的initramfs之前,您需要準(zhǔn)備一個包含必要驅(qū)動和工具程序的基本initramfs環(huán)境,以便在啟動時加載。可以使用命令創(chuàng)建一個基本的initramfs,詳情參考技術(shù)方法2
sudo update-initramfs -c -k $(uname -r)
initramfs技術(shù)方法1
下面是一個基本的步驟:
創(chuàng)建一個新的目錄,用于存放initramfs鏡像的文件
mkdir my_initramfs
cd my_initramfs
在該目錄下創(chuàng)建一個名為init的腳本,并添加需要修改的sys目錄下的文件。例如,假設(shè)您需要修改sys/kernel/debug/tracing/trace_clock文件:
#!/bin/sh
mount -t sysfs none /sys
mount -t debugfs none /sys/kernel/debug
echo local > /sys/kernel/debug/tracing/trace_clock
umount /sys/kernel/debug
umount /sys
#腳本說明
這個腳本的作用是啟用Linux內(nèi)核的跟蹤功能,它會執(zhí)行以下操作:
掛載sysfs和debugfs文件系統(tǒng)到/sys和/sys/kernel/debug目錄。
具體來說,這個命令使用了mount工具程序,并指定以下選項:
-t sysfs:指定要掛載的文件系統(tǒng)類型為sysfs。sysfs是一種特殊的文件系統(tǒng),它提供了一種用戶空間訪問和管理內(nèi)核數(shù)據(jù)結(jié)構(gòu)的接口。
none:表示要掛載的設(shè)備或文件系統(tǒng)不存在。在這里,我們并沒有指定任何設(shè)備節(jié)點或文件路徑,而是直接將sysfs文件系統(tǒng)掛載到/sys目錄下。
/sys:表示掛載點(即目標(biāo)目錄),也就是我們要將sysfs文件系統(tǒng)掛載到的目錄。在Linux系統(tǒng)中,/sys目錄通常被用于顯示當(dāng)前系統(tǒng)硬件及其狀態(tài)信息。
因此,當(dāng)您執(zhí)行這個命令時,系統(tǒng)會將sysfs文件系統(tǒng)掛載到/sys目錄下,并在該目錄中顯示與當(dāng)前系統(tǒng)相關(guān)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)、設(shè)備和驅(qū)動程序等信息。通過/sys目錄,用戶可以方便地查看和管理系統(tǒng)中的各種硬件和軟件資源,從而更好地理解和調(diào)試Linux系統(tǒng)。
將trace_clock設(shè)置為“l(fā)ocal”,以便在跟蹤數(shù)據(jù)中使用本地時鐘。
卸載debugfs和sysfs文件系統(tǒng)。
sysfs文件系統(tǒng)提供了一種獲取系統(tǒng)信息的接口,而debugfs文件系統(tǒng)則提供了訪問內(nèi)核調(diào)試信息的接口。在這個腳本中,通過掛載這兩個文件系統(tǒng)并修改相應(yīng)的內(nèi)核參數(shù),可以啟用Linux內(nèi)核的跟蹤功能,從而幫助開發(fā)人員診斷和調(diào)試系統(tǒng)問題。
請注意,需要具有root權(quán)限才能運行這個腳本,并且對于不同版本的Linux內(nèi)核,可能需要進(jìn)行適當(dāng)?shù)男薷牟拍苷_地啟用跟蹤功能。
將該腳本賦予執(zhí)行權(quán)限:
chmod +x init
使用find
命令將需要的文件復(fù)制到initramfs目錄中:
find . | cpio --create --format='newc' > ../my_initramfs.cpio
#命令說明
這個命令的作用是將當(dāng)前目錄(包括子目錄)中的所有文件和文件夾打包成一個initramfs文件。
具體來說,這個命令使用了兩個工具程序:find和cpio。
find命令:用于查找當(dāng)前目錄(包括子目錄)中的所有文件和文件夾,并將它們輸出到標(biāo)準(zhǔn)輸出中。其中,“.”表示當(dāng)前目錄,“|”表示管道符號,將find的輸出傳遞給cpio命令。
cpio命令:用于創(chuàng)建或提取歸檔文件。在這個命令中,使用了以下選項:
--create:表示創(chuàng)建新的歸檔文件。
--format='newc':指定歸檔文件的格式為“newc”,這是一種特定于Linux內(nèi)核的壓縮格式。
../my_initramfs.cpio:將歸檔文件的輸出重定向到上級目錄中的名為“my_initramfs.cpio”的文件中。如果該文件不存在,則會自動創(chuàng)建;如果存在,則會覆蓋原有內(nèi)容。
因此,這個命令執(zhí)行后會將當(dāng)前目錄中的所有文件和文件夾打包成一個名為“my_initramfs.cpio”的initramfs文件,該文件可以被用于啟動和初始化Linux系統(tǒng)。
修改GRUB配置文件,以加載initramfs鏡像文件。打開/etc/default/grub文件,在GRUB_CMDLINE_LINUX_DEFAULT行中添加initrd=/path/to/my_initramfs.cpio
,例如:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash initrd=/path/to/my_initramfs.cpio"
更新GRUB配置文件并重啟:
sudo update-grub
sudo reboot
在系統(tǒng)重新啟動后,您修改的sys目錄下的文件應(yīng)該已經(jīng)生效了。請注意,使用initramfs技術(shù)需要一定的Linux系統(tǒng)知識,并且修改內(nèi)核相關(guān)的配置或文件可能會導(dǎo)致系統(tǒng)不穩(wěn)定或無法啟動,因此在進(jìn)行此類操作時應(yīng)當(dāng)非常謹(jǐn)慎并備份數(shù)據(jù)。
注意?。?!
initramfs技術(shù)方法2
使用initramfs技術(shù)在啟動時修改/sys目錄下的文件并使其生效的步驟如下:
創(chuàng)建一個臨時的initramfs環(huán)境。可以使用以下命令創(chuàng)建一個包含必要驅(qū)動和工具程序的基本initramfs:
sudo update-initramfs -c -k $(uname -r)
#命令說明
這個命令的作用是生成當(dāng)前系統(tǒng)正在運行的內(nèi)核版本的initramfs文件,以供啟動時使用。
具體來說,這個命令使用了update-initramfs工具程序,并指定以下選項:
sudo:以超級用戶權(quán)限執(zhí)行該命令。
update-initramfs:用于更新或創(chuàng)建initramfs文件的工具程序。
-c:表示創(chuàng)建新的initramfs文件。
-k (uname?r):指定要操作的內(nèi)核版本號。(uname?r):指定要操作的內(nèi)核版本號。(uname -r)會輸出當(dāng)前正在運行的內(nèi)核版本號。因此,使用-k選項和$(uname -r)參數(shù),可以確保生成與當(dāng)前正在運行的內(nèi)核版本相對應(yīng)的initramfs文件。
因此,當(dāng)您執(zhí)行這個命令時,系統(tǒng)會在/initrd.img目錄(也可能是其他目錄)下創(chuàng)建一個名為“initrd.img-<kernel_version>”(例如,initrd.img-5.4.0-89-generic)的initramfs文件。該文件包含了必要的驅(qū)動、工具程序和文件系統(tǒng)信息,用于在Linux系統(tǒng)啟動時初始化和加載內(nèi)核模塊,以及掛載根文件系統(tǒng)。
將/sys目錄及其子目錄(如果有)添加到initramfs中。可以使用以下命令創(chuàng)建一個腳本,并將其存儲在/etc/initramfs-tools/scripts/init-top/目錄中:
sudo vim /etc/initramfs-tools/scripts/init-top/add_sys_directory.sh
然后,在該腳本中輸入以下內(nèi)容:
#!/bin/sh
mount --bind /sys /root/sys
這個腳本的作用是將/sys目錄掛載到initramfs根目錄下的/sys目錄中。
- 修改需要修改的/sys目錄下的文件。您可以使用任何編輯器進(jìn)行修改。
- 在initramfs中添加修改后的文件??梢允褂靡韵旅顒?chuàng)建一個腳本,并將其存儲在/etc/initramfs-tools/scripts/init-top/目錄中:
sudo nano /etc/initramfs-tools/scripts/init-top/copy_modified_files.sh
然后,在該腳本中輸入以下內(nèi)容:
#!/bin/sh
cp /sys/path/to/modified/file /root/sys/path/to/modified/file
這個腳本的作用是將修改后的文件復(fù)制到initramfs中/sys目錄下。
- 保存并關(guān)閉腳本文件,并設(shè)置其可執(zhí)行權(quán)限:
sudo chmod +x /etc/initramfs-tools/scripts/init-top/add_sys_directory.sh
sudo chmod +x /etc/initramfs-tools/scripts/init-top/copy_modified_files.sh
- 重新生成initramfs文件??梢允褂靡韵旅钪匦律蒳nitramfs:
sudo update-initramfs -u -k $(uname -r)
其中,-u選項表示更新當(dāng)前內(nèi)核版本的initramfs;-k選項后面跟隨當(dāng)前內(nèi)核版本號。
- 重啟系統(tǒng)以使更改生效。在啟動時,initramfs環(huán)境會自動加載修改過的/sys目錄和文件。
第二種方法(要充分了解模塊或驅(qū)動)
確認(rèn)您所要修改的文件屬于/sys目錄??梢允褂靡韵旅畈榭次募穆窂胶蛯傩孕畔ⅲ?/p>
ls -l /sys/path/to/file
找到控制該文件的內(nèi)核模塊或驅(qū)動程序??梢允褂靡韵旅畈榭磁c該文件相關(guān)的進(jìn)程和模塊信息:
sudo lsof /sys/path/to/file
sudo lsmod | grep module_name
卸載與該文件相關(guān)的內(nèi)核模塊或驅(qū)動程序,以停止文件的操作??梢允褂靡韵旅钚遁d模塊:
sudo rmmod module_name
修改文件內(nèi)容,并保存更改。
編輯系統(tǒng)配置文件,以在每次啟動時自動加載修改后的內(nèi)核模塊或驅(qū)動程序。具體來說,在/etc/modules-load.d/目錄下創(chuàng)建一個新的模塊加載文件,例如"my_module.conf",并將模塊名稱添加到該文件中。例如:
# /etc/modules-load.d/my_module.conf
my_module
重啟系統(tǒng)以使更改生效。文章來源:http://www.zghlxwxcb.cn/news/detail-754111.html
請注意,對/sys目錄下的文件進(jìn)行不正確的修改可能會導(dǎo)致系統(tǒng)崩潰或其他嚴(yán)重問題。因此,在進(jìn)行任何更改之前,請確保您已經(jīng)完全理解了該文件的含義和作用,并備份好系統(tǒng)數(shù)據(jù)。建議在修改/sys目錄下的文件之前先了解相關(guān)知識和經(jīng)驗。文章來源地址http://www.zghlxwxcb.cn/news/detail-754111.html
到了這里,關(guān)于修改linux的/sys目錄下內(nèi)核參數(shù)、模塊...的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!