分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!
udev實現原理
作者****:李先靜
相對於linux
來說,udev
還是乙個新事物。然而,儘管它03
年才出現,儘管它很低調(j)
,但它無疑已經成為linux
下不可或缺的元件了。udev
是什麼?它是如何實現的?最近研究linux
裝置管理時,花了一些時間去研究udev
的實現。
udev
是什麼?u
是指user space
,dev
是指device
,udev
是使用者空間的裝置驅動程式嗎?最初我也這樣認為,除錯核心空間的程式要比除錯使用者空間的程式複雜得多,核心空間的程式的bug
所引起的後果也嚴重得多,device driver
是核心空間中所佔比較最大的**,如果把這些device driver
中硬體無關的**,從核心空間移動到使用者空間,自然是乙個不錯的想法。
但我的想法並不正確,udev
的文件是這樣說的,
1.dynamic replacement for /dev
。作為devfs
的替代者,傳統的devfs
不能動態分配major
和minor
的值,而major
和minor
非常有限,很快就會用完了。udev
能夠像dhcp
動態分配ip
位址一樣去動態分配major
和minor。
2.device naming
。提供裝置命名持久化的機制。傳統裝置命名方式不具直觀性,像/dev/hda1
這樣的名字肯定沒有boot_disk
這樣的名字直觀。udev
能夠像dns
解析網域名稱一樣去給裝置指定乙個有意義的名稱。
3.api to access info about current system devices
。提供了一組易用的api
去操作sysfs
,避免重複實現同樣的**,這沒有什麼好說的。
我們知道,使用者空間的程式與裝置通訊的方法,主要有以下幾種方式,
1.通過ioperm
獲取操作io
埠的許可權,然後用inb/inw/ inl/ outb/outw/outl
等函式,避開裝置驅動程式,直接去操作io
埠。(沒有用過)
2.用ioctl
函式去操作/dev
目錄下對應的裝置,這是裝置驅動程式提供的介面。像鍵盤、滑鼠和觸控螢幕等輸入裝置一般都是這樣做的。
3.用write/read/mmap
去操作/dev
目錄下對應的裝置,這也是裝置驅動程式提供的介面。像framebuffer
等都是這樣做的。
上面的方法在大多數情況下,都可以正常工作,但是對於熱插撥(hotplug)
的裝置,比如像u
盤,就有點困難了,因為你不知道:什麼時候裝置插上了,什麼時候裝置拔掉了。這就是所謂的hotplug
問題了。
處理hotplug
傳統的方法是,在核心中執行乙個稱為hotplug
的程式,相關引數通過環境變數傳遞過來,再由hotplug
通知其它關注hotplug
事件的應用程式。這樣做不但效率低下,而且感覺也不那麼優雅。新的方法是採用netlink
實現的,這是一種特殊型別的socket
,專門用於核心空間與使用者空間的非同步通訊。下面的這個簡單的例子,可以監聽來自核心hotplug
的事件。
#include
<
stdio
.h>
#include
#include
<
string
.h>
#include
<
ctype
.h>
#include
#include
#include
socket
.h>
#include
#include
#include
<
errno
.h>
static
intinit_hotplug_sock
(void
)/* set receive buffersize */
setsockopt
(hotplug_sock
, sol_socket
, so_rcvbufforce, &
buffersize
, sizeof
(buffersize
));retval
= bind
(hotplug_sock
, (struct
sockaddr
*) &
snl,
sizeof
(struct
sockaddr_nl));if(
retval
< 0)
return
hotplug_sock;}
#define
uevent_buffer_size
2048
intmain
(int
argc
, char
* argv);
recv
(hotplug_sock
, &buf
, sizeof
(buf
), 0);
printf
("%s/n"
, buf);}
return0;}
編譯:gcc -g hotplug.c -o hotplug_monitor
執行後插/
拔u盤,可以看到:
add@/devices/pci0000:00/0000:00:1d.1/usb2/2-1
add@/devices/pci0000:00/0000:00:1d.1/usb2/2-1/usbdev2.2_ep00
add@/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1:1.0
給我老師的人工智慧教程打call!
udev實現原理
udev實現原理 作者 李先靜 相對於linux來說,udev還是乙個新事物。然而,儘管它03年才出現,儘管它很低調 j 但它無疑已經成為linux下不可或缺的元件了。udev是什麼?它是如何實現的?最近研究linux裝置管理時,花了一些時間去研究udev的實現。udev是什麼?u 是指user s...
Udev 基本工作原理
udev 基本工作原理 udev的 http www.kernel.org pub linux utils kernel hotplug udev.html 此外,關於udev的rules規則的撰寫,網上也有很多文章,假如要獲得最準確的版本,能夠在src code的 樹里找到writing udev...
udev檔案系統的使用和基本工作原理分析
udev相關的文章很多,本文的主要目的不是提供乙個完整的教學文件,對其使用,只是給出網上現有的主要資源。著重分析其基本工作原理以及在使用中遇到的一些readme文件沒有明確說明的問題。1基本概念 udev的 此外,關於udev的rules規則的撰寫,網上也有很多文章,如果要獲得最準確的版本,可以在s...