linux系统下删除sensor语句,linux驱动及g-sensor学习心得.doc

linux驱动及g-sensor学习心得

目 录

1. module_init和module_exit2

2. i2c_driver2

3. linux的input子系统3

3.1 从驱动层到核心层3

3.2 事件处理层的处理3

3.3 设备结点的创建4

3.4 设备的注销和释放4

4. work queue4

5. HAL层开发5

5.1 HAL_MODULE_INFO_SYM5

5.2 对设备文件的访问7

6. bma250功能描述7

6.1 电源管理7

6.2 操作模式7

6.3 电源模式8

6.4 sensor数据8

6.4.1 加速度8

6.4.2 温度8

6.5 偏移补偿9

6.5.1 慢补偿9

6.5.2 快补偿9

6.5.3 手动补偿10

6.5.4 内嵌校准10

6.6 非易失性存储器10

6.7 中断控制器10

6.7.1 new data中断11

6.7.2 slope中断11

6.7.3 tap中断12

6.7.4 orientation中断12

6.7.5 flat中断14

6.7.6 low-g中断15

6.7.7 high-g中断15

7. sensor驱动开发步骤15

附录 bma250寄存器表17

linux驱动及g-sensor学习心得

通过对g-sensor driver code的研究学习,我对linux设备驱动开发和g-sensor有了一定的了解,现将学习所得归纳如下。

1. module_init和module_exit

在pd318 project的g-sensor驱动程序bma250.c中,首先包含了两个头文件和。其中init.h定义了驱动的初始化和退出相关的函数,module.h则定义了内核模块相关的函数、变量和宏。module_init和module_exit这两个宏就被定义在init.h中。

module_init的作用是声明一个驱动程序的入口函数,在init.h中可以看到对这个宏的定义如下:

#define module_init(x)__initcall(x);

#define __initcall(fn) device_initcall(fn)

#define device_initcall(fn)__define_initcall("6",fn,6)

#define __define_initcall(level,fn,id) \

static initcall_t __initcall_##fn##id __used \

__attribute__((__section__(".initcall" level ".init"))) = fn

如果驱动程序要以func函数作为驱动的入口,则可以这样声明:module_init(func)。经过上面的宏处理以后,变成__initcall_func6 __used加入到内核映射的".initcall"区。内核加载的时候,会搜索".initcall"区内的所有条目,并按优先级加载它们。通过module_init声明的驱动程序优先级为6,优先级越小越先加载。

对于驱动入口函数func,一般要加上__init属性,这个宏告诉编译器如果这个模块被编译到内核,则把这个函数放到(.init.text)段。而module_exit用于声明驱动程序的出口,对于驱动出口函数,一般要加上__exit属性,这个宏与__init类似,如果驱动被编译进内核,则__exit宏会忽略清理函数。

在内核初始化后期,所有带__init属性的函数会被放在同一个section里,在用完之后,一次性释放掉整个section。当函数初始化完成后,这个区域可以被清除掉以节约系统内存。

2. i2c_driver

在pd318 project中,g-sensor的PS pin连接VDDIO,操作模式采用带I2C接口的general mode,在bma250.c中可以了解到bma250的i2c_driver的结构定义如下:

struct i2c_driver bma250_driver = {

.driver = {

.owner= THIS_MODULE,

.name= SENSOR_NAME,

},

.id_table= bma250_id,

.probe= bma250_probe,

.remove= bma250_remove,

};

在这个结构中,定义了驱动所属module、驱动名、驱动的id表、驱动初始化以及移除接口。可以通过i2c_add_driver将sensor driver添加进module中,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值