Linux dev 自動建立裝置節點

2021-07-10 01:57:26 字數 2454 閱讀 1428

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 ...