Linux驅動手動繫結和解繫結

2021-07-26 09:42:56 字數 4162 閱讀 6774

linux核心從2.6.13-rc3開始,提供了在使用者空間,可動態的繫結和解繫結裝置和裝置驅動之間關係的功能。在這之前,只能通過insmod(modprobe)和rmmod來繫結和解綁,而且這種繫結和解綁都是針對驅動和所有裝置的。而新的功能可以設定驅動和單個裝置之間的聯絡。

這裡,我們以pci匯流排的nvme ssd為例,首先執行lspci顯示所有的nvme ssd。

# lspci | grep memory

01:00.0 non-volatile memory controller: samsung electronics co ltd device a802 (rev 01)

09:00.0 non-volatile memory controller: samsung electronics co ltd device a802 (rev 01)

有如上這麼多nvme ssd,那麼我們就可以在/dev下看到多個nvme裝置(os啟動後預設載入nvme驅動)。

# ls /dev/nvme*

/dev/nvme0 /dev/nvme0n1p2 /dev/nvme0n1 /dev/nvme0n1p3 /dev/nvme0n1p1 /dev/nvme1 /dev/nvme1n1

同時,對於所有的nvme裝置(這裡我們以pci匯流排bdf號為09:00.0的ssd為例),都可以在nvme驅動下看到。其中,bind和unbind檔案就是涉及到繫結和解綁的關鍵檔案。

/sys/bus/pci/drivers/nvme# ll

total 0

drwxr-xr-x 2 root root 0 jan 4

17:10 ./

drwxr-xr-x 30 root root 0 jan 4

17:10 ../

lrwxrwxrwx 1 root root 0 jan 4

20:49

0000:01:00.0

-> ../../../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/

lrwxrwxrwx 1 root root 0 jan 4

20:49

0000:09:00.0

-> ../../../../devices/pci0000:00/0000:00:03.0/0000:05:00.0/0000:06:0a.0/0000:07:00.0/0000:08:01.0/0000:09:00.0/

--w------- 1 root root 4096 jan 4

20:46 bind

lrwxrwxrwx 1 root root 0 jan 4

20:49

module

-> ../../../../module/nvme/

--w------- 1 root root 4096 jan 4

20:49 new_id

--w------- 1 root root 4096 jan 4

20:49 remove_id

--w------- 1 root root 4096 jan 4

17:10 uevent

--w------- 1 root root 4096 jan 4

17:10 unbind

解綁乙個nvme裝置,只需將裝置的pci匯流排bdf號寫入/sys/bus/pci/drivers/nvme(不同的裝置驅動不同)/unbind即可:

/sys/bus/pci/drivers/nvme#

echo-n

"0000:09:00

.0" > unbind

解除繫結成功,再檢視目錄下檔案,該驅動下不再有對應的裝置。同時,/dev下也沒有對應的nvme裝置了。

/sys/bus/pci/drivers/nvme#

lltotal

0drwxr-xr

-x2root

root

0jan

420:51./

drwxr-xr

-x30root

root

0jan

420:49..

/lrwxrwxrwx

1root

root

0jan

420:49

0000:01:00.0

-> ../

../.

./..

/devices/pci0000:00/0000:00:01

.0/0000:01:00.0/

--w-

----

--1root

root

4096

jan4

20:46

bind

lrwxrwxrwx

1root

root

0jan

420:49

module

-> ../

../.

./..

/module/nvme/--

w---

----

1root

root

4096

jan4

20:49

new_id--

w---

----

1root

root

4096

jan4

20:49

remove_id--

w---

----

1root

root

4096

jan4

20:49

uevent--

w---

----

1root

root

4096

jan4

20:51

unbind

繫結乙個nvme裝置,和解綁類似,將裝置的pci匯流排bdf號寫入/sys/bus/pci/drivers/nvme(不同的裝置驅動不同)/bind:

/sys/bus/pci/drivers/nvme# echo -n "0000:09:00.0" > bind

繫結成功,再次展示該目錄下所有檔案,可以發現對應裝置再次出現。

/sys/bus/pci/drivers/nvme# ll

total 0

/sys/bus/pci/drivers/nvme# ll

total 0

drwxr-xr-x 2 root root 0 jan 5

09:13 ./

drwxr-xr-x 30 root root 0 jan 4

20:49 ../

lrwxrwxrwx 1 root root 0 jan 4

20:49

0000:01:00.0

-> ../../../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/

lrwxrwxrwx 1 root root 0 jan 5

09:13

0000:09:00.0

-> ../../../../devices/pci0000:00/0000:00:03.0/0000:05:00.0/0000:06:0a.0/0000:07:00.0/0000:08:01.0/0000:09:00.0/

--w------- 1 root root 4096 jan 5

09:13 bind

lrwxrwxrwx 1 root root 0 jan 4

20:49

module

-> ../../../../module/nvme/

--w------- 1 root root 4096 jan 4

20:49 new_id

--w------- 1 root root 4096 jan 4

20:49 remove_id

--w------- 1 root root 4096 jan 4

20:49 uevent

--w------- 1 root root 4096 jan 4

20:51 unbind

LINUX驅動手動繫結和解繫結

linux核心從2.6.13 rc3開始,提供了在使用者空間,可動態的繫結和解繫結裝置和裝置驅動之間關係的功能。在這之前,只能通過insmod modprobe 和rmmod來繫結和解綁,而且這種繫結和解綁都是針對驅動和所有裝置的。而新的功能可以設定驅動和單個裝置之間的聯絡。這裡,我們以pci匯流排...

jQuery 繫結 select 聯動 手動觸發

新增資料的時候,可以進行 id change function e 監聽分級的select 然後分別賦值,在一級改變的時候,記得聯動清除二 的結果重新查詢 在編輯資料的時候,需要從資料庫查詢出來每一級的value值,這時候需要賦值給對應的select,但是賦值的過程中,id change funct...

jQuery 事件的繫結和解除繫結

html 老哥,點我 js document ready function 繫結方法,將做出反應的 封裝起來,提公升 的利用率,同時能減少記憶體的占用 on表示繫結事件,off表示解除事件,事件繫結不會覆蓋,如果乙個事件繫結了多個方法,解除預設全部解除,通過逗號隔開指定解除某個方法,老版本on和of...