简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
最近在准备分析Linux input子系统,发现内核代码里面有很多关于C语言的妙用。特此记录下,如有不足之处,敬请指正。
一、前言因为自己在研发过程中经常要涉及到tp驱动程序,而tp驱动就涉及到i2c驱动。经常可以看到在驱动程序中会定义一个struct i2c_driver的数据结构,并实现里面的某些成员,比如probe、resume、suspend、remove、id_table,之后会在module_init()中调用i2c_add_driver()添加这个驱动。比如说像下面这个样子:static const s
在Linux驱动开发中,经常要根据返回值来判断何种错误。现将常见的错误编号列举如下。errno-base.h// include/uapi/asm-generic/errno-base.h#define EPERM1/* Operation not permitted */#define ENOENT2/* No such file or directory
Androidadb驱动的代码在以下两个文件中实现,这部分的内容属于Linux USB Gadget的范畴了。<Kernel_Dir>/drivers/usb/gadget/androidadb.c<Kernel_Dir>/drivers/usb/gadget/f_adb.c关于Androidadb驱动的实现原理可以参照我的另外一篇文章:应用层的实现代码在以下目录:<Project_Dir>/
用户空间通常是打开某一特定的设备节点,然后通过write()/read()/ioctl()方法向内核空间进行数据的交换。这里主要使用两种方法实现。1、sysfs文件系统;2、在 /dev 目录下创建设备节点;一、sysfs介绍在 documentation/filesystems/sysfs.txt 对sysfs的介绍中,一上来就说:sysfs is a ram-base
简介在实际的项目中,同事在移植一个算法时候碰到要进行64位整数的除法运算。找了一下一下,Linux内核中有支持该运算的函数do_div(),该函数在 Linux/arch/arm/include/asm/div64.h 文件中实现。看不太懂其具体的实现方法,于是我就想能不能自己写一个大数相除的算法。下面就是算法的内容,如有不足之处,敬请指正。注:在以下公式以及代码中,名字的含义如下:m
GPIO驱动结构根据上图,在Linux中,会在gpiolib.c中定义一个 ARCH_NR_GPIOS 大小的数组static struct gpio_desc gpio_desc[ARCH_NR_GPIOS];。每个元素对应于当前CPU上各个GPIO接口的信息,记录各个GPIO的描述符,即对应struct gpio_desc结构体。struct gpio_desc内的成员gpio_chip又指
一、spidev介绍如果在内核中配置spidev,会在/dev目录下产生设备节点,通过此节点可以操作挂载在该SPI总线上的设备。用户空间通过该节点可以访问内核空间。二、配置spidev设备步骤在i.MX6,Kernel 4.1.15上配置spidev的支持。1、配置dts支持spi根据spi的连接原理图配置对应的imx6qp-xxx.dts,如:&ecspi1 {compatible =
下面的信息都是在VMware中运行Ubuntu12-04系统上执行的。同样该命令也支持在嵌入式系统中进行调试USB。一、cat设备节点获取信息在一些嵌入式开发中需要调试USB功能,经常会cat /sys 下的相关设备节点来查看某些信息,比如说我们可以进入 /sys/bus/usb/devices 目录下可以看到以下目录。进入到对应的目录也可以看到usb设备更加详细的信息(可以理解为设备描述符)。1
前言最近在学习Linux USB Composite Framework的内容,经常看到函数指针跳转来跳转去。比如说会看到很多结构体中的.bind函数指针,但又不知道他们之间的调用关系。此时,就可以用dump_stack()这个函数来追踪函数调用关系。当然,还是要自己尝试学习理解这个框架结构,不然纯粹的知道函数调用关系意义不大。另外,dump_stack()可用来定位Kernel Panic和Oo