udev的支援主要作用是:在驅動初始化的**裡呼叫class_create(...)為該裝置建立乙個class,再為每個裝置呼叫device_create(...);
核心中定義的struct class結構體,顧名思義,乙個struct class結構體型別變數對應乙個類,核心同時提供了class_create(…)函式,可以用它來建立乙個類,這個類存放於sysfs下面,一旦建立好了這個類,再呼叫 device_create(…)函式來在/dev目錄下建立相應的裝置節點。這樣,載入模組的時候,使用者空間中的udev會自動響應 device_create(…)函式,去/sysfs下尋找對應的類從而建立裝置節點。
下面寫乙個字元裝置測試程式:
[cpp]view plain
copy
#include
#include
#include
#include
#include
#include
#include
#include
#define hello_major 250
#define hello_minor 0
#define number_of_devices 2
struct
class *hello_class;
static
struct cdev cdev;
dev_t devno;
static ssize_t hello_read(struct file *file, char __user *buf, size_t count,
loff_t *ppos)
static ssize_t hello_open(struct inode *inode,struct file *file)
static
const
struct file_operations hello_fops = ;
static
int __init hello_init(void)
else
if(ret < 0)
hello_class = class_create(this_module,"hello_char_calss");
if(is_err(hello_class))
device_create(hello_class, null, devno, null, "chrdev");
cdev_init(&cdev, &hello_fops);
cdev.owner = this_module;
cdev_add(&cdev, devno, number_of_devices);
return 0;
} static
void __exit hello_exit(void)
module_init(hello_init);
module_exit(hello_exit);
module_license("gpl");
module_author("weed");
makefile:
ifeq ($(kernelrelease),)
#kernel_dir:=/lib/modules/$(shell uname -r)/build/
kernel_dir:=/usr/src/linux-headers-3.2.0-29-generic-pae
pwd:=$(shell pwd)
modules:
$(make) -c $(kernel_dir) m=$(pwd) modules
modules_install:
$(make) -c $(kernel_dir) m=$(pwd) modules_install
clean:
rm -rf .*.cmd *.ko *.o modules.order module.symvers *mod.c
.phony: modules modules_install clean
else
modules-objs := dev.o
obj-m := dev.o
endif
編譯模組安裝之後會在/sys/class/看到hello_char_class 以及目錄內的chrdev,同時也會在/dev下看到udev為我們建立的節點chrdev.
測試程式:
[cpp]view plain
copy
#include
#include
int main(void)
read(fd,buf,11);
printf("%s",buf);
return 0;
}
測試程式執行後會輸出hello world.,
linux DEVICE ATTR建立裝置節點程式
一 簡述 通過device attr建立裝置節點,可以完成一些簡單的驅動的測試工作,可以向節點做echo cat相關的操作。二 如下 1 驅動 include include include include include 執行cat會呼叫到此函式 static ssize t hello test...
linux dev 下裝置節點建立
linux kernel從 2.6 到 3.0 3.4 devfs已經被拋棄。kernel互動的方式有 sysfs procfs 還有就是 dev下的節點,這些節點是如何被建立出來的呢。研究了半天,在kernel device create 看了遍,也只是發現建立了一堆sysfs節點和一些link。...
自動建立裝置結點
bin bash 1 module name create module device node file if 1 then echo usage install module module name don t need ko suffix exit 1 fiecho remove exist ...