
Linux kernel
文章平均质量分 85
板砖先生
这个作者很懒,什么都没留下…
展开
-
Linux下i2c设备的注册过程
在linux内核下,我们通过i2c_add_driver注册i2c设备,注册成功之后会调用我们写好的probe函数,下面就来梳理一下i2c设备从注册到调用probe的过程。注册i2c设备,传入的参数是i2c_driver结构体指针。static int __init bq24296_battery_init(void){ int ret; ret = i2c_add_原创 2017-07-17 15:31:29 · 2391 阅读 · 1 评论 -
linux内核中的likely()和unlikely()宏的作用
在看linux内核代码的时候,经常会看到likely(x)和unlikely(x)宏的使用。那这两个宏有什么作用呢?这两个宏在内核中的定义如下:# define likely(x) __builtin_expect(!!(x), 1)# define unlikely(x) __builtin_expect(!!(x), 0)可见这里使用了gcc的内建函数__builtin转载 2018-01-23 13:06:52 · 546 阅读 · 1 评论 -
Linux内核空间内存申请函数kmalloc、kzalloc、vmalloc的区别
我们都知道在用户空间动态申请内存用的函数是 malloc(),这个函数在各种操作系统上的使用是一致的,对应的用户空间内存释放函数是 free()。注意:动态申请的内存使用完后必须要释放,否则会造成内存泄漏,如果内存泄漏发生在内核空间,则会造成系统崩溃。 那么,在内核空间中如何申请内存呢?一般我们会用到 kmalloc()、kzalloc()、vmalloc() 等,下面我们介绍一下这些函数转载 2018-01-23 13:08:53 · 564 阅读 · 0 评论 -
内核regmap机制
内核版本:3.10.92内核3.1引入了一套新的API机制:regmap,主要为I2C,SPI,IRQ等操作提供统一接口,提高代码可重用性,减少重复逻辑。以I2C为例:要让设备跟I2C通信,以前的办法是调用i2c_transfer接口,其实regmap最终还是调用到i2c_transfer,只不过中间加了一层缓冲,这样统一了接口,减少了底层I/O的操作次数。在初始化之前,要先填充r原创 2018-01-15 14:11:49 · 4116 阅读 · 2 评论 -
详解container_of
container_of宏在linux中的应用非常广泛,几乎随处可见,它的作用是通过一个结构体成员的地址来获得这个结构体的首地址。先来看一下定义:#undef offsetof#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)/** * container_of - cast a member ...原创 2018-02-27 14:31:17 · 330 阅读 · 0 评论 -
Linux设备模型(3)_Uevent
原文:http://www.wowotech.net/device_model/uevent.html1. Uevent的功能Uevent是Kobject的一部分,用于在Kobject状态发生改变时,例如增加、移除等,通知用户空间程序。用户空间程序收到这样的事件后,会做相应的处理。该机制通常是用来支持热拔插设备的,例如U盘插入后,USB相关的驱动软件会动态创建用于表示该U盘的device结构(相应...转载 2018-02-27 14:33:02 · 305 阅读 · 0 评论 -
Android 电池管理系统-驱动部分
硬件平台:RK3128Android版本:6.0Kernel版本:3.10.92 Android电池管理,基于linux Power Supply架构,Battery驱动程序需要通过sys文件系统向用户空间提供接口,Linux标准的Power Supply驱动程序所使用的文件系统路径问/sys/class/power_supply,其中的每个子目录表示一种能源供应设备的名称。一、Power ...原创 2018-02-23 16:41:38 · 1853 阅读 · 0 评论