/*proc/led节点创建*/
static viod led_create_proc(void){
struct proc_dir_entry*entry;
entry = create_proc_entry(DEVICE_NAME,0,NULL);
if(entry){
entry ->read_proc = led_proc_read;
entry ->write_proc = led_proc_write;
}
}
模块卸载
remove_proc_entry(DEVICE_NAME,0,NULL);
sys 下面产生节点:
/* 访问设置属性方法*/
static ssize_t led_val_show(struct device * dev, struct device_attribute*attr,char*buf);
static ssize_t led_val_store( struct device* dev,struct device_attribute*attr, const char*buf ,size_t count);
static DEVICE_ATTR(val,S_IRUGO}S_IWUSR,led_val_show,led_val_store);
其中sys下面节点是二进制文件,直接读写,会有内核调用show store ,DEVICE_ATTR是定义给了device_attribute的变量,其变量名字为dev_attr_##val(##为替换)。本例中定义了dev-attr_val变量。之后调用:class_create device_create device_create_file产生属性文件,属性文件名字为val
led_class = class_create(THIS_MODULES,DEVICE_NAME);
temp = device_create(led_class,NULL,devID,“%s”,DEVICE_NAME); //devid为设备号
err = device_create_file(temp,&dev_attr_val);
产生了 sys 也产生了dev下面的节点
模块卸载 device_destroy(led_class,MKDEV(led_major,led_minor));
class_destroy(led_class);