編譯工具:source insight 4.0
區分上節內容,手動建立裝置節點:
mknod 檔名 型別 主裝置號 次裝置號
怎樣檢視系統裝置節點,在project window中查詢major.h就行
自動建立裝置節點的方法
#define minorbits20
#define minormask((1u << minorbits) - 1)
#define major(dev)((unsigned int) ((dev) >> minorbits))
#define minor(dev)((unsigned int) ((dev) & minormask))
#define mkdev(ma,mi)(((ma) << minorbits) | (mi))
需要(1)
// 引數1---當前模組--this_module
// 引數2---字串,表示類的名字
//返回值--struct class指標型別
class_create(owner, name);
需要(2)
//建立乙個裝置節點
// 引數1---class_create返回的指標
// 引數2---該裝置非父類--一般都是填null
//引數3--裝置號--包含了主裝置號major和次裝置號minor
//引數4---私有資料指標---一般都是填null
//引數5---裝置節點的名字
//結果 /dev/led
// 返回值--struct device指標
struct device *device_create(struct class *cls, struct device *parent,
dev_t devt, void *drvdata,
const char *fmt, ...)
需要(3)釋放---在模組解除安裝函式----與模組載入函式倒著來釋放
下面是驅動程式:
#include #include #include #include #include //設計乙個全域性的裝置物件類
struct s5pv210_led;
//宣告乙個物件
struct s5pv210_led *led_dev;
int led_drv_open(struct inode *inode, struct file *filp)
const struct file_operations led_fops = ;
static int __init led_drv_init(void)
// 1, 申請主裝置號(字元裝置)
led_dev->dev_major = 250;//可以指定裝置號
ret = register_chrdev(led_dev->dev_major, "led_drv", &led_fops);
if(ret < 0)
// 2 ---自動建立裝置節點
//建立乙個類---先記住
// 引數1---當前模組--一般是this_module
// 引數2---字串,表示類的名字
//返回值--struct class指標型別
led_dev->cls = class_create(this_module,"led_cls");
if(is_err(led_dev->cls))
//建立乙個裝置節點
//引數1---class_create返回的指標
//引數2---該裝置非父類--一般都是填null
//引數3--裝置號--包含了主裝置號major和次裝置號minor
//引數4---私有資料指標---一般都是填null
//引數5---裝置節點的名字
//結果 /dev/led
// 返回值--struct device指標
led_dev->dev = device_create(led_dev->cls, null,mkdev(led_dev->dev_major, 0), null, "led");
if(is_err(led_dev->dev))
return 0;
err_class_destroy:
class_destroy(led_dev->cls);
err_unregister:
unregister_chrdev(led_dev->dev_major, "led_drv");
err_free:
kfree(led_dev);
return ret;
}static void __exit led_drv_exit(void)
module_init(led_drv_init);
module_exit(led_drv_exit);
module_license("gpl");
應用程式和makefile和上節類似。
linux驅動開發(3 自動建立裝置節點)
驅動中的修改 在之前的內容中,執行應用程式之前,都要手動使用mknod命令來建立裝置節點,這種方法非常的不方便,實際上現在的核心已經提供了一些介面,加上乙個使用者空間程式就可以實現自動刪除與自動建立。引用維基百科的一段描述 udev 是linux kernel 2.6系列的裝置管理器。它主要的功能是...
Linux核心驅動之自動建立裝置檔案
裝置檔案是非常重要的檔案,是應用程式與裝置驅動交換資料,控制硬體的橋梁。在驅動程式中open release的實現過程中其中的乙個引數struct inode實質就是裝置檔案的索引,沒有這個索引也就沒有後期的各種操作,通常裝置檔案也被稱為裝置檔案節點。因此沒有裝置檔案後期的各種實現都是多餘的。裝置檔...
linux字元驅動之自動建立裝置節點
問 能不能讓系統自動建立裝置節點?答 可以,linux有udev mdev的機制,而我們的arm開發板上移植的busybox有mdev機制,那麼就使用mdev機制來自動建立裝置節點。問 檔案系統裡,在 設定了mdev機制?答 在etc init.d rcs檔案裡有一句 echo sbin mdev ...