linux设备驱动
文章平均质量分 87
linux各类驱动子系统分析
paomadi
这个作者很懒,什么都没留下…
展开
-
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摄像头代码解析7
13.uvc视频初始化原创 2013-09-11 12:59:04 · 8369 阅读 · 3 评论 -
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摄像头代码解析3
6.uvc解析uvc视频流6.1 重要结构体6.1.1 uvc数据流原创 2013-08-30 10:49:20 · 7554 阅读 · 1 评论 -
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 评论 -
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 评论 -
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 评论 -
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设备驱动
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 评论 -
alsa音频架构4-声卡控制
第十五部分 声卡控制接口前面第一篇中讲到了每注册一个声卡都会创建注册一个对应的声卡控制设备,并给出了其操作函数集snd_ctl_f_ops,在"amixer,aplay,arecord的使用"一文中提及了amixer如何设置获取声卡的控制选项 接着在第二篇中讲到Asoc声卡驱动编写的步骤,步骤中没牵扯到控制设备的控制选项,这里要补充第5个步骤第5个步骤就是在设备驱动中要调用snd_原创 2013-05-31 12:57:31 · 4067 阅读 · 3 评论 -
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 评论 -
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 评论 -
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 评论 -
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 评论 -
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 评论 -
二 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 评论 -
一 linux spi子系统(框架)
一.spi设备struct spi_device { struct device dev; //设备文件 struct spi_master *master; //spi主机 u32 max_speed_hz; //最大速率 u8 chip_select; //片选 u8 mode; //模式 u8 bits_per_word; //一个字有多少位 int irq;原创 2013-02-27 14:49:20 · 4631 阅读 · 0 评论 -
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 评论 -
六 linux串口编程
一.结构体1.termiosstruct termios { tcflag_t c_iflag; /* 输入模式标志 */ tcflag_t c_oflag; /* 输出模式标志 */ tcflag_t c_cflag; /* 控制模式标志 */ tcflag_t c_lflag; /* 本地模式标志 */ cc_t c_line原创 2013-01-30 14:23:12 · 4286 阅读 · 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 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 评论 -
五、从usb的插入开始
当usb设备插入接口,电压变化会通知到usb主控器,触发主控器中断,如果主控器不支持中断,那么会使用rh_timer方法,轮询接口其结果都是调用usb_hcd_poll_rh_statusvoid usb_hcd_poll_rh_status(struct usb_hcd *hcd){ struct urb *urb; int length; unsigned lon原创 2012-12-29 14:04:34 · 5887 阅读 · 1 评论 -
四、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 评论 -
三、usb主控器注册
第一步usb主控器设备的分配usb_create_hcdstruct usb_hcd *usb_create_hcd (const struct hc_driver *driver,struct device *dev, const char *bus_name){ struct usb_hcd *hcd; hcd = kzalloc(sizeof(*hcd) + driver原创 2012-12-29 14:03:39 · 3719 阅读 · 0 评论 -
二、usb子系统初始化
在/drivers/usb/core/Usb.c中,subsys_initcall(usb_init)声明了usb子系统入口函数usb_initstatic int __init usb_init(void){ int retval; if (nousb) { pr_info("%s: USB support disabled\n", usbcore_name); re原创 2012-12-29 14:02:20 · 5052 阅读 · 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 input设备驱动
一. 输入设备结构体 1. input_dev 输入设备struct input_dev { const char *name; //设备名 const char *phys; //设备系统层的物理路径 const char *uniq; // struct input_id id; //输入设备id 总线类型;厂商编号,产品id,产品版本 unsig原创 2012-12-21 22:54:21 · 4603 阅读 · 0 评论 -
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 评论 -
总线、设备、驱动、类
一. 总线、设备、驱动、类各自的相关结构体 1.总线 1.1 总线类型结构体struct bus_type { const char *name; //总线类型名 struct bus_attribute *bus_attrs; //总线属性 struct device_attribute *dev_attrs; //设备属性 struct driver_原创 2012-12-18 21:40:06 · 2333 阅读 · 0 评论 -
linux platform平台设备驱动
一. 平台总线 1. 总线结构体struct bus_type platform_bus_type = { .name = "platform", //总线名 .dev_attrs = platform_dev_attrs, //设备属性 .match = platform_match, //匹配函数 .uevent = platform_uevent,原创 2012-12-18 13:40:22 · 1667 阅读 · 0 评论 -
linux misc混杂设备驱动
一. misc结构体struct miscdevice { int minor; //次设备号 const char *name; //设备名 const struct file_operations *fops; //操作函数集 struct list_head list; //链表头 struct device *parent; //父设备设备文件 struc原创 2012-12-18 10:37:44 · 1834 阅读 · 0 评论 -
linux字符设备驱动
一. 字符设备结构体struct cdev { struct kobject kobj; //kobject对象 struct module *owner; //模块所有者 const struct file_operations *ops; //文件操作函数集 struct list_head list; //链表头 dev_t dev; //设备号 uns原创 2012-12-18 09:20:51 · 1756 阅读 · 2 评论