易截截图软件、单文件、免安装、纯绿色、仅160KB

linux 字符驱动2


导航:[首页]>[linux内核学习笔记]
目录
 [隐藏]
1 字符设备驱动知识讲解
1.1 描述字符设备基本结构体
1.2 作用
1.3 各字段详解
1.4 操作
1.5 实例
1.5.1 代码
1.5.2 运行
[编辑]字符设备驱动知识讲解
作者:[牛涛]
[编辑]描述字符设备基本结构体
/linux/include/linux/cdev.h
13struct cdev {
14 struct kobject kobj;
15 struct module *owner;
16 const struct file_operations *ops;
17 struct list_head list;
18 dev_t dev;
19 unsigned int count;
20};
[编辑]作用
描述字符设备的基本结构体,用于进一步封装在更大的结构体内,以描述具体的字符设备,例如:
struct xxx_cdev {
const char *name;
struct cdev cdev;
...
}
这样就可以使用xxx_cdev结构描述具体的字符设备了。
[编辑]各字段详解
1、struct kobject kobj;
具体结构参见http://blog.chinaunix.net/u1/55599/showart.php?id=1086478,此处它是一个内嵌的结构,作用是提供引用计数。在调用cdev_init()函数初始化cdev结构体时,会调用kobject_init()函数初始化该数据域。具体见下文cdev_init()函数。
2、struct module *owner;
指出该字符设备所属的模块,一般初始化为THIS_MODULES。
3、struct file_operations *ops;
文件操作指针,也是该结构中最重要的数据域。字符设备驱动的编写主要就是实现file_operations里的一些常用函数,比如read,write,open,release等。关于file_operations结构的详解参见:http://blog.chinaunix.net/u2/73521/showart_1086491.html
4、struct list_head list;
与字符设备文件对应的索引节点链表头,用于收集相同字符设备驱动程序所对应的字符设备文件的索引节点。可能很多设备文件具有相同的设备号,并对应于相同的字符设备。该字段在cdev_alloc()和cdev_init()中进行了初始化。
5、dev_t dev;
代表该字符设备的设备号。dev_t实际上为unsigned int类型,32位。其中高12位为主设备号,低20位为次设备号。如果已知一个设备号,可以使用一下宏分别取得主设备号和次设备号:
MAJOR(dev_t dev) /*取得主设备号*/
MINOR(dev_t dev) /*取得次设备号*/
这两个宏的原型是:/linux/include/linux/kdev_t.h
4#define MINORBITS 20
5#define MINORMASK ((1U << MINORBITS) - 1)


相关文档:

交叉编译基于ARM体系结构的Linux内核

交叉编译基于ARM的Linux内核之前,我们作以下的准备工作:
  1、已经安装好一套你熟悉的交叉编译工具(建立好交叉编译环境)。
  2、选择一套你熟悉的功能足够你使用的内核,当然,这个内核是适合用你的交叉编译工具编译的。
  掌握以上2点,基本上就差不多了。这里默认你知道的一些常用知识----命令� ......

Linux驱动的配置和编译脚本

  在完成了驱动程序代码的编写之后,接下来的任务就是编译。linux内核编译的过程是通过内核源码的根目录和各子目录中的Makefile分级管理的。其中根目录的Makefile是最重要的,它可以看成是其他Makefile最初的入口。它负责定义所有与体系结构无关的变量和目标,读取.config文件,并根据其信息最终生成vmlinux(elf格式的 ......

ubuntu下安装linux fetion

ubuntu 下编译 linux fetion 应用程序demo
注:这里给出界面模块的源代码,而libfetion库(32位)则是以静态库的形式放进去了。
1:建立编译环境:
在终端执行以下命令:
sudo apt-get install automake
sudo apt-get install libc-dev
sudo apt-get install g++
sudo apt-get install libcurl4-openssl-dev
sudo ......

linux与uclinux 内存管理(1)

应该说uClinux同标准Linux的最大区别就在于内存管理,同时也由于uClinux的内存管理引发了一些标准Linux所不会出现的问题。本文将把uClinux内存管理同标准Linux的那内存管理部分进行比较分析。
标准Linux使用的虚拟存储器技术
标准Linux使用虚拟存储器技术,这种技术用于提供比计算机系统中实际使用的物理内存大得多的内存 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号