完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 qq448309212947 于 2015-12-8 10:02 编辑 驱动程序分层分离 分层:app层—用户程序 input所在的层—向上提供各种接口 dev.c、evdev.c所在的层—dev包含硬件相关的内容;evdev包含纯软件(稳定)的内容 被input层抽出所需要的内容 分离:dev与evdev相互分离,通过handle结构体连接,handle结构体由input层定义 bus_drv_dev模型(仅为一种左右建立联系的机制) bus总线:虚拟的 device:硬件相关——在结构体中定义 driver:比较稳定的代码——在结构体中定义 driver_register函数: 1.把driver放入bus的drv(结构体)链表中 2.从bus链表中取出每一个dev,用.mach函数判断dev是否支持drv 3.若可以支持,调用drv的.probe函数 device_add函数: 1.把device放入bus的dev(结构体)链表中 2.从bus链表中取出每一个drv,用.mach函数判断drv是否支持dev 3.若可以支持,调用drv的.probe函数 测试程序:led_device.c,led_drvice.c led_device.c static void led_release(struct device *dev) 如果未定义该函数,在卸载该设备时,相应的dev中的remove函数会出现警告 {} static struct resource led_resource[] = { 设备资源 { .start = 0, .end = 0, .flags = IORESOURCE_IRQ, } } static struct platform_device led_dev = { 定义设备结构体 .name = "led", .id = -1, .num_resources = ARRAY_SIZE(led_resource), .resource = led_resource, .dev = { .release = led_release } } static int led_dev_init(void) { platform_device_register(&led_dev); 创建设备 return 0; } static int led_dev_exit(void) { platform_device_unregister(&led_dev); 卸载设备 return 0; } led_driver.c static int __devinit gpio_keys_probe(struct platform_device *pdev) 发现匹配的设备后调用该函数——可用来创建字符驱动 { prink("led_probe, found ledn"); return 0; } static int __devexit gpio_keys_remove(struct platform_device *pdev) 失去匹配的设备后调用该函数 { prink("led_probe, remove ledn"); return 0; } static struct platform_driver led_drv = { 定义驱动结构体 .probe = led_probe, .remove = __devexit_p(led_remove), .driver = { .name = "led", 驱动与设备必须相同才会连接,同时会调用probe函数 .owner = THIS_MODULE, } }; static int led_drv_init(void) { platform_driver_register(&led_drv); 创建驱动 return 0; } static int led_drv_exit(void) { platform_driver_unregister(&led_drv); 卸载驱动 return 0; } |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1907个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36358 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4395 浏览 0 评论
6050 浏览 1 评论
6763 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4212 浏览 0 评论
619浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
614浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
606浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
694浏览 2评论
798浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 11:26 , Processed in 1.068665 second(s), Total 74, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号