udev和mdev学习总结doc

合集下载

mdev 原理

mdev 原理

mdev原理
mdev是busybox自带的一个简化版的udev,适合于嵌入式的应用场合。

其具有使用简单的特点。

它的作用,就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需的节点文件。

在以busybox为基础构建嵌入式Linux 的根文件系统时,使用它是最优的选择。

mdev的工作原理如下:
1.在系统启动时,mdev会扫描sysclass和sysblock两个目录下的所有类设备目
录,如果在目录中含有名为dev的文件,且文件中包含的是设备号,则mdev 就利用这些信息为这个设备在dev下创建设备节点文件。

2.当有热插拔事件发生时,内核会向mdev发送一个hotplug事件。

mdev会根
据事件中的ACTION和DEVPATH来确定此次事件的动作以及影响了哪个设备。

如果事件的ACTION是add,则mdev会在dev下创建设备节点文件;如果事件的ACTION是remove,则mdev会删除设备节点文件。

android udev 规则

android udev 规则

android udev 规则Android udev规则是一个用于设备管理的强大工具。

它允许用户自定义设备的权限、操作和行为,从而更好地与Android设备进行交互。

在本文中,我们将一步一步地回答关于Android udev规则的一些常见问题,并探索其用法和优势。

第一步:什么是udev规则?udev是一种设备管理机制,用于在linux内核中添加、删除和修改设备。

udev规则是用于自定义和配置设备管理的一种方法。

它允许用户定义设备的权限、操作和行为,以及在特定事件发生时触发特定的操作。

第二步:为什么我们需要Android udev规则?在Android设备上,udev规则对于开发者和用户来说都非常重要。

它允许用户控制设备的权限,例如访问USB设备或调试设备。

同时,它还可以帮助开发者在设备连接或断开时自动执行某些任务,如运行脚本、安装应用程序等。

因此,Android udev规则在提高用户和开发者体验方面起到了重要作用。

第三步:如何编写Android udev规则?编写Android udev规则并不复杂,以下是一些基本步骤:1. 创建udev规则文件:首先,您需要在`/etc/udev/rules.d/`目录下创建一个新的文件,命名为`android.rules`(或任何您喜欢的名称)。

2. 定义设备过滤器:在规则文件中,您可以使用各种属性来定义设备过滤器,以确定哪些设备会触发规则。

例如,您可以使用设备的厂商ID、产品ID或子系统等参数来过滤设备。

3. 定义规则动作:一旦设备被过滤,您可以定义将在特定事件发生时执行的动作。

例如,您可以运行一个脚本、挂载设备、更改设备权限等。

4. 重载udev规则:当您完成规则文件的编写后,可以通过执行`udevadm control reload-rules`命令来重新加载udev规则,以使更改生效。

第四步:Android udev规则的示例用途下面是一些常见的Android udev规则的示例用途:1. 自动安装驱动程序:当特定设备被连接到Android设备时,您可以设置规则以自动安装相应的驱动程序,以确保设备正常运行。

UDS最全内容总结【范本模板】

UDS最全内容总结【范本模板】

目录前言 (2)UDS 的7种服务及肯定响应和否定响应的形式 (3)$10诊断会话 (5)$3E待机握手 (6)$27安全访问 (7)$22读数据 (8)$2E写数据 (8)$19 读DTC (9)$14清除DTC (10)统一诊断服务(Unified diagnostic services ,UDS)(一) (11)Diagnostic request的格式: (11)统一诊断服务(Unified diagnostic services ,UDS) (二) (12)Diagnostic Session Control (0x10) (13)诊断response的格式:Diagnostic Session Control (13)ECU Reset 诊断request的格式 (13)Security Access (0x27) (14)统一诊断服务(Unified diagnostic services , UDS) (三) (14)Tester Present (0x3E) (15)Control DTC Setting (0x85) (16)Response On Event (0x86) (16)Link Control (0x87) (16)统一诊断服务(Unified diagnostic services ,UDS) (四) (17)Read Data By Identifier (0x22) (17)0x23服务的请求格式0x23 (17)统一诊断服务(Unified diagnostic services ,UDS) (五) (18)0x14:Clear Diagnostic Information (18)0x19:Read DTC Information (18)统一诊断服务(Unified diagnostic services ,UDS)(六) (19)Input Output Control By Identifier (0x2F) (19)Routine Control (0x31) (20)统一诊断服务(Unified diagnostic services ,UDS)(七) (21)Request Download (0x34): (22)Transfer Data(0x36): (22)Request Transfer Exit(0x37): (23)基于CAN总线实现的UDS诊断(DoCAN) (23)前言UDS协议即ISO14229,是Unified Diagnostic Services,统一诊断服务,是诊断服务的规范化标准,比如读取故障码应该向ECU发什么指令,读数据流又是发什么指令.OBD是关注车辆售后实时排放的理念形成的行业规范,而UDS是诊断服务的统一化规范,只是应用层的规范。

udev规则生效

udev规则生效

udev规则生效什么是udev规则?udev是Linux系统中的一个设备管理机制,它负责在设备插入或移除时自动创建或删除设备节点。

udev规则是一组用于定义如何处理设备事件的规则,可以根据设备的属性、类型、ID等信息来触发特定的操作。

udev规则通常用于识别和配置硬件设备,如USB驱动器、网卡、打印机等。

通过编写自定义的udev规则,可以实现自动挂载USB设备、设置网络接口、加载特定驱动程序等功能。

编写udev规则要编写一个udev规则,需要以下几个步骤:1. 确定需要匹配的设备属性首先,需要确定要匹配的设备属性。

可以使用lsusb、lspci等命令查看设备信息,并确定需要使用哪些属性来识别设备。

例如,我们想编写一个规则来识别一个特定厂商ID和产品ID的USB存储设备。

通过运行lsusb命令,我们可以找到这些属性:Bus 001 Device 003: ID 0781:5583 SanDisk Corp.这里的厂商ID是0781,产品ID是5583。

2. 创建udev规则文件在Linux系统中,udev规则文件通常存储在/etc/udev/rules.d/目录下。

可以创建一个新的规则文件,以.rules为后缀,并命名为适当的名称。

例如,我们创建一个名为99-usb-storage.rules的文件来匹配USB存储设备。

sudo touch /etc/udev/rules.d/99-usb-storage.rules3. 编写udev规则打开刚创建的规则文件,并使用文本编辑器编写规则。

每条规则由以下几个部分组成:•规则匹配条件:使用属性来匹配设备。

•规则动作:定义在匹配条件满足时要执行的操作。

对于USB存储设备,我们可以编写如下规则:ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0781", ATTRS{idProduct}==" 5583", RUN+="/path/to/script.sh"这个规则包含以下几个部分:•ACTION=="add":指定当设备插入时触发该规则。

Linux设备模型 热插拔、mdev 与 firmware

Linux设备模型 热插拔、mdev 与 firmware

Linux设备驱动程序学习(15)-Linux设备模型(热插拔、mdev 与firmware)热插拔有2 个不同角度来看待热插拔:从内核角度看,热插拔是在硬件、内核和内核驱动之间的交互。

从用户角度看,热插拔是内核和用户空间之间,通过调用用户空间程序(如hotplug、udev 和mdev)的交互。

当需要通知用户内核发生了某种热插拔事件时,内核才调用这个用户空间程序。

现在的计算机系统,要求Linux 内核能够在硬件从系统中增删时,可靠稳定地运行。

这就对设备驱动作者增加了压力,因为在他们必须处理一个毫无征兆地突然出现或消失的设备。

热插拔工具当用户向系统添加或删除设备时,内核会产生一个热插拔事件,并在/proc/sys/kernel/hotplug文件里查找处理设备连接的用户空间程序。

这个用户空间程序主要有hotplug:这个程序是一个典型的bash 脚本,只传递执行权给一系列位于/etc/hot-plug.d/ 目录树的程序。

hotplug 脚本搜索所有的有 .hotplug 后缀的可能对这个事件进行处理的程序并调用它们, 并传递给它们许多不同的已经被内核设置的环境变量。

(基本已被淘汰,具体内容请参阅《LDD3》)udev :用于linux2.6.13或更高版本的内核上,为用户空间提供使用固定设备名的动态/dev目录的解决方案。

它通过在sysfs 的/class/ 和/block/ 目录树中查找一个称为dev 的文件,以确定所创建的设备节点文件的主次设备号。

所以要使用udev,驱动必须为设备在sysfs中创建类接口及其dev属性文件,方法和sculld模块中创建dev属性相同。

udev的资料网上十分丰富,我就不在这废话了,给出以下链接有兴趣的自己研究:mdev:一个简化版的udev,是busybox所带的程序,十分适合嵌入式系统。

因为hotplug现在也在被慢慢地淘汰,udev不再依赖hotplug了,所以这里不再介绍;udev较mdev复杂,不太适合嵌入式使用。

android udev 规则

android udev 规则

android udev 规则摘要:1.Android UDEV 简介2.Android UDEV 规则的作用3.Android UDEV 规则的编写方法4.Android UDEV 规则的应用实例5.总结正文:1.Android UDEV 简介Android UDEV(User-space DEVelopment)是一种在Android 系统中运行的用户空间设备驱动程序开发方法。

与传统的内核空间设备驱动程序相比,Android UDEV 允许开发者更轻松地开发和维护设备驱动程序,同时提高了系统的可移植性和可扩展性。

2.Android UDEV 规则的作用Android UDEV 规则主要用于描述如何将用户空间设备驱动程序与内核空间设备驱动程序进行交互。

通过这些规则,开发者可以方便地实现设备驱动程序的动态加载、卸载和配置,从而简化设备驱动程序的开发和维护过程。

3.Android UDEV 规则的编写方法Android UDEV 规则采用脚本语言编写,通常为Python 或Shell 脚本。

编写Android UDEV 规则时,需要遵循以下步骤:(1)引入所需的库和模块:在脚本的开头,需要引入Android UDEV 库和相关模块,以便使用其中的函数和变量。

(2)定义设备驱动程序:接下来,需要定义设备驱动程序的相关信息,如设备节点、设备类型、设备驱动程序入口等。

(3)编写规则:根据设备驱动程序的定义,编写规则以实现设备驱动程序的加载、卸载和配置等功能。

(4)执行规则:在脚本的最后,需要执行编写的规则,以实现设备驱动程序的动态加载、卸载和配置。

4.Android UDEV 规则的应用实例以下是一个简单的Android UDEV 规则应用实例,用于加载一个用户空间设备驱动程序:```bash#!/bin/sh# 引入Android UDEV 库和模块import android.os.ParcelFileDescriptorimport erManagerimport bDeviceimport bDeviceConnection# 定义设备驱动程序device_node = "/dev/my_device"device_type = "my_device_type"device_driver = "my_device_driver"# 编写规则rule = """android.os.ParcelFileDescriptor fd = newandroid.os.ParcelFileDescriptor();erManager.get(fd);if (fd.get()!= null) {fd.close();}UsbDevice device = UsbDevice.getDevice(device_node);if (device!= null) {device.close();}UsbDeviceConnection connection =UsbDevice.openDevice(device_node);if (connection!= null) {connection.close();}UserManager.get(device_type, device_driver, fd);"""# 执行规则execute(rule)```5.总结Android UDEV 是一种在Android 系统中运行的用户空间设备驱动程序开发方法。

udev env 规则

udev env 规则**一、了解udev简介**udev是一个用于管理系统设备和驱动的Linux内核模块。

它能够根据设备的唯一标识符(如UEFI、MAC地址等)动态地加载和卸载驱动,实现对设备的自动识别和管理。

udev的环境变量配置对于系统的设备管理至关重要。

**二、掌握udev环境变量配置**1.配置udev环境变量在Linux系统中,可以通过在`/etc/udev/udev.conf`文件中配置udev的环境变量。

主要配置项包括:- `ACTION`:设置设备动作,如`KERNEL=="module",RUN+="modprobe $module"`。

- `SUBSYSTEM`:设置设备子系统,如`SUBSYSTEM=="usb", ATTRS{idVendor}=="0x1234", ATTRS{idProduct}=="0x5678"`。

2.编写udev规则udev规则文件位于`/etc/udev/rules.d/`目录下。

规则文件以`.rules`为扩展名,例如`01-mydevice.rules`。

编写规则时,可以使用以下语法:- `ACTION`:设置设备动作,如`ACTION=="add",KERNEL=="module", RUN+="modprobe $module"`。

- `ATTRS`:设置设备属性,如`ATTRS{idVendor}=="0x1234", ATTRS{idProduct}=="0x5678"`。

- `DEVICE`:设置设备路径,如`DEVICE=="/dev/ttyUSB0"`。

**三、实践udev规则编写**以一个USB设备为例,编写udev规则使其在插入时自动加载驱动。

UDEV详细解惑

本人理解的UDEV是这样的:首先UDEV是运行在用户层的,所以要跟内核通信,而且是一直在监听内核的信息,所以写一个socket套接字,然后加入到线程里面去,用来接收内核所传的信息,然后就都是上层的一些处理了,文件分区、监测设备的插入拔出、挂载等…如果你使用Linux比较长时间了,那你就知道,在对待设备文件这块,Linux改变了几次策略。

在Linux早期,设备文件仅仅是是一些带有适当的属性集的普通文件,它由mknod命令创建,文件存放在/dev目录下。

后来,采用了devfs,一个基于内核的动态设备文件系统,他首次出现在2.3.46 内核中。

Mandrake,Gentoo等Linux分发版本采用了这种方式。

devfs创建的设备文件是动态的。

但是devfs有一些严重的限制,从2.6.13版本后移走了。

目前取代他的便是文本要提到的udev--一个用户空间程序。

目前很多的Linux分发版本采纳了udev的方式,因为它在Linux设备访问,特别是那些对设备有极端需求的站点(比如需要控制上千个硬盘)和热插拔设备(比如USB摄像头和MP3播放器)上解决了几个问题。

下面我我们来看看如何管理udev设备。

实际上,对于那些为磁盘,终端设备等准备的标准配置文件而言,你不需要修改什么。

但是,你需要了解udev配置来使用新的或者外来设备,如果不修改配置,这些设备可能无法访问,或者说Linux可能会采用不恰当的名字,属组或权限来创建这些设备文件。

你可能也想知道如何修改RS-232串口,音频设备等文件的属组或者权限。

这点在实际的Linux实施中是会遇到的。

为什么使用udev在此之前的设备文件管理方法(静态文件和devfs)有几个缺点:* 不确定的设备映射。

特别是那些动态设备,比如USB设备,设备文件到实际设备的映射并不可靠和确定。

举一个例子:如果你有两个USB 打印机。

一个可能称为/dev/usb/lp0,另外一个便是/dev/usb/lp1。

udev文件的写法

udev文件的写法1. 规则文件位置:udev规则文件通常存放在`/etc/udev/rules.d/`目录下,以`.rules`为后缀。

可以在该目录下创建新的规则文件或编辑已有的规则文件。

2. 规则文件的命名:规则文件的命名可以是任意的,但建议使用描述性强的名称,以便于理解和管理。

命名时应该遵循一定的命名规范,例如以数字开头,以`.rules`结尾。

3. 规则文件的语法:udev规则文件采用类似于shell脚本的语法。

每条规则由若干个键值对组成,用空格或制表符分隔。

常见的键包括`KERNEL`、`SUBSYSTEM`、`ATTRS`等,用于匹配设备的属性。

4. 规则文件的编写:在规则文件中,可以使用条件语句、变量、函数等来实现复杂的规则。

以下是一个示例规则文件的写法:# 示例规则文件(例如,99-mydevice.rules)。

# 匹配设备的子系统和属性。

SUBSYSTEM=="usb", ATTRS{idVendor}=="1234",ATTRS{idProduct}=="5678", MODE="0666", SYMLINK+="mydevice"# 匹配设备的内核名称。

KERNEL=="sda", ENV{DEVTYPE}=="disk",RUN+="/path/to/script.sh"上述示例中,第一条规则匹配USB设备的特定厂商和产品ID,设置设备的权限和创建一个符号链接。

第二条规则匹配内核设备名称为"sda"的磁盘设备,当该设备出现时执行一个脚本。

5. 规则文件的加载:在修改或创建udev规则文件后,需要重新加载udev规则才能使其生效。

可以使用`udevadm control --reload-rules`命令重新加载规则文件,或者重启udev服务。

udev


问:udev支持什么内核?
答:udev只支持linux-2.6内核,因为udev严重依赖于sysfs文件系统提供的信息,而sysfs文件系统只在linux-2.6内核中才有。
问:udev是一个内核程序还是用户程序?
答:udev是一个用户程序(user-mode daemon)。
问:udev和devfs有什么差别?
近来,通过安装和升级linux-2.6内核,发现这个问题已经可以通过2.6内核新的sysfs文件系统和udev程序得到解决。下面就是我在学习了udev配置后的一点心得。我喜欢用FAQ的形式来说明。
问:什么是udev?
答:udev是一种工具,它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。设备文件通常放在/dev目录下。使用udev后,在/dev目录下就只包含系统中真正存在的设备。
答:udev能够实现所有devfs实现的功能。但udev运行在用户模式中,而devfs运行在内核中。据称:devfs具有一些不太容易解决的先天缺陷。
问:udev的配置文件放在哪里?
答:udev是一个用户模式程序。它的配置文件是/etc/udev/udev.conf。这个文件一般缺省有这样几项:
# ls /dev/bruce* -hl
lrwxrwxrwx 1 root root 10 Aug 17 20:11 /dev/bruce3-1 -> bruce-sda1
brw------- 1 root root 8, 1 Aug 17 20:11 /dev/bruce-sda1
1g,将2G的U盘命名为2g.设备名不会再变化.使用和管理都会很方便.
二.udev安装
1.Turbolinux发行版
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

udev和mdev学习总结篇一:linux环境编程福建农林大学金山学院课程名称:姓名:系:专业:年级:学号:指导教师:职称:实验报告Linux环境编程信息与机电工程计算机科学与技术XX级讲师XX年 5 月 26 日实验项目列表福建农林大学金山学院实验报告系:信息与机电工程系专业:计算机科学与技术年级:XX姓名:学号:实验室号_ _607_____ 计算机号实验时间:指导教师签字:成绩:实验一: gcc编译器(验证性、2学时)一、实验目的:1)熟悉Shell操作环境。

2)掌握在Linux下的C语言代码编译运行的方法。

3)初步了解C语言库函数与Linux系统调用。

二、实验内容1、编写能输出“Hello world!”问候语的C程序,并在终端中编译、执行。

要求记录所使用的命令及结果。

#include #include int main() {printf("Hello World\n"); exit(0); }2、编写程序p.c,其功能是从键盘输入两个实数,输出这两个实数的平方和,生成可执行文件为pow。

#include"stdio.h" main() {float x,y;scanf("%f %f",&x,&y); printf("%6.3f",x*x+y*y); }3、教材第9页静态库实验,记录操作步骤与结果。

分析所出现的问题及如何解决的?4、编写一个C程序并设置其在后台执行,其功能是在一段时间后(可自行设置),在屏幕上显示信息:Time for play!,写出相应的程序、命令及结果。

#include main() {sleep(6);printf("Time for Play!\n");}5、编制一段程序,使用系统调用fork( )创建两个子进程,这样在此程序运行时,在系统中就有一个父进程和两个子进程在活动。

让每一个进程在屏幕上显示一个字符:父进程显示字符a,子进程分别显示字符 b和字符c。

试观察、记录并分析屏幕上,进程调度的情况。

#include #include #include #include main(){if ( fork() == 0 ) // 子进程1 {printf("b\n");exit(0); } else{if ( fork() == 0 )// 子进程2{printf("c\n"); exit(0);}printf("a\n");// 父进程exit(0); }}三、实验结果与讨论(根据实验结果回答下列问题)1、你所使用的实验环境是什么?请写出Linux的平台、内核版本号。

VMware Workstation2、在Linux中,标准设备文件有哪些?这些设备文件在哪个目录? Devfsudevmdev3、对于上述各编程题目中所用到了的各个头文件,请找到它们的位置。

/user/include 四、总结篇二:设备文件系统剖析与使用设备文件系统剖析与使用设备文件系统剖析与使用嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。

一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。

如有错误之处,谢请指正。

? 共享资源,欢迎转载:一、什么是Linux设备文件系统首先我们不看定义,定义总是太抽象很难理解,我们先看现象。

当我们往开发板上移植了一个新的文件系统之后(假如各种设备驱动也移植好了),启动开发板,我们用串口工具进入开发板,查看系统/dev目录,往往里面没有或者就只有null、console等几个系统必须的设备文件在这儿外,没有任何设备文件了。

那我们移植好的各种设备驱动的设备文件怎么没有啊?如果要使用这些设备,那不是要一个一个的去手动的创建这些设备的设备文件节点,这给我们使用设备带来了极为的不便(在之前篇幅中讲的各种设备驱动的移植都是这样)。

设备文件系统就是给我们解决这一问题的关键,他能够在系统设备初始化时动态的在/dev目录下创建好各种设备的设备文件节点(也就是说,系统启动后/dev目录下就有了各种设备的设备文件,直接就可使用了)。

除此之外,他还可以在设备卸载后自动的删除/dev下对应的设备文件节点(这对于一些热插拔设备很有用,插上的时候自动创建,拔掉的时候又自动删除)。

还有一个好处就是,在我们编写设备驱动的时候,不必再去为设备指定主设备号,在设备注册时用0来动态的获取可用的主设备号,然后在驱动中来实现创建和销毁设备文件(一般在驱动模块加载和卸载函数中来实现)。

二、设备文件系统的种类设备文件系统有:devfs、udev、mdev等。

mdev是udev的简化版本,是busybox中所带的程序,最适合用在嵌入式系统,而udev一般都用在PC上的Linux中,相对mdev来说要复杂些;devfs是2.4内核引入的,而在2.6内核中却被udev所替代,他们有着共同的优点,只是devfs中存在着一些未修复的bug,作者也停止了对他的维护,最显著的一个区别是:采用devfs时,当一个并不存在的设备节点被打开时,他却还能自动加载对应的驱动,而udev则不能,udev认为当打开并不存在的设备节点时不应该加载对应的驱动模块,因为加载了也没用,浪费系统资源。

三、udev或者mdev设备文件系统的使用1. 首先让大家明白一个问题就是,不管是udev还是mdev,他们就是一个应用程序,就跟其他应用程序一样(比如:Boa服务),配置了就可以使用了。

为了方便起见,我们就使用busybox自带的一个mdev,这样在配置编译busybox 时,只要将mdev的支持选项选上,编译后就包含了mdev设备文件系统的应用(当然你也可以不使用busybox自带的,去下载udev的源码进行编译移植)#cd busybox-1.13.0/#make menuconfigLinux System Utilities --->[*] mdev[*] Support /etc/mdev.conf[*] Support subdirs/symlinks[*] Support regular expressions substitutions when renaming device[*] Support command execution at device addition/removal2. udev或者mdev需要内核sysfs和tmpfs虚拟文件系统的支持,sysfs为udev提供设备入口和uevent通道,tmpfs 为udev设备文件提供存放空间。

所以在/etc/fstab配置文件中添加如下内容(红色部分):# device mount-point type options dump fsck order#----------------------------------------------------------------procfs /proc proc defaults 0 0sysfs /sys sysfs defaults 0 0tmpfs /dev/shm tmpfs defaults 0 0usbfs /proc/bus/usb usbfs defaults 0 0ramfs /dev ramfs defaults 0 0none /dev/pts devpts mode=0622 0 03. 在系统初始化配置文件/etc/init.d/rcS中挂载mdev要用到的sysfs文件系统和tmpfs文件系统,然后启动/sbin目录下的mdev应用对系统的设备进行搜索(红色部分)。

# Mount virtual filesystem/bin/mount -t proc procfs /proc/bin/mount -n -t sysfs sysfs /sys/bin/mount -n -t usbfs usbfs /proc/bus/usb/bin/mount -t ramfs ramfs /dev# Make dir/bin/mkdir -p /dev/pts/bin/mkdir -p /dev/shm/bin/mkdir -p /var/log/bin/mount -n -t devpts none /dev/pts -o mode=0622 /bin/mount -n -t tmpfs tmpfs /dev/shm# Make device nodeecho /sbin/mdev > /proc/sys/kernel/hotplug/sbin/mdev -s4. 在设备驱动程序中加上对类设备接口的支持,即在驱动程序加载和卸载函数中实现设备文件的创建与销毁,例如在之前篇幅的按键驱动中添加(红色部分):#include //设备类用到的头文件static int device_major = DEVICE_MAJOR; //用于保存系统动态生成的主设备号static struct class *button_class; //定义一个类static int __init button_init(void){//注册字符设备,这里定义DEVICE_MAJOR=0,让系统去分配,注册成功后将返回动态分配的主设备号device_major = register_chrdev(DEVICE_MAJOR, DEVICE_NAME, &buttons_fops);if(device_major {printk(DEVICE_NAME " register faild!\n");return device_major;}//注册一个设备类,使mdev可以在/dev/目录下建立设备节点button_class = class_create(THIS_MODULE, DEVICE_NAME);if(IS_ERR(button_class)){printk(DEVICE_NAME " create class faild!\n");return -1;}//创建一个设备节点,取名为DEVICE_NAME(即my2440_buttons)//注意 2.6内核较早版本的函数名是class_device_create,现该为device_createdevice_create(button_class, NULL, MKDEV(device_major, 0), NULL, DEVICE_NAME);return 0;}static void __exit button_exit(void){//注销字符设备uegister_chrdev(device_major, DEVICE_NAME);//删除设备节点,注意 2.6内核较早版本的函数名是class_device_destroy,现该为device_destroydevice_destroy(button_class, MKDEV(device_major, 0));//注销类class_destroy(button_class);}4. 至于mdev的配置文件/etc/mdev.conf,这个可有可无,只是设定设备文件的一些规则。

相关文档
最新文档