亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

蟲蟲首頁| 資源下載| 資源專輯| 精品軟件
登錄| 注冊

您現在的位置是:首頁 > 技術閱讀 >  linux驅動開發(3、自動創建設備節點)

linux驅動開發(3、自動創建設備節點)

時間:2024-06-01

文章目錄

  • udev與mdev


  • 配置mdev熱插拔

  • 常用接口

    • class_create函數

    • class_destroy函數

    • device_create函數

    • device_destroy函數

  • 驅動中的修改


點擊下方閱讀原文可訪問文中超鏈接


在之前的內容中,執行應用程序之前,都要手動使用mknod命令來創建設備節點,這種方法非常的不方便,實際上現在的內核已經提供了一些接口,加上一個用戶空間程序就可以實現自動刪除與自動創建。


udev與mdev

引用維基百科的一段描述:

udev 是Linux kernel 2.6系列的設備管理器。它主要的功能是管理/dev目錄底下的設備節點。它同時也是用來接替devfs及hotplug的功能,這意味著它要在添加/刪除硬件時處理/dev目錄以及所有用戶空間的行為,包括加載firmware時。

udev是一個用戶空間程序,一般用在PC機上,而在嵌入式系統中常用簡化版的mdev來替代,在使用busybox制作根文件系統時,里面就有mdev這個應用程序(需要在配置中勾選),位于/sbin/mdev

配置mdev熱插拔

在根文件系統中的/etc/init.d/rcS文件中添加如下的內容:

echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

常用接口

位于頭文件:include\linux\device.h

class_create函數

此函數用以創建設備類,會在/sys/class/目錄下生成對應的設備類,準確的說它應該是一個宏定義,原型如下:

#define class_create(owner, name) \
({ \
static struct lock_class_key __key; \
__class_create(owner, name, &__key); \
})

class_destroy函數

此函數用以銷毀設備類。

void class_destroy(struct class *cls);

device_create函數

此函數用以創建一個設備,也就對應了/dev/目錄下的一個設備節點。

struct device *device_create(struct class *cls, struct device *parent,
dev_t devt, void *drvdata,
const char *fmt, ...);

device_destroy函數

此函數用以銷毀對應的設備。

void device_destroy(struct class *cls, dev_t devt);

驅動中的修改

在驅動中還需要使用相應的接口來告知內核此驅動的信息,這樣內核才能將信息傳遞給應用層的mdev程序來創建和刪除設備節點。

static dev_t devno;
static struct class *test_char_dev_class;

static int __init test_init(void)
{
/*省略注冊字符設備步驟*/

/*創建設備類*/
test_char_dev_class = class_create(THIS_MODULE,"test_char_dev_class");
/*創建設備*/
device_create(test_char_dev_class,NULL,devno,NULL,"test_char_dev");

return 0;
}

static void __exit test_exit(void)
{
/*銷毀設備*/
device_destroy(test_char_dev_class,devno);
/*銷毀設備類*/
class_destroy(test_char_dev_class);

/*省略字符設備的注銷步驟*/
}

完成以上的操作后,每次裝載完驅動就可以不用再手動使用mknod命令來創建設備節點了,卸載驅動后對應的設備節點也會自動刪除。

測試源碼獲取:點我

主站蜘蛛池模板: 海原县| 远安县| 视频| 石河子市| 招远市| 南溪县| 含山县| 蕲春县| 永泰县| 拉萨市| 鄱阳县| 慈溪市| 鄂托克前旗| 凯里市| 黄平县| 荣昌县| 广昌县| 永平县| 南召县| 尼勒克县| 安顺市| 城市| 通山县| 南平市| 普格县| 肥东县| 靖边县| 平罗县| 房山区| 白沙| 华坪县| 特克斯县| 钟山县| 东至县| 岐山县| 长汀县| 沿河| 兰考县| 阿图什市| 许昌市| 尚志市|