当前位置: 首页 > news >正文

河间网站制作百度站长平台网站收录

河间网站制作,百度站长平台网站收录,百度系app有哪些,营销策划方案步骤首先#xff0c;如果对platform设备和驱动的注册机制不熟悉的话#xff0c;可以先看一下大神的博客 http://blog.csdn.net/zqixiao_09/article/details/50888795 一、下面逐一分析一下每一个函数的功能 1、platform_device_register //把设备注册到platform bus上 1)plat…首先如果对platform设备和驱动的注册机制不熟悉的话可以先看一下大神的博客 http://blog.csdn.net/zqixiao_09/article/details/50888795 一、下面逐一分析一下每一个函数的功能 1、platform_device_register //把设备注册到platform bus上 1)platform_device_add 2)pdev-dev.bus platform_bus_type; //指明设备要挂载总线类型 3)device_add 4)bus_add_device //把设备放到相应的总线上面 5)bus_probe_device 6)device_attach //尝试绑定相应的驱动 7)bus_for_each_drv 8)__device_attach 9)driver_match_device //调用platform_match匹配相应的驱动,先匹配id table再返回比较驱动的名字 //1、注册设备前驱动已经注册那么则会继续执行相应设备的probe函数 //2、如果注册设备前驱动没有被注册那么就仅把设备注册到总线上 10)driver_probe_device(drv, dev) 11)really_probe(dev, drv) 12)dev-bus-probe(dev)/drv-probe(dev) //执行驱动的probe对设备进行初始化 13)put_device //把设备放进内核 2、platform_driver_register //把驱动注册到platform bus上 1)drv-driver.bus platform_bus_type;//指明驱动要挂载总线类型 2)driver_register 3)bus_add_driver //把driver添加到bus上面 4)driver_attach 5)bus_for_each_dev //查找相应的设备是否已经在总线上注册 6)__driver_attach(struct device * dev, void * data) 7)driver_match_device(drv, dev) //与上面platform_match的一样 //1、注册驱动前设备已经注册那么则会继续执行相应设备的probe函数 //2、如果注册驱动前设备没有被注册那么就仅把驱动注册到总线上 8)driver_probe_device(drv, dev) 9)really_probe(dev, drv) 10)dev-bus-probe(dev)/drv-probe(dev) //执行驱动的probe对设备进行初始化 11)klist_add_tail(priv-knode_bus, bus-p-klist_drivers); //把driver放在bus 下面分析一下关键函数int bus_add_driver(struct device_driver *drv){......if (drv-bus-p-drivers_autoprobe) {error driver_attach(drv); //驱动开始匹配设备if (error)goto out_unregister;}......}int driver_attach(struct device_driver *drv){return bus_for_each_dev(drv-bus, NULL, drv, __driver_attach); //在bus上面轮询匹配设备}//遍历bus的函数int bus_for_each_dev(struct bus_type *bus, struct device *start,void *data, int (*fn)(struct device *, void *)){struct klist_iter i;struct device *dev;int error 0;if (!bus)return -EINVAL;klist_iter_init_node(bus-p-klist_devices, i,(start ? start-p-knode_bus : NULL));while ((dev next_device(i)) !error)error fn(dev, data); klist_iter_exit(i);return error;}//实际的匹配函数static int __driver_attach(struct device *dev, void *data){struct device_driver *drv data;/** Lock device and try to bind to it. We drop the error* here and always return 0, because we need to keep trying* to bind to devices and some drivers will return an error* simply if it didnt support the device.** driver_probe_device() will spit a warning if there* is an error.*///如果没有找到相应的设备 则退出if (!driver_match_device(drv, dev)) return 0;//如果找到相应的设备 则执行driver的probe对设备进行初始化工作if (dev-parent) /* Needed for USB */device_lock(dev-parent);device_lock(dev);if (!dev-driver)driver_probe_device(drv, dev);device_unlock(dev);if (dev-parent)device_unlock(dev-parent);return 0;} 3、device_register 其实device_register就是platform_device_register的父本platform_device_register在device_register的基础上添加了platform_device一些个性的内容如果没有把设备注册成platform device的情况一般都会使用device_register来注册设备如misc_register注册设备时。 4、driver_register driver_register也一样就是platform_driver_register的父本。 二、下面结合实例说明一下 #include linux/init.h #include linux/module.h #include linux/device.h #include linux/platform_device.h #include linux/miscdevice.h #include linux/fs.h#define DRIVER_NAME hello_driver//用于在总线上适配的驱动名字 #define DEVICE_NAME hello_device//生成的设备节点名字static int hello_release(struct inode *inode, struct file *file){printk(hello release\n);return 0; }static int hello_open(struct inode *inode, struct file *file){printk(hello open\n);return 0; }static struct file_operations hello_ops {.owner THIS_MODULE,.open hello_open,.release hello_release, };static struct miscdevice hello_dev {.minor MISC_DYNAMIC_MINOR,.name DEVICE_NAME,//设备节点名.fops hello_ops, };//如果总线匹配成功 就会执行probe函数 static int hello_probe(struct platform_device *pdv){printk(hello_probe\n);misc_register(hello_dev);return 0; }static int hello_remove(struct platform_device *pdv){printk(hello_remove\n);misc_deregister(hello_dev);return 0; }static void hello_shutdown(struct platform_device *pdv){; }static int hello_suspend(struct platform_device *pdv,pm_message_t pmt){return 0; }static int hello_resume(struct platform_device *pdv){return 0; }//创建设备 static struct platform_device hello_device { .name DRIVER_NAME, //用于总线匹配.id -1, }; //创建驱动 struct platform_driver hello_driver {.probe hello_probe,.remove hello_remove,.shutdown hello_shutdown,.suspend hello_suspend,.resume hello_resume,.driver {.name DRIVER_NAME, //用于总线匹配.owner THIS_MODULE,} };static int hello_init(void) {int DriverState;platform_device_register(hello_device);printk(KERN_EMERG hello_init!\n);//打印信息使用dmesg查看//执行platform_driver_register后 适配完 就会执行//hello_probe即先打印hello_probe信息才会打印//tDriverState信息DriverState platform_driver_register(hello_driver);printk(KERN_EMERG \tDriverState is %d\n,DriverState);return 0; }static void hello_exit(void) {printk(KERN_EMERG hello_exit!\n);platform_driver_unregister(hello_driver); platform_device_unregister(hello_device); }module_init(hello_init); module_exit(hello_exit); MODULE_LICENSE(GPL);
http://www.hkea.cn/news/14516349/

相关文章:

  • 昆明网站建设的公司建筑平面设计图
  • 怎么下载网站动态图片河南省建设网站
  • 网站建网站建设企业电话广告设计专业专升本有哪些专业
  • 陕西网站建设公司哪有seo网站优化
  • 网站开发 手机 电脑仿素材网站源码
  • php网站开发有前景吗网站排名优化系统
  • 玉林网站制作安装wordpress提示500错误
  • 设计类网站策划案上海专业微信网站开发公司
  • 泰语网站怎么建设中国装修建材网
  • 专业网站优化案例莱阳网页设计
  • 网站建设制作费用预算表取消wordpress激活邮件
  • 十大不收费的网站广东科技网站建设
  • 怎么屏蔽ip段访问网站医院网站建设目的
  • 一级a做爰片手机电影网站温州网站建设定制
  • 东莞人才网 东莞招聘信息移动端seo关键词优化
  • 南阳市做网站photoshop网页版
  • 西宁城东区建设局公租房网站怎么确定电商网站建设的目标
  • 网站开发薪水以下属于购物搜索广告的是
  • 网站制作国内知名企业江门做网站费用
  • 做服装到哪个网站拿货品质好成品网站 代理
  • 有关建设工程的强制性标准与抗震沈阳seo专业培训
  • 专业网站设计哪家好wordpress文字居中
  • 设计素材网站照片网络科技公司骗术
  • 郑州有学网站制作多用户电商平台
  • 建立一个网站英语wordpress 4.9.4 下载
  • 低价手机网站建设哪些做调查问卷挣钱的网站
  • 营销策划公司经营范围包括哪些外贸网站seo推广
  • 建筑企业网站有哪些打开app查看全部
  • 经典手机网站网站可以多个域名吗
  • 揭阳做网站建设公司陕西科强建设工程有限公司官方网站