![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux驱动
VaderZhang
大学生
展开
-
DEVICE_ATTR的实例分析
ndroid中操作驱动时,很多时候都是使用的sys文件系统来进行直接操作。这个时候,就不得不提一个宏:DEVICE_ATTR。改文章详细讲解DEVICE_ATTR的使用。原创 2017-03-09 14:52:36 · 5250 阅读 · 0 评论 -
Android临时和永久关闭selinux
当我们想要临时关闭selinux时,如果可以获得root权限,通过adb如下指令可以临时关闭selinux:setenforce 0如果需要长期关闭,则需要用其他方法,先看slinue启动的位置:Android启selinux从init开始。在init.cpp中有:static void selinux_initialize(bool in_kernel_domain) { Ti...原创 2019-08-02 21:42:35 · 23871 阅读 · 1 评论 -
kobject,ktype,kset解析
1. kobject 结构Linux内核中有大量的驱动,而这些驱动有类似的结构,从面相对象的思想来看,总可以抽象出一个基类。在Linux中,这个基类就是kboject。内核中kobject结果定义如下:@/kernel/include/linux/kobject.hstruct kobject { const char *name; struct list_head entry; ...原创 2019-06-08 16:54:58 · 634 阅读 · 0 评论 -
poll原理及调用过程分析
我们以Android获取TP报点为例,分析poll过程。poll系统调用功能是检测设备是否有可读等对应事件发生时,调用read系统调用实现对设备的无阻塞访问。现在我们来分析poll的基本调用流程。首先看应用如何使用poll:int main(int argc, char* argv[]){ int res; int nfs; int pollres; int i; struct i...原创 2019-03-30 16:03:23 · 1769 阅读 · 0 评论 -
Linux I2C设备regmap机制简析
在Linu 3.1开始,Linux引入了regmap来同意管理内核的I2C, SPI等总线,将I2C, SPI驱动做了一次重构,把I/O读写的重复逻辑在regmap中实现。用一个I2C设备为例,在3.1之前的I2C设备驱动,需要各自调用i2c_transfer来实现读写,比如:static int raydium_i2c_pda2_write(struct i2c_client *client...原创 2019-03-17 22:08:48 · 5604 阅读 · 3 评论 -
TP驱动调试过程的几个问题
TP点击不能正常唤醒系统。在TP休眠时,irq使用enable_irq_wake()方法,保证IRQ在休眠状态可以唤醒系统,在中断唤醒系统后在进行I2C读写操作。TP电量是不能正常上报POWER KEY。在写上报点时,需要设置上报事件包括key__set_bit(BTN_TOUCH, input_dev->keybit);然后key里面包括power key。input...原创 2019-01-30 17:55:22 · 2304 阅读 · 0 评论 -
Linux固件加载过程简析
Linux内核模块使用固件程序时,正确的做法是使用request_firmware_nowait()一类固件接口来获取固件数据。在使用firmware前,必须对内核做如下配置。Device Drivers —> Generic Driver Options —> <*> Userspace firmware loading support 否则会出现: Unkn...原创 2019-02-14 17:20:17 · 3777 阅读 · 4 评论 -
Linux内核线程(kthread)创建过程
我们在内核中创建并运行内核线程,直接调用kthread_run宏就可以实现。其原型为:/** * kthread_run - create and wake a thread. * @threadfn: the function to run until signal_pending(current). * @data: data ptr for @threadfn. * @namefm...原创 2018-10-16 20:03:42 · 4600 阅读 · 0 评论 -
Linux内核 __setup宏分析
在解析cmdline时,我们经常会使用到__setup宏,用来处理kernel的cmdline。#define __setup(str, fn) \__setup_param(str, fn, fn, 0)#define __setup_param(str, unique_id, fn, early) \static char __setup_str_##unique_id[] __in...原创 2018-10-19 10:26:38 · 6058 阅读 · 1 评论 -
自己写Linux Usb鼠标驱动程序
USB子系统相关内容参考《精通Linux设备驱动程序》第11章。USB鼠标驱动程序可以参考内核中的鼠标驱动,路径为linux-3.0.86\drivers\hid\usbhid\usbmouse.cUSB鼠标驱动编写步骤为: 1、创建usb_driver结构体变量,设置id_table为usb鼠标设备,并注册usb驱动。static struct usb_device_id usb_mouse_i原创 2017-06-11 21:16:28 · 1353 阅读 · 3 评论 -
Android DTO和dtbo简介
在做Android8时,发现在dts中引入了dto。设备树叠加层(DTO)可让主要的设备树(DTB)叠加到设备树上。使用DTO的引导程序可以维护系统芯片(SOC)DT,并动态叠加针对特定设备的DT,从而向树中添加节点并对先用树中的属性进行更改。也就是SOC的设备节点作为DTB,其他设备作为DTO,DTO可以对DTB中的节点进行引用和修改。实现DTO包括分割设备树,编译,分区和运行。分割DT首先...原创 2019-08-27 22:20:07 · 18182 阅读 · 0 评论