linux设备驱动
文章平均质量分 87
paomadi
这个作者很懒,什么都没留下…
展开
-
三轴加速度传感器bma150驱动解析
BMA150 博世 三轴加速度传感器SPI(4线,3线),i2c,中断引脚频响+/- 2g,4g,8g;带宽25~1500hz,中断触发内部加速度求值低功耗,快速唤醒包含数据寄存器,控制寄存器,状态寄存器,设置寄存器及EEPROM寄存器读写使用i2c接口,所以需要驱动i2c设备数据需要获取xyz值,所以可以添加成input设备用一个bma150_data数据对象来描原创 2014-03-27 12:14:50 · 7780 阅读 · 0 评论 -
MTD设备驱动
MTD(memory technology device):内存技术设备是linux用于描述ROM,NAND,NOR等内存设备的子系统的抽象MTD设备可以按块读写也可以按字节读写,也就是说MTD设备既可以是块设备也可以是字符设备一.MTD设备基础1.关键结构体对象在MTD中用mtd_info来描述一个内存设备struct mtd_info { u_char type;原创 2013-07-07 12:15:58 · 6099 阅读 · 1 评论 -
usb键鼠驱动分析
一、鼠标linux下的usb鼠标驱动在/drivers/hid/usbhid/usbmouse.c中实现1.加载初始化过程1.1模块入口module_init(usb_mouse_init);1.2初始化函数static int __init usb_mouse_init(void) //初始化{ int retval = usb_register(&usb_mou原创 2013-06-29 11:27:40 · 5164 阅读 · 0 评论 -
MTD设备驱动--NAND flash
前面的文章MTD设备驱动(http://blog.csdn.net/paomadi/article/details/9262307)讲了mtd设备的架构组织其中讲述了调用int add_mtd_partitions(struct mtd_info *master,const struct mtd_partition *parts,int nbparts) 该函数一个作用是mtd_info原创 2013-07-08 13:02:23 · 3296 阅读 · 0 评论 -
idr机制(32叉树)
一.结构体1.idr结构体struct idr { struct idr_layer __rcu *top; //idr_layer顶层,32叉树的根 struct idr_layer *id_free; //指向idr_layer的空闲链表 int layers; //idr_layer的层数量 int id_free_cnt; //idr_layer空闲链表中剩余的原创 2013-01-26 10:43:48 · 7508 阅读 · 5 评论 -
usb触摸屏驱动
源码在/drivers/input/touchscreen/usbtouchscreen.c中static int __init usbtouch_init(void) //入口函数{ return usb_register(&usbtouch_driver); //注册usb触摸屏驱动}module_init(usbtouch_init);看usbtouch_driver的定义s原创 2013-04-03 13:09:43 · 7819 阅读 · 1 评论 -
MACHINE_START MACHINE_END 宏
一、定义#define MACHINE_START(_type,_name) \ //板类型,板名字static const struct machine_desc __mach_desc_##_type \ __used \ __attribute__((__section__(".arch.info.init"))) = { \ .nr = MACH_TYPE_##原创 2013-02-26 09:13:45 · 2434 阅读 · 0 评论 -
二 spi 子系统(spidev.c)
一.spidev.c文件看一个设备驱动的方法:概览下重要的结构体spidev_data及全局变量device_list,bufsiz,SPIDEV_MAJOR...module_init标识的入口初始化函数spidev_init,(module_exit标识的出口函数)设备与设备驱动匹配时候调用的probe方法spidev_probe设备驱动的操作函数集file_operati原创 2013-02-27 14:50:03 · 10676 阅读 · 2 评论 -
alsa音频架构1
第一部分 alsa子系统关键结构体对象等1.声卡设备类型定义#define SNDRV_DEV_TOPLEVEL ((__force snd_device_type_t) 0)#define SNDRV_DEV_CONTROL ((__force snd_device_type_t) 1) #define SNDRV_DEV_LOWLEVEL_PRE ((__force snd_dev原创 2013-05-06 09:16:41 · 5268 阅读 · 0 评论 -
网卡从24c02获取设置mac地址
#include #include #include unsigned char mac_read(unsigned char command){ int ret; unsigned char buf; struct i2c_adapter *a = i2c_get_adapter(1); struct i2c_msg msg[2] = { { .addr = 0原创 2013-03-22 14:02:19 · 2817 阅读 · 0 评论 -
alsa音频架构2-ASoc
设计ASoc的目的是为嵌入式系统片上处理器音频单元或外部的音频解码芯片提供更好的ALSA支持ASoC有多个组件组成snd_soc_platform/snd_soc_codec/snd_soc_dai/snd_soc_card以及ALSA的snd_pcmsnd_soc_platform和snd_soc_codec就行平台与设备的关系缺一不可,snd_soc_card是它们实例化的一个对象原创 2013-05-28 11:58:21 · 5969 阅读 · 2 评论 -
三轴陀螺仪MPU3050驱动解析
MPU3050是invensense公司的三轴陀螺仪芯片,三轴陀螺仪最大的作用就是“测量角速度,以判别物体的运动状态,所以也称为运动传感器.下图是MPU3050的系统框图,芯片有1个中断引脚,可以通过i2c来控制,获取x Gyro,y Gyro,z Gyro设备驱动中用mpu3050_sensor结构体来描述MPU3050设备对象(对象中包含i2c客户端及输入设备来处理获取的x,y,z轴数据的传递原创 2014-03-28 22:39:43 · 10737 阅读 · 1 评论 -
linux网络设备—mdio总线
一.结构体struct mii_bus { const char *name; //总线名 char id[MII_BUS_ID_SIZE]; //id void *priv; //私有数据 int (*read)(struct mii_bus *bus, int phy_id, int regnum); //读方法 int (*write)(struct mii_bus原创 2013-11-14 09:38:28 · 10456 阅读 · 2 评论 -
linux网络设备—PHY
一.结构体1.PHY设备struct phy_device { struct phy_driver *drv; //PHY设备驱动 struct mii_bus *bus; //对应的MII总线 struct device dev; //设备文件 u32 phy_id; //PHY ID enum phy_state state; //PHY状态 u32 dev_f原创 2013-11-14 09:37:58 · 11078 阅读 · 5 评论 -
深入解析linux下rtc架构
一.描述rtc相关结构体1.rtc设备struct rtc_device //rtc设备{ struct device dev; //设备文件 struct module *owner; //所有者 int id; //次设备号 char name[RTC_DEVICE_NAME_SIZE]; //rtc设备名 const struct原创 2013-10-26 16:24:45 · 6644 阅读 · 0 评论 -
uvc摄像头代码解析1
一.FAQ1.判断自己的摄像头是否支持uvc标准输入lsusb //列出usb设备Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hubBus 001 Device 003: ID 0c45:62f1 Microdia //摄像头Bus 002 Device 001: ID 1d6b:0002 L原创 2013-08-26 09:34:20 · 11438 阅读 · 3 评论 -
uvc摄像头代码解析7
13.uvc视频初始化原创 2013-09-11 12:59:04 · 8369 阅读 · 3 评论 -
让qt应用程序支持触摸
一.设备驱动我的触摸屏是usb接口的可以参考下这2篇文件http://blog.csdn.net/paomadi/article/details/8754783 usb触摸屏http://blog.csdn.net/paomadi/article/details/8309861 输入子系统不是usb接口的或者自己想写多一个也可以(需要我的源码的请留邮箱说下,我贴一部分)us原创 2013-06-20 14:03:47 · 19427 阅读 · 26 评论 -
linux命令码(_IO宏)
在ioctl.h头文件中定义了命令码命令码用一个32位的整型数表达bit29~31表示命令传输的方向,bit16~29记录要传输的数据的大小,bit8~15表示设备类型(一般用一个ASCII表示),bit0~7表示命令编号其中数据大小可以和方向的bit29重叠29位是特殊位,因为无方向定义值为1也就是无方向的时候会占用第29位,无方向就无所谓数据传输,所以携带数据大小段是0有方原创 2013-02-02 09:31:25 · 4226 阅读 · 0 评论 -
uvc摄像头代码解析6
10.扫描视频设备链和注册视频设备10.1 uvc视频链struct uvc_video_chain { //uvc视频链 struct uvc_device *dev; //uvc设备 struct list_head list; //uvc视频链链表头 struct list_head entities; //uvc实体链表头 struct uvc_entit原创 2013-09-11 12:57:34 · 8413 阅读 · 4 评论 -
uvc摄像头代码解析5
8.初始化uvc控制8.1 重要结构体struct uvc_control { //uvc控制 struct uvc_entity *entity; //uvc实体 struct uvc_control_info info; //uvc控制信息 __u8 index; //索引值 __u8 dirty:1, loaded:1, modified:1,原创 2013-09-11 12:56:36 · 9995 阅读 · 1 评论 -
uvc摄像头代码解析4
7.uvc_parse_format7.1 uvc格式描述符struct uvc_format_desc { //uvc格式描述符char *name; //uvc格式描述符名字__u8 guid[16];//全局唯一ID__u32 fcc; //压缩格式};7.2 uvc解析1个格式描述符static int uvc_parse_format(st原创 2013-08-30 10:50:07 · 9163 阅读 · 2 评论 -
uvc摄像头代码解析2
1.uvc驱动模块入口module_init(uvc_init); //1.模块入口2.初始化函数static int __init uvc_init(void) // 2.初始化函数{ int result; result = usb_register(&uvc_driver.driver); // 3.注册usb设备驱动(usb摄像头设备) if (result =原创 2013-08-26 10:32:56 · 12026 阅读 · 4 评论 -
alsa音频架构3-pcm
第十四部分 snd_pcm1.pcm结构体struct snd_pcm { struct snd_card *card; //声卡 struct list_head list; int device; //设备号 unsigned int info_flags; unsigned short dev_class; unsigned short dev_subclass; ch原创 2013-05-30 23:52:57 · 7551 阅读 · 2 评论 -
linux gpio接口
一.相关结构体1.gpio_chip代表一个芯片的一个gpio bankstruct gpio_chip { //gpio bank const char *label; //bank名 struct device *dev; //设备文件 struct module *owner; //模块所有者 int (*request)(struct gpio_chip *chip,u原创 2013-03-01 11:50:17 · 7230 阅读 · 0 评论 -
四 linux tty驱动
一. tty结构体1.tty_driverstruct tty_driver { int magic; struct kref kref; //参考计数 struct cdev cdev; //字符设备 struct module *owner; //模块所有者 const char *driver_name; //驱动名 const char *name; //设原创 2013-01-29 23:24:42 · 3177 阅读 · 0 评论 -
三 printk如何打印信息
printk的定义可变参数 参考va_list,va_start,va_arg,va_end可变参数asmlinkage int printk(const char *fmt, ...){ va_list args; //可变参数链表 int r;#ifdef CONFIG_KGDB_KDB if (unlikely(kdb_trap_printk)) { v原创 2013-01-29 23:24:12 · 2660 阅读 · 0 评论 -
二 console 设备驱动
一.结构体1.consolestruct console { char name[16]; //console名 void (*write)(struct console *, const char *, unsigned); //写方法 int (*read)(struct console *, char *, unsigned); //读方法 struct tty_d原创 2013-01-29 23:23:51 · 3131 阅读 · 1 评论 -
一 uboot传递参数'console=ttyXXX'的作用
linux启动时uboot传递进console=ttyS0,115200n8的参数内核中用__setup()宏声明参数处理的方法关于__setup宏参考 early_param和__setup宏__setup("console=", console_setup);console_setup函数处理1.console_cmdline结构体struct console_cm原创 2013-01-29 23:23:22 · 4815 阅读 · 0 评论 -
container_of宏
一. 作用struct XXX_dev{ cdev cdev;}struct XXX_dev *dev; /* device information */ *dev = container_of(inode->i_cdev, struct XXX_dev, cdev); 结构体对象 域原创 2012-12-19 14:54:48 · 1728 阅读 · 0 评论 -
linux性能监视和调试工具 top 25
Top 25 Best Linux Performance Monitoring and Debugging ToolsI’ve compiled 25 performance monitoring and debugging tools that will be helpful when you are working on Linux environment. This list is n翻译 2012-12-17 20:31:21 · 2445 阅读 · 0 评论 -
usb wifi 驱动移植rtl5370
我用的wifi是tenda W311MI 150m无线usb网卡 内核版本2.6.37 架构cortex A8首先去tenda官网下载驱动移植过程:1 修改内核配置选项 make cleanmake menuconfigGo into the following menu(s): Device Drivers -> Generic Driver Options原创 2012-12-17 17:02:06 · 4204 阅读 · 0 评论 -
linux特殊设备驱动
一. 内存设备结构体static const struct memdev { const char *name; mode_t mode; const struct file_operations *fops; struct backing_dev_info *dev_info;} devlist[] = { [1] = { "mem", 0, &mem_fops,原创 2012-12-22 21:42:15 · 1318 阅读 · 0 评论 -
linux块设备驱动
杂记一. 块设备相关结构体块设备结构体struct block_device { dev_t bd_dev; //设备号 struct inode * bd_inode; /* will die */ struct super_block * bd_super; //超级块 int bd_openers; struct mutex bd_mutex; /*原创 2012-12-20 10:24:09 · 1426 阅读 · 0 评论 -
linux i2c设备驱动
一. i2c的结构体 1. i2c适配器struct i2c_adapter { struct module *owner; //模块所有者 unsigned int id __deprecated; unsigned int class; //支持的类别(I2C_CLASS_HWMON,I2C_CLASS_DDC,I2C_CLASS_SPD) const stru原创 2012-12-22 17:27:07 · 3379 阅读 · 0 评论 -
五 linux 串口驱动
一.串口结构体1.串口驱动结构体struct uart_driver { struct module *owner; //模块所有者 const char *driver_name; //驱动名 const char *dev_name; //设备名 int major; //主设备号 int minor; //次设备号 int nr; //支持串口个数原创 2013-01-29 23:25:01 · 3343 阅读 · 2 评论 -
linux framebuffer设备驱动
一. framebuffer结构体 1. fb_infostruct fb_info { int node; //次设备号 int flags; struct mutex lock; struct mutex mm_lock; struct fb_var_screeninfo var; //可变参数 struct fb_fix_screeninfo f原创 2012-12-21 11:02:29 · 2743 阅读 · 0 评论 -
linux RTC设备驱动
一. RTC设备结构体struct rtc_device{ struct device dev; //设备文件 struct module *owner; //模块所有者 int id; //RTC次设备 char name[RTC_DEVICE_NAME_SIZE]; //RTC设备名 const struct rtc_class_ops *ops; //RTC原创 2012-12-19 14:06:04 · 3194 阅读 · 0 评论 -
alsa音频架构4-声卡控制
第十五部分 声卡控制接口前面第一篇中讲到了每注册一个声卡都会创建注册一个对应的声卡控制设备,并给出了其操作函数集snd_ctl_f_ops,在"amixer,aplay,arecord的使用"一文中提及了amixer如何设置获取声卡的控制选项 接着在第二篇中讲到Asoc声卡驱动编写的步骤,步骤中没牵扯到控制设备的控制选项,这里要补充第5个步骤第5个步骤就是在设备驱动中要调用snd_原创 2013-05-31 12:57:31 · 4067 阅读 · 3 评论 -
四、usb设备注册
一.usb设备驱动注册static inline int usb_register(struct usb_driver *driver){ return usb_register_driver(driver, THIS_MODULE, KBUILD_MODNAME);}usb_register_driverint usb_register_driver(struct usb原创 2012-12-29 14:04:00 · 2964 阅读 · 0 评论