- 博客(18)
- 资源 (1)
- 收藏
- 关注
原创 input子系统框架
一、输入子系统框架输入子系统由核心层(Input Core)、驱动层和事件处理层(Event Handler)三部份组成,如下图所示,一个输入事件通过 Driver -> InputCore ->Eventhandler -> userspace 的顺序到达用户空间传给应用程序。设备驱动层:将底层的...
2017-11-29 19:22:21 2260
原创 evdev事件处理器数据处理过程
在事件处理层()中结构体evdev_client定义了一个环形缓冲区(circular buffer),其原理是用数组的方式实现了一个先进先出的循环队列(circular queue),用以缓存内核驱动上报给用户层的input_event事件。struct evdev_client { unsignedint head;
2017-11-29 10:11:02 885
原创 i2c、spi设备展开过程
const struct of_device_id of_default_bus_match_table[] = { { .compatible = "simple-bus", }, { .compatible = "simple-mfd", }, #ifdef CONFIG_ARM_AMBA { .compatible = "arm,amba-bus",
2017-11-27 19:47:04 476
转载 字符设备文件的打开
打开字符设备文件,还是通过 sys_open() 系统调用。在经过一连串的调用后,nameidata_to_filp, 内核会走到 __dentry_open() 函数。在这个函数中,执行了以下代码片段:f->f_mapping = inode->i_mapping;f->f_path.dentry = dentry;f->f_path.mnt = mnt;f->f_pos = 0;f
2017-11-23 20:21:43 589
原创 FBIOPAN_DISPLAY和MSMFB_DISPLAY_COMMIT刷屏流程
Android FBIOPAN_DISPLAY刷屏ioctl(fbmem.c)----> fb_ioctl----> FBIOPAN_DISPLAY----> fb_pan_display----> msm_fb_pan_display----> msm_fb_pan_display_ex----> schedule_work(&mfd->commit_wo
2017-11-16 16:35:41 3492 1
原创 cdv_add
内核中每个字符设备都对应一个 cdev结构的变量,下面是它的定义:kernel/include/linux/cdev.hstruct cdev { structkobject kobj; // 每个 cdev都是一个 kobject structmodule *owner; /
2017-11-14 14:32:06 282
原创 字符设备初始化
一个 cdev 一般它有两种定义初始化方式:静态的和动态的。 静态内存定义初始化: struct cdev my_cdev; cdev_init(&my_cdev, &fops); my_cdev.owner = THIS_MODULE;动态内存定义初始化: struct cdev *my_cdev = cdev_alloc(); my_cdev->ops = &fops; my_
2017-11-14 14:00:40 346
原创 字符设备的组织形式与设备号的注册分配
在kernel中字符设备用结构体struct char_device_struct表示,其定义如下:#define CHRDEV_MAJOR_HASH_SIZE 255 /*kernel/include/linux/fs.h*/ static struct char_device_struct{/*kernel/fs*/
2017-11-14 10:37:32 280
原创 qcom 显示驱动注册流程
以8909为例,高通显示驱动主要涉及mdp、msmfb、dsi、lcd四个驱动,其中msmfb、lcd在dts中是挂载在mdp下面的,在kernel解析设备节点生成platform_device时是不会展开的。显示驱动注册流程如下图: 备注:dsi驱动探测在mdp驱动探测完成标志m
2017-11-09 17:16:34 689
原创 FB显示驱动框架
FB显示驱动框架从上到下分为5层,如图1所示。FB设备驱动是一个抽象的显示驱动模型,抽象出了显示驱动公有的操作,为上层提供系统调用,为底层驱动提供接口。源码主要在Fb.h (kernel\include\linux)和Fbmem.c (kernel\drivers\video)两个文件中。FB驱动之下是各个厂商自己的FB驱动,各个厂商实现FB框架制定的操作集,然
2017-11-09 16:03:36 1807
原创 .vimrc 配置
syntax enable syntax onset nuset hlsset noicset rulerset showmode "在底部显示,当前处于命令模式还是插入模式set t_Co=256 "终端开启256色支持"set showmatchset nobackup "覆盖文件时不备份set autochdirset autoindentse...
2017-11-08 14:21:05 271
原创 cs add 命令
cs add 命令用于给当前目录添cscope搜索库添加临时文件,在vim退出后失效。假设/home/xxx/msm8909.LA.3.0-dev/LINUX/android/kernel目录下已经创建cscope.out文件。示例:cs add /home/xxx/msm8909.LA.3.0-dev/LINUX/android/kernel或者cs add /home/xxx/msm
2017-11-07 09:48:32 1213
原创 sys目录devices、dev等目录的创建
static void __init do_basic_setup(void){ cpuset_init_smp(); usermodehelper_init(); shmem_init(); driver_init(); init_irq_proc(); do_ctors(); us
2017-11-06 10:56:36 584
原创 kernel解析设备树生成设备节点过程
/** * unflatten_device_tree - create tree of device_nodes from flat blob * * unflattens the device-tree passed by the firmware, creating the * tree of struct device_node. It also fills the "name"
2017-11-06 10:25:46 3309
原创 phandle
我们可以给一个设备节点添加lable,之后可以通过&lable的形式访问这个lable,这种引用是通过phandle(pointer handle)进行的。在经过DTC工具编译之后,&lable会变成一个特殊的整型数字n,假设n值为1,那么在引用它的节点下自动生成两个属性,属性如下:linux,phandle = ;phandle = ; 如a-reference-to-something
2017-11-02 10:52:12 6600
原创 Device Tree编译工具dtc
Device Tree文件的格式为dts,包含的头文件格式为dtsi,dts文件是一种人可以看懂的编码格式。但是uboot和linux不能直接识别,他们只能识别二进制文件,所以需要把dts文件编译成dtb文件。dtb文件是一种可以被kernel和uboot识别的二进制文件。把dts编译成dtb文件的工具是dtc。Linux源码目录下scripts/dtc目录包含dtc工具的源码。在Linux的sc
2017-11-02 10:27:04 3871
原创 platform_device的生成过程
kernel在引入dts前后,platform_device的生成方式是不同的。在引入设备树之前,platform_device变量是静态定义的。而引入设备树之后,kernel通过解析设备节点的信息生成platform_device。一、引入dts之前 add a platform-level deviceint platform_device_register(struct plat
2017-11-02 09:29:52 1902
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人