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

Linux I2C Input设备驱动代码的几点理解

最近在做一个I2C键盘的Linux驱动,参考了其他芯片的一些代码,其中陆续发现有些让人迷惑的东西,把我的迷惑及理解在这里加以记录:
1. i2c_driver结构体的probe成员的原型:
     int (*probe)(struct i2c_client *, const struct i2c_device_id *);
即:probe函数被调用时会从上边传两个个参数下来,类型分别是i2c_client和i2c_device_id
在i2c_client->dev.platform_data成员里的内容就是i2c_board_info中你所填充的platfrom_data数据。
2. Probe函数只会在驱动加载时调用一次,之后就不会再调用,而如果设备支持open接口,则可能需要在open接口的实现中做大量的可重入处理,因为open接口可能被多次调用且可能被多线程同时调用。
3. 代码:
   INIT_DELAYED_WORK(&kpad->work, sn7325_work);
实现的功能是将sn7325_work加入到工作队列中,但现在并不立即执行。
4. input_dev中的几个成员的意义如下:
    input->keycodesize: 每一个键盘码的尺寸(字节数)。
    input->keycodemax: keymap中包含多少个键盘码
    input->keycode: 具体的键盘码表(也叫:Key Matrix或Keymap)
5. 代码:
    __set_bit(EV_KEY, input->evbit);
Document里面的示例用了接口 set_bit,二者实际上没什么显著区别,前者不是原子操作,后者是原子操作。
input->evbit是一个标志位集合,通过对它的一些位操作,INPUT子系统可以知道这个设备支持那些event。
__set_bit(kpad->keycode[i] & KEY_MAX, input->keybit);
这行代码是设置input->keybit这个成员的,input->keybit成员实际上和evbit差不多,通过设置keybit可以使INPUT子系统知道这个设备支持那些按键。
6. input_report_key
这个接口会向INPUT子系统上报按键,原型如下:
static inline void input_report_key(struct input_dev *dev, unsigned int code, int value)
{
input_event(dev, EV_KEY, code, !!value);
}
参数:
dev:输入设备
code:要上报的keycode(从keymap中直接或间接得到的某个值)
value:0或1,0表示按键弹起,1表示按键按下
!!value的写法实际上是将int类型转换为bool类型,即最终传递进input_event中的参数要么为0要么为1.
7. input_sync表明时间已经完成
8. keymap如何定义:
可以定义一个宏定义


相关文档:

linux 中设置日期


我们一般使用“date -s”命令来修改系统时间。比如将系统时间设定成2010年3月5日的命令如下。
 
#date -s 03/05/10
 
将系统时间设定成中午8点52分0秒的命令如下。
 
#date -s 08:52:00
 
注意,这里说的是系统时间,是linux由操作系统维护的。
 
在系统启动时,Linux ......

在Linux上找出并解决程序错误的主要方法

来源:http://www.y768.com/content/view/5755/109/
Steve Best(sbest@us.ibm.com)
JFS 核心小组成员,IBM
2002 年 8 月
您可以用各种方法来监控运行着的用户空间程序:可以为其运行调试器并单步调试该程序,添加打印语句,或者添加工具来分析程序。本文描述了几种可以用来调试在 Linux 上运行的程序的方法。我们将回 ......

Linux中的内存分配和释放之mem_init()函数分析

void __init mem_init(void)
{
   unsigned int codepages, datapages, initpages;
   int i, node;
  codepages = &_etext - &_text;//内核代码段的大小。
  datapages = &_end - &__data_start;//内核数据段的大小。
  initpages = &__init_end - &__i ......

Linux下基于端口的服务检查脚本

#!/bin/bash
#program:Usingtostudythe[if...then...fi]program
#dsk2007/10/83:00
#content:Iwillusingthisprogramtoshowyousevices
#1.printtheprogram''sworkinyourscreen
echo "Now,the service of your Linux system will be detect!"
echo "The www,ftp,ssh,and sendmail pop3 will be detect!"
echo ""
#2.w ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号