摘要: 在这里首先需要说明,这一系列的文章可能跨度比较大,比如按照正常的逻辑,写完怎样搭建开发环境之后,就该接着讲一个helloworld的内核模块,然 后才是这一篇字符驱动的文章,但是我不想重复的去写那么多东西,至于有这方面需求的博友,可以随便google一下就能查到很多类似的文章,因为我是希望 linu 阅读全文
posted @ 2016-04-06 15:36 OracleLoyal 阅读(477) 评论(0) 推荐(0) 编辑
摘要: 内核中每个字符设备都对应一个 cdev 结构的变量,下面是它的定义: linux-2.6.22/include/linux/cdev.h struct cdev { struct kobject kobj; // 每个 cdev 都是一个 kobject struct module *owner; 阅读全文
posted @ 2016-04-06 15:27 OracleLoyal 阅读(430) 评论(0) 推荐(0) 编辑
摘要: 开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点(包括ldd3中不少例子也是这样),实际上现在Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点。 内核中定义了struct class结构体,顾 阅读全文
posted @ 2016-04-06 15:25 OracleLoyal 阅读(2043) 评论(0) 推荐(0) 编辑
摘要: 编译模块安装之后会在/sys/class/看到hello_char_class 以及目录内的chrdev,同时也会在/dev下看到udev为我们建立的节点chrdev. 阅读全文
posted @ 2016-04-06 14:58 OracleLoyal 阅读(2407) 评论(0) 推荐(0) 编辑
摘要: 首先需要了解sys节点和linux驱动编程的知识,在linux内核<linux/>下有着对应的实现。本例实现创建sys节点,外围程序通过input子系统控制鼠标位置。 第一步编写驱动代码,创建sys节点: 你就会看到你input设备上报的坐标,打印信息如下: 阅读全文
posted @ 2016-04-06 10:20 OracleLoyal 阅读(763) 评论(0) 推荐(0) 编辑
摘要: 本文将直接了当的带你进入linux的模块编译。当然在介绍的过程当中,我也会添加一些必要的注释,以便初学者能够看懂。之所以要写这篇文章,主要是因为 从书本上学的话,可能要花更长的时间才能学会整个过程,因为看书的话是一个学习过程,而我这篇文章更像是一个培训。所以实践性和总结性更强。通过本文你将 会学到编 阅读全文
posted @ 2016-04-06 09:40 OracleLoyal 阅读(191) 评论(0) 推荐(0) 编辑
摘要: .c源码: 1 #include <linux/module.h> /* 引入与模块相关的宏 */ 2 #include <linux/init.h> /* 引入module_init() module_exit()函数 */ 3 #include <linux/moduleparam.h> /* 阅读全文
posted @ 2016-04-06 09:31 OracleLoyal 阅读(162) 评论(0) 推荐(0) 编辑