platform总线驱动设备
一、基本框架1.1 驱动的分离分层
分离:把经常要更改的东西抽出来(硬件);把相对稳定的软件部分抽出来。
分层:如input.c 向上提供统一给 APP 操作的统一接口。每一层专注于自已的事件。
1.2 platform总线模型
二、实例编写(s3c2440)2.1 LED平台设备①设置并注册一个platform_device结构体
1234567891011static struct platform_device led_dev = { .name = "my_led", .id = -1, .num_resources = ARRAY_SIZE(led_resources), .resource = led_resources, .dev = { .release = led_dev_release, },};......platform_device_register(&led_dev); //注册这个平台设备
② .resource = led_res ...
input输入子系统
一、整体框架
软件层面(evdev.c/keyboard.c/mousedev.c)向核心层“ input.c”注册“ handler”(input_register_handler),这一边代表“软件”;另一边是“设备层面”,向核心层 “input.c”注册“device”(input_register_device),这一边代表“硬件”。
不管是先注册软件层面的“handler”还是硬件层面的“device”。最终都会成对的调用“input_attach_handler()”。此函数会判断二者是否有能够支持的对象,有的话会建立连接。换句话说就是:注册 input_dev 或 input_handler 时,会两两比较硬件层面的input_dev 和软件层面的 input_handler,根据 input_handler 的 id_table 判断这个 input_handler 能否支持这个 input_dev,如果能支持,则调用 input_handler 的 connect 函数建立”连接。
二、如何建立连接看看源码“input_attach_handle ...
Dwc2驱动Suspend/Disconnect事件分离
一、客户问题
现象:客户端 App 在用户态读取 device 的连接状态时,出现以下异常:
拔出线缆:用户态没有获取到 disconnect,获取到了suspend
插入线缆:用户态首先获取到 disconnect,再获取到 connect
用户需求:断开线缆时能立马在用户态获取到disconnect
客户对齐:明确客户读取的是用户态的哪个状态?
udc state:cat /sys/class/udc/f8180000.usb/state (udc驱动状态,usb_gadget_set_state接口更新)
gadgetfs:usb/gadget/legacy/inode.c(gadget设备状态,call_gadget接口更新),比如当dwc2状态改变比如suspend,调用call_gadget(hsotg, suspend),执行流程如下:
1call_gadget(hsotg, suspend) -> composite_suspend -> gadget设备的suspen ...
内核kobject分析
一、设备驱动模型基本元素1.1 kobject结构体sysfs的一个目录,常用来表示基本驱动对象,不允许发送消息到用户空间。
1234567891011121314151617struct kobject { const char *name; //kobject的名称,同时也是sysfs下的目录名字 struct list_head entry; //链表节点,用于将kobject加入到kset的list_head struct kobject *parent; //该kobject的上层节点,构建kobject间的层次关系(在sysfs体现为目录结构) struct kset *kset; //该kobject所属的kset对象(可以为NULL),用于批量管理kobject对象 struct kobj_type *ktype; //该kobjec ...
i2c驱动分析
一、 早期版本框架1. attach_adapter方法attach_adapter方法是早期的一种方式,这种方法通常适用于i2c 设备驱动程序不知道其设备将会连接到哪个I2C adapter的情况下。
attach_adapter例程123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 ...






