Linux键盘驱动范例
键盘在所有的驱动之中最为简单的一种,但它却包含了驱动的基本框架,对以后继续深入学习其他复杂的驱动大有裨益,以下便为你逐步剖析驱动的开发。采用的是查询方式。转载请注明出处:qiangren.blog.edu.cn
一.内核模块的注册和撤销
在加载模块的时候,首先运行的是内核模块的注册函数。它的功能包括内核注册设备以及变量的初始化。
static int head,tail;
int _init Keypad_init(void)
{
int result;
result=register_chrdev(KEY_LED_MAJOR,KEY_LED_NAME,&Keypad_fops);
Keypad_clear();
init_waitqueue_head(&queue);
prink("%s %s initialized.\n",KEY_LED_NAME,KEY_LED_VERSION);//不能用prinf
return 0;
}
module_init(Keypad_init);//加载模块
void _exit Keypad_cleanup(void)
{
del_timer(&timer);
unregister_chrdev(KEY_LED_MAJOR,KEY_LED_NAME);
prink("Keypad driver removed \n");
}
module_exit(Keypad_cleanup);//卸载该模块
二.虚拟文件系统与硬件驱动的接口
static struct file_operations Keypad_fops={
open:Keypad_open,
read:Keypad_read,
poll:Keypad_poll,
fasync:Keypad_fasync,
release:Keypad_release,
};
该接口定义完之后一些便是对这几个具体函数的实现了!现在我们一起进入下一步吧,是不是觉得其实没什么难度的呢?别那么早开心着呢?这几个函数的实现时候,涉及到很多技术,包括内核定时器,*等待队列的具体实现(阻塞方式),异步方式的具体实现技巧,循环队列。看到这么多技术你是否感到很兴奋呢?以下本人将以通俗的方式为你讲解,希望你能理解。
三.设备的打开操作接口函数具体实现(Keypad_open)
设备打开一般包括两大操作,一是完成设备的初始化,二是设备引用计数器加1
static int Keypad_open(struct inode *inode,struct file *filp)
{
read_xy();
try_module_get(THIS_MODULE);//此函数为Linux 2.6内核增加的,不同于2.4内核,功能是计数器的值加1
return 0;
}
static void read_xy(void)
{
&nbs
相关文档:
errno变量(需include errno.h)会被赋一个整数值,不同的值表示不同的含义,
可以通过查看该值推测出错的原因。但是errno是一个数字,代表的具体含义
还要到errno.h中去阅读宏定义。有下面几种方法可以方便的得到错误信息
(一)
#include <stdio.h>
void perror(const char *s)
perror()用来将上一个函数发生错误的 ......
http://hi.baidu.com/j_fo/blog/item/7412bb018deab109728da572.html
Linux内核 irq/soft irq/tasklet/同步
2009-10-08 21:22
1.中断处理程序结束之前,不允许产生相同的中断事件;(禁用PIC上该中断,但可以产生其他中断)
2.中断处理程序、软中断、tasklet既不可被抢占也不能被阻塞,最多发生中断嵌套;
3.执行中断 ......
http://dbus.freedesktop.org/doc/dbus-tutorial.html
D-Bus Tutorial
Havoc
Pennington
Red Hat, Inc.
<hp@pobox.com
>
David
Wheeler
John
Palmieri
Red Hat, Inc.
<johnp@redhat.com
>
Colin
Walters
Red Hat, Inc.
<walters@redhat.com
>
Version 0.5.0
Table of Contents
......
查看系统中开放的端口,关闭不需要的端口和程序,如下例中操作流程:
1. 查看对外开启的端口:
[root@mail ~]# nmap 127.0.0.1 #注:此处应该换作公网ip
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2010-04-20 11:06 CST
Interesting ports on 127.0.0.1
Not shown: 1668 closed ports
PORT &nb ......
7.5. Tasklets 机制
上一页
第 7 章 时间, 延时, 和延后工作
下一页
http://lsec.cc.ac.cn/~tengfei/doc/ldd3/index.html
Linux 设备驱动 Edition 3
7.5. Tasklets 机制
另一个有关于定时问题的内核设施是 tasklet 机制. 它大部分用在中断管理(我们将在第 10 章再次见到). ......