Linux 驱动学习方法 与关键技术 - IT培训|学习...

18
嵌入式培训专家 Linux 驱动学习方法 与关键技术 主讲:宋宝华 www.farsight.com.cn

Transcript of Linux 驱动学习方法 与关键技术 - IT培训|学习...

Page 1: Linux 驱动学习方法 与关键技术 - IT培训|学习 ...download.hqyj.com/download/pdf/Farsight100626-2.pdf · 华清远见 platform 的作用 1. 使得设备被挂接在一个总线上,因此,符合Linux

嵌入式培训专家

Linux 驱动学习方法与关键技术

主讲:宋宝华

www.farsight.com.cn

Page 2: Linux 驱动学习方法 与关键技术 - IT培训|学习 ...download.hqyj.com/download/pdf/Farsight100626-2.pdf · 华清远见 platform 的作用 1. 使得设备被挂接在一个总线上,因此,符合Linux

华清远见 今天的内容

ϖglobalmem/globalfifoϖ总线、设备与驱动

ϖplatform 设备、驱动和总线ϖLinux 设备驱动的分层思想ϖLinux 主机与外设驱动的分离

Page 3: Linux 驱动学习方法 与关键技术 - IT培训|学习 ...download.hqyj.com/download/pdf/Farsight100626-2.pdf · 华清远见 platform 的作用 1. 使得设备被挂接在一个总线上,因此,符合Linux

华清远见 globalmem/globalfifoϖ理解字符设备驱动架构ϖ理解内核并发处理ϖ理解阻塞、非阻塞ϖ理解异步 I / Oϖ理解内核基本 API

Page 4: Linux 驱动学习方法 与关键技术 - IT培训|学习 ...download.hqyj.com/download/pdf/Farsight100626-2.pdf · 华清远见 platform 的作用 1. 使得设备被挂接在一个总线上,因此,符合Linux

华清远见

花卉类

设备

总线

设备、总线与驱动

水果类

Page 5: Linux 驱动学习方法 与关键技术 - IT培训|学习 ...download.hqyj.com/download/pdf/Farsight100626-2.pdf · 华清远见 platform 的作用 1. 使得设备被挂接在一个总线上,因此,符合Linux

华清远见 驱动模型与 sysfs

总线 设备

...

驱动 设备 xxx所属类 yyy所属类

xxx设备

yyy驱动 xxx驱动 yyy设备 xxx设备 xxx设备yyy设备

...

yyy设备

Page 6: Linux 驱动学习方法 与关键技术 - IT培训|学习 ...download.hqyj.com/download/pdf/Farsight100626-2.pdf · 华清远见 platform 的作用 1. 使得设备被挂接在一个总线上,因此,符合Linux

2345678910

2345

华清远见

1 struct platform_device {

platform 设备、总线与驱动

2 const char3 u32

* name;/* 设备名 */id;

4 struct device dev;5 u32 num_resources;/* 设备所使用各类资源数量 */6 struct resource * resource;/* 资源 */7 };

1 struct platform_driver {int (*probe)(struct platform_device *);int (*remove)(struct platform_device *);void (*shutdown)(struct platform_device *);int (*suspend)(struct platform_device *, pm_message_t state);int (*suspend_late)(struct platform_device *, pm_message_t state);int (*resume_early)(struct platform_device *);int (*resume)(struct platform_device *);struct pm_ext_ops *pm;struct device_driver driver;

11};

1 struct bus_type platform_bus_type = {

.name

.dev_attrs

.match

.uevent

= "platform",= platform_dev_attrs,= platform_match,= platform_uevent,

67 };

.pm = PLATFORM_PM_OPS_PTR,

Page 7: Linux 驱动学习方法 与关键技术 - IT培训|学习 ...download.hqyj.com/download/pdf/Farsight100626-2.pdf · 华清远见 platform 的作用 1. 使得设备被挂接在一个总线上,因此,符合Linux

3

56

华清远见 platform 设备与驱动的匹配

1 static int platform_match(struct device *dev, struct device_driver *drv)

2 {struct platform_device *pdev;

4pdev = container_of(dev, struct platform_device, dev);return (strncmp(pdev->name, drv->name, BUS_ID_SIZE) == 0);

7 }

Page 8: Linux 驱动学习方法 与关键技术 - IT培训|学习 ...download.hqyj.com/download/pdf/Farsight100626-2.pdf · 华清远见 platform 的作用 1. 使得设备被挂接在一个总线上,因此,符合Linux

华清远见 globalfifo 作为 platform 驱动

44 static struct platform_driver globalfifo_device_driver = {45 .probe = globalfifo_probe,46 .remove = __devexit_p(globalfifo_remove),47 .driver = {48 .name = "globalfifo",49 .owner = THIS_MODULE,50 }51 };5253 static int __init globalfifo_init(void)54 {55 return platform_driver_register(&globalfifo_device_driver);56 }5758 static void __exit globalfifo_exit(void)59 {60 platform_driver_unregister(&globalfifo_device_driver);61 }

Page 9: Linux 驱动学习方法 与关键技术 - IT培训|学习 ...download.hqyj.com/download/pdf/Farsight100626-2.pdf · 华清远见 platform 的作用 1. 使得设备被挂接在一个总线上,因此,符合Linux

华清远见 板文件中的 globalfifo 设备

1 static struct platform_device globalfifo_device = {2 .name = "globalfifo",3 .id = ­1,4 };

static struct platform_device *ldd6410_devices[] __initdata = {+ & globalfifo_device,#ifdef CONFIG_FB_S3C_V2

&s3c_device_fb,#endif

&s3c_device_hsmmc0,...

}

Page 10: Linux 驱动学习方法 与关键技术 - IT培训|学习 ...download.hqyj.com/download/pdf/Farsight100626-2.pdf · 华清远见 platform 的作用 1. 使得设备被挂接在一个总线上,因此,符合Linux

华清远见 platform 资源、数据1 struct resource {2 resource_size_t start;3 resource_size_t end;4 const char *name;5 unsigned long flags;6 struct resource *parent, *sibling, *child;7 };

static struct dm9000_plat_data ldd6410_dm9000_platdata = {.flags = DM9000_PLATF_16BITONLY |

DM9000_PLATF_NO_EEPROM,.dev_addr = { 0x0, 0x16, 0xd4, 0x9f, 0xed, 0xa4 },

};

static struct platform_device ldd6410_dm9000 = {.name = "dm9000",.id = 0,.num_resources = ARRAY_SIZE(ldd6410_dm9000_resource),.resource = ldd6410_dm9000_resource,.dev = {

.platform_data = &ldd6410_dm9000_platdata,}

};

Page 11: Linux 驱动学习方法 与关键技术 - IT培训|学习 ...download.hqyj.com/download/pdf/Farsight100626-2.pdf · 华清远见 platform 的作用 1. 使得设备被挂接在一个总线上,因此,符合Linux

华清远见 platform 的作用1. 使得设备被挂接在一个总线上,因此,符合 Linux2.6 的设备模型。其结果是,配套的 sysfs 结点、设备电源管理都成为可能。

2. 隔离 BSP 和驱动。在 BSP 中定义 platform 设备和设备使用的资源、设备的具体配置信息,而在驱动中,只需要通过通用 API 去获取资源和数据,做到了板相关代码和驱动代码的分离,使得驱动具有更好的可扩展性和跨平台性。

Page 12: Linux 驱动学习方法 与关键技术 - IT培训|学习 ...download.hqyj.com/download/pdf/Farsight100626-2.pdf · 华清远见 platform 的作用 1. 使得设备被挂接在一个总线上,因此,符合Linux

华清远见 Linux 设备驱动的分层

Page 13: Linux 驱动学习方法 与关键技术 - IT培训|学习 ...download.hqyj.com/download/pdf/Farsight100626-2.pdf · 华清远见 platform 的作用 1. 使得设备被挂接在一个总线上,因此,符合Linux

华清远见 Linux input 设备驱动的分层

Page 14: Linux 驱动学习方法 与关键技术 - IT培训|学习 ...download.hqyj.com/download/pdf/Farsight100626-2.pdf · 华清远见 platform 的作用 1. 使得设备被挂接在一个总线上,因此,符合Linux

华清远见 Linux 主机驱动与外设驱动分离

主机控制器 A驱动

外设 a 驱动

主机控制器 B驱动

核心层:主机驱动通用 API

外设 b 驱动

主机控制器 C驱动

外设 c 驱动

Page 15: Linux 驱动学习方法 与关键技术 - IT培训|学习 ...download.hqyj.com/download/pdf/Farsight100626-2.pdf · 华清远见 platform 的作用 1. 使得设备被挂接在一个总线上,因此,符合Linux

华清远见 文档与参考实例

http://21cnbao.blog.51cto.com/109393/333312http://21cnbao.blog.51cto.com/109393/336263http://21cnbao.blog.51cto.com/109393/337609

Page 16: Linux 驱动学习方法 与关键技术 - IT培训|学习 ...download.hqyj.com/download/pdf/Farsight100626-2.pdf · 华清远见 platform 的作用 1. 使得设备被挂接在一个总线上,因此,符合Linux

¬

¬

¬

¬

νννν

ν

华清远见

Linux 设备驱动开发详解第 2 版即将出版ϖ 主要出发点开发 LDD6410 SAMSUNG S3C6410 开发板,所有实例均可在该板上直接运行和学习

全面升级为 Linux 2.6.28.6 内核,对 Linux 内核最新 API 和驱动子系统架构的变化进行介绍

对第一版中部分知识点进行整理和重新讲解

¬ 删除过时内容

新增大量内容:

SPI 主机和设备驱动ALSA SoC 架构驱动USB 设备控制器/ gadget 驱动/ USB OTG 驱动内核移植( BSP 构建与开发)

ν

ν

Android 驱动驱动开发分层、主机与外设分离思想

...

Page 17: Linux 驱动学习方法 与关键技术 - IT培训|学习 ...download.hqyj.com/download/pdf/Farsight100626-2.pdf · 华清远见 platform 的作用 1. 使得设备被挂接在一个总线上,因此,符合Linux

华清远见让我们一起讨论!

Page 18: Linux 驱动学习方法 与关键技术 - IT培训|学习 ...download.hqyj.com/download/pdf/Farsight100626-2.pdf · 华清远见 platform 的作用 1. 使得设备被挂接在一个总线上,因此,符合Linux

The success's road

www.farsight.com.cn

谢谢!