- 浏览: 125062 次
- 性别:
- 来自: 北京
最新评论
-
yangtaoxf126.com:
public class SimpleJDBC {
publ ...
oracle的sys用户怎么通过jdbc连接
主设备号、次设备号分配并注册主次设备号
设备号是在驱动module中分配并注册的,也就是说,驱动module拥有这个设备号(我的理解),而/dev目录下的设备文件是根据这个设备号创建的,因此,当访问/dev目录下的设备文件时,驱动module就知道,自己该出场服务了(当然是由内核通知)。
在Linux内核看来,主设备号标识设备对应的驱动程序,告诉Linux内核使用哪一个驱动程序为该设备(也就是/dev下的设备文件)服务;而次设备号则用来标识具体且唯一的某个设备。
在内核中,用dev_t类型(其实就是一个32位的无符号整数)的变量来保存设备的主次设备号,其中高12位表示主设备号,低20位表示次设备号。
设备获得主次设备号有两种方式:一种是手动给定一个32位数,并将它与设备联系起来(即用某个函数注册);另一种是调用系统函数给设备动态分配一个主次设备号。
对于手动给定一个主次设备号,使用以下函数:
int register_chrdev_region(dev_t first,
unsigned int -count,
char *name)
其中first是我们手动给定的设备号,count是所请求的连续设备号的个数,而name是和该设备号范围关联的设备名称,它将出现在/proc/devices和sysfs中。
比如,若first为0x3FFFF0,count为0x5,那么该函数就会为5个设备注册设备号,分别是0x3FFFF0、 0x3FFFF1、 0x3FFFF2、 0x3FFFF3、 0x3FFFF4,其中0x3(高12位)为这5个设备所共有的主设备号(也就是说这5个设备都使用同一个驱动程序)。而0xFFFF0、 0xFFFF1、 0xFFFF2、 0xFFFF3、 0xFFFF4就分别是这5个设备的次设备号了。需要注意的是,若count的值太大了,那么所请求的设备号范围可能会和下一个主设备号重叠。比如若first还是为0x3FFFF0,而count为0x11,那么first+count=0x400001,也就是说为最后两个设备分配的主设备号已经不是0x3,而是0x4了!用这种方法注册设备号有一个缺点,那就是若该驱动module被其他人广泛使用,那么无法保证注册的设备号是其他人的Linux系统中未分配使用的设备号。
对于动态分配设备号,使用以下函数:
int alloc_chrdev_region(dev_t *dev,
unsigned int -firstminor,
unsigned int -count,
char *name)
该函数需要传递给它指定的第一个次设备号firstminor(一般为0)和要分配的设备数count,以及设备名,调用该函数后自动分配得到的设备号保存在dev中。动态分配设备号可以避免手动指定设备号时带来的缺点,但是它却也有自己的缺点,那就是无法预先在/dev下创建设备节点,因为动态分配设备号不能保证在每次加载驱动module时始终一致(其实若在两次加载同一个驱动module之间并没有加载其他的module,那么自动分配的设备号还是一致的,因为内核分配设备号并不是随机的,但是书上说某些内核开发人员预示不久的将来会用随机方式进行处理),不过,这个缺点可以避免,因为在加载驱动module后,我们可以读取/proc/devices文件以获得Linux内核分配给该设备的主设备号。
与主次设备号相关的3个宏:
MAJOR(dev_t dev):根据设备号dev获得主设备号;
MINOR(dev_t dev):根据设备号dev获得次设备号;
MKDEV(int major, int minor):根据主设备号major和次设备号minor构建设备号。
设备号是在驱动module中分配并注册的,也就是说,驱动module拥有这个设备号(我的理解),而/dev目录下的设备文件是根据这个设备号创建的,因此,当访问/dev目录下的设备文件时,驱动module就知道,自己该出场服务了(当然是由内核通知)。
在Linux内核看来,主设备号标识设备对应的驱动程序,告诉Linux内核使用哪一个驱动程序为该设备(也就是/dev下的设备文件)服务;而次设备号则用来标识具体且唯一的某个设备。
在内核中,用dev_t类型(其实就是一个32位的无符号整数)的变量来保存设备的主次设备号,其中高12位表示主设备号,低20位表示次设备号。
设备获得主次设备号有两种方式:一种是手动给定一个32位数,并将它与设备联系起来(即用某个函数注册);另一种是调用系统函数给设备动态分配一个主次设备号。
对于手动给定一个主次设备号,使用以下函数:
int register_chrdev_region(dev_t first,
unsigned int -count,
char *name)
其中first是我们手动给定的设备号,count是所请求的连续设备号的个数,而name是和该设备号范围关联的设备名称,它将出现在/proc/devices和sysfs中。
比如,若first为0x3FFFF0,count为0x5,那么该函数就会为5个设备注册设备号,分别是0x3FFFF0、 0x3FFFF1、 0x3FFFF2、 0x3FFFF3、 0x3FFFF4,其中0x3(高12位)为这5个设备所共有的主设备号(也就是说这5个设备都使用同一个驱动程序)。而0xFFFF0、 0xFFFF1、 0xFFFF2、 0xFFFF3、 0xFFFF4就分别是这5个设备的次设备号了。需要注意的是,若count的值太大了,那么所请求的设备号范围可能会和下一个主设备号重叠。比如若first还是为0x3FFFF0,而count为0x11,那么first+count=0x400001,也就是说为最后两个设备分配的主设备号已经不是0x3,而是0x4了!用这种方法注册设备号有一个缺点,那就是若该驱动module被其他人广泛使用,那么无法保证注册的设备号是其他人的Linux系统中未分配使用的设备号。
对于动态分配设备号,使用以下函数:
int alloc_chrdev_region(dev_t *dev,
unsigned int -firstminor,
unsigned int -count,
char *name)
该函数需要传递给它指定的第一个次设备号firstminor(一般为0)和要分配的设备数count,以及设备名,调用该函数后自动分配得到的设备号保存在dev中。动态分配设备号可以避免手动指定设备号时带来的缺点,但是它却也有自己的缺点,那就是无法预先在/dev下创建设备节点,因为动态分配设备号不能保证在每次加载驱动module时始终一致(其实若在两次加载同一个驱动module之间并没有加载其他的module,那么自动分配的设备号还是一致的,因为内核分配设备号并不是随机的,但是书上说某些内核开发人员预示不久的将来会用随机方式进行处理),不过,这个缺点可以避免,因为在加载驱动module后,我们可以读取/proc/devices文件以获得Linux内核分配给该设备的主设备号。
与主次设备号相关的3个宏:
MAJOR(dev_t dev):根据设备号dev获得主设备号;
MINOR(dev_t dev):根据设备号dev获得次设备号;
MKDEV(int major, int minor):根据主设备号major和次设备号minor构建设备号。
发表评论
-
__define_initcall 作用
2010-11-25 19:26 1183前言 宏定义__define_initcall ... -
转载--Linux 2.6内核I/O端口资源管理
2010-11-02 15:39 804申明:本文章是对“Linux对I/O端口资源的管理”该文章进行 ... -
linux 2.6线程创建源码分析
2010-11-02 15:09 1090上章讲到线程,现在对线程创建的代码流程分析下。来一步一步揭开她 ... -
linux 2.6进程与线程
2010-11-02 15:09 11911 > 线程和进程的 ... -
linux中ELF加载过程分析
2010-10-19 11:16 1875linux中ELF加载过程分析 - 博青港湾-技术空间 - ... -
Linux设备模型 学习总结
2010-10-13 21:21 910看LDD3中设备模型一章,觉得思维有些混乱。这里从整体的角度来 ... -
linux软中断的实现
2010-10-13 21:12 1051中断服务程序往往都是在CPU关中断的条件下执行的,以避免中断 ... -
zImage / vmlinux / Image生成的流程图
2010-10-13 21:11 2357SRC_TREE :=./ HEADER_PATH ... -
执行程序时内存管理的情景
2010-10-13 21:07 1396do_execve ->open_exec->de ... -
Linux Kernel 2.6进程调度的分析(揭示了几乎所有2.6调度的东西)
2010-10-13 20:16 1869第一章 Kernel 2.4存在的 ... -
ibm developer blog
2010-10-10 10:05 792Linux slab 分配器剖析 http://www.ibm ... -
linux2.6.29 启动过程详细分析
2010-08-12 16:02 1320突然心血来潮,想自己写个模块,于是就把linux2.6.29的 ... -
Linux内存:内存管理的实质
2010-08-04 21:22 666<转 http://linux.chinaunix. ... -
container_of 解析
2010-07-29 22:50 941在学习Linux驱动的过程中,遇到一个宏叫做container ... -
高级IO操作——ioctl
2010-07-23 20:48 1431_IO, _IOR, _IOW, _IOWR 宏的用法与解析 ... -
Linux在控制台下不同类型文件显示不同颜色
2010-07-20 23:47 2511# ~/.bashrc: executed by bash(1 ... -
linux 编译内核 选项出错 综合
2010-07-20 23:24 961具体错误提示见最后面 ... -
ARM SDT下汇编到GNU汇编的转换
2010-07-16 08:52 809将ARM SDT下的汇编码移植到GCC for ARM编译器时 ... -
GNU ARM 汇编指令(转)
2010-07-16 08:50 1591第一部分 Linux下ARM汇编语法尽管在Linux下使用C或 ... -
arm 嵌入式LINUX启动过程
2010-07-11 00:44 3835一位大师级的人物写的,不看要后悔的哟!! ...
相关推荐
很久前接触linux驱动知道主设备号找驱动,次设备号找设备。这句到底怎么理解呢,如何在驱动中实现呢,在介绍该实现之前先看下内核中主次设备号的管理: 二、Linux内核主次设备号的管理 Linux的设备管理是...
该注册函数是早期的注册函数,major是设备的主设备号,name是驱动程序的名称,而fops是默认的file_operations结构(这是只限于file_op
为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号。 一个字符设备或者...
嵌入式红绿灯控制系统(模拟) 一、摘要: 交通信号灯用于道路平面交叉路口,通过对车辆、行人发出行进或停止的指令,使人与人、车与车之间尽可能减少相互干扰,从而提高路口的通行能力,保障路口畅通和安全。...
ble4.0手机模拟蓝牙主设备代码.开发过BLE的app的同学对 BluetoothGatt都不陌生,给设备发送数据,读取数据都是通过BluetoothGatt, BluetoothGatt其实就是中央, BLE设备就是周边来提供数据。
设备驱动程序 网络驱动程序体系结构 设备文件接口 中断处理 在嵌入式操作系统下的设备驱动程序主要是控制和管理下层物理设备的硬件控制器...Linux内核还需要一对被称为主设备号和次设备号的参数,才能唯一地标识设备。
主设备号 –前12位 表示与设备文件相关联的驱动程序 确定设备类型 次设备号—后20位 表示被驱动程序用来辨别操作的是哪个设备 区分同类设备 file_operations 把系统调用和驱动程序关联起来的关键数据结构 ...
不论是主设备号,还是次设备号,在设备驱动中都占据了很重要的地位。那么他在Kernel中是如何操作的?这个数据结构都是通过那些函数可以很容易的在我们写Linux设备驱动模块时被我们所使用呢? 在include/linux/...
打印文件系统的主设备号和次设备号 -x 打印块数设备的主设备号和次设备号 参考实例 查看/mnt目录是不是挂载点: [root@linuxcool ~]# mountpoint /mnt /mnt is a mountpoint 查看/usr/local是不是挂载点:
1.下述关于设备绝对号和相对号的说法中,正确的是 D 。 A.操作系统为每台设备确定一个绝对号和一个相对号 B.用户进程申请设备时应该指定绝对号和相对号 C.申请设备时指定绝对号可提高设备的利用率 D.申请设备时...
调用方式:String id = DeviceUtils.getUniqueDeviceId(this);...根据安卓手机设备特征,生成设备唯一设备号。 注意:因为android 6.0以上系统的权限问题可能导致异常,所以要求主项目targetSdkVersion<23
2.9主设备表sb_main_equipment 14 2.10设备维修计划单sb_maintenance_plan(暂时没用到) 15 2.11设备维修记录sb_maintenance_record 15 2.12设备计量记录sb_measure_record 16 2.13设备调配明细sb_move_detl 16 2.14...
某些主板XP下设备管理ACPI会有黄色感叹号,该驱动可以消除黄色感叹号
该文档主要讲述了linux混杂设备的驱动编程。混杂设备可以理解为一种主设备号固定为10的一种字符设备。但是编程的过程要比字符设备简单很多。可以达到和字符设备一样的效果。有兴趣可以了解一下。
Windows XP 32, 七彩虹,geForce 7025 主板,安装系统后,设备控制器里会出现 SM总线控制器 其他PCI桥设备 两个黄色问号,用资源里的对应目录里的驱动即可。压缩包里有两个目录,smbus对应SM总线控制器,net对应其他...
1. 设备驱动定义 2. 模块 4. 重要的数据结构 5. 字符设备 2. 如果申请的设备编号范围的主设备号为 0,那么表示设备驱动程序请求动态分配一个主设备号
1.当驱动程序需要给定主设备号时,使用函数来注册设备号: 2.驱动程序不需要指定主设备号时,使用函数: 3.注销设备号只要使用同一个函数: 1. /* 字符设备
风铃设备故障登记处理系统分为两个部分:故障登记处理、设备登记...为了安全起见,第一次使用本系统请修改数据库连接,用记事本或DW打开Conn.asp文件修改, 里面有说明。然后到Data目录下修改数据库名为你刚才修改的。
(1)编写 LED 设备驱动程序,驱动程序中手动定义设备名称及主设备号,这个设备号必须是系统尚未使用的设备号,笔者这里暂用 212,你也可以尝试用别的数字。当然最好的方法是动态分配设备号,如果使用这种方法,在/...
所有的驱动程序都应该对应一个具体的...这类设备共享一个主设备号,但次设备号不同所有混杂设备形成一个链表,要访问一个设备时根据次设备号来查找相应的miscdevice。linux中用struct miscdevice来描述一个混杂设备: