企业网站建设的流程与原则公司网站制作公司

diannao/2026/1/24 4:23:04/文章来源:
企业网站建设的流程与原则,公司网站制作公司,青岛的互联网企业,百度官网下载做Linux方面也有三个多月了#xff0c;对代码中的有些结构一直不是非常明确#xff0c;比方platform_device与platform_driver一直分不清关系。在网上搜了下#xff0c;做个总结。两者的工作顺序是先定义platform_device - 注冊 platform_device-#xff0c;再定义…       做Linux方面也有三个多月了对代码中的有些结构一直不是非常明确比方platform_device与platform_driver一直分不清关系。在网上搜了下做个总结。两者的工作顺序是先定义platform_device - 注冊 platform_device-再定义 platform_driver- 注冊 platform_driver。  1platform_device设备的注冊过程必须在对应设备驱动载入之前被调用由于驱动注冊时须要匹配内核中所以已注冊的设备名。platform_device 是在系统启动时在init.c 里的s3c_arch_init() 函数里进行注冊的。这个函数申明为arch_initcall(s3c_arch_init); 会在系统初始化阶段被调用。arch_initcall 的优先级高于module_init所以会在Platform 驱动注冊之前调用。如今内核中不是採用arch_initcall(s3c_arch_init) 注冊platform_device 结构体而是通过.init_machine成员将其保存在arch_initcall(customize_machine)等待调用在mach-smdk6410.c中定义的MACHINE_START到MACHINE_END事实上质是一样的均放在.initcall3.init等待调用。之后再定义结构体struct platform_driver在驱动初始化函数中调用函数platform_driver_register() 注冊 platform_driver。具体过程描写叙述例如以下       Linux从2.6版本号開始引入了platform这个概念在开发底层驱动程序时首先要确认的就是设备的资源信息在2.6内核中将每一个设备的资源用结构platform_device来描写叙述该结构体定义在kernel/include/linux/platform_device.h中 struct platform_device{const char * name;u32 id;struct device dev;u32 num_resources;struct resource * resource; }; 该结构一个重要的元素是resource该元素存入了最为重要的设备资源信息定义在kernel/include/linux/ioport.h中 比方 struct resource {const char *name;unsigned long start, end;unsigned long flags;struct resource *parent, *sibling, *child; }; 实比如 static struct resource s3c_usb_resource[] {[0] {.start S3C_PA_USBHOST,.end S3C_PA_USBHOST S3C_SZ_USBHOST - 1,.flags IORESOURCE_MEM,},[1] {.start IRQ_UHOST,.end IRQ_UHOST,.flags IORESOURCE_IRQ,} }; 以上是6410的USB  HOST分配的资源信息。第1组描写叙述了这个usb host设备所占用的总线地址范围起始地址和大小由硬件决定IORESOURCE_MEM表示第1组描写叙述的是内存类型的资源信息第2组描写叙述了这个usb host设备的中断号也由硬件设定IORESOURCE_IRQ表示第2组描写叙述的是中断资源信息。设备驱动会依据flags来获取对应的资源信息。       有了resource信息就能够定义platform_device了 struct platform_device s3c_device_usb {.name s3c2410-ohci, //s3c6410-usb.id -1,.num_resources ARRAY_SIZE(s3c_usb_resource),.resource s3c_usb_resource,.dev {.dma_mask s3c_device_usb_dmamask,.coherent_dma_mask 0xffffffffUL} }; 有了platform_device就能够调用函数platform_add_devices向系统中加入该设备了。系统中的设备资源都能够採用这样的方式列举在一起然后成一个指针数组如 static struct platform_device *smdk6410_devices[] __initdata { ......  s3c_device_usbgadget,  s3c_device_usb,  //jeff add. ...... } 然后在6410的初始化函数smdk6410_machine_init中运行 platform_add_devices(smdk6410_devices, ARRAY_SIZE(smdk6410_devices));将全部的device加入进系统。platform_add_devices的优点在于它是一次性的运行多个platform_device_register。 2 至于驱动程序须要实现结构体struct platform_driver也定义在kernel/include/linux/platform_device.h中 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; }; 则该处的USB HOST实现是 static struct platform_driver ohci_hcd_s3c2410_driver {.probe ohci_hcd_s3c2410_drv_probe,.remove ohci_hcd_s3c2410_drv_remove,.shutdown usb_hcd_platform_shutdown,/*.suspend ohci_hcd_s3c2410_drv_suspend, *//*.resume ohci_hcd_s3c2410_drv_resume, */.driver {.owner THIS_MODULE,.name s3c2410-ohci,}, };       在驱动初始化ohci-hcd.c的1124行函数中调用函数platform_driver_register()注冊该platform_driver须要注意的是s3c_device_usb结构中name元素和ohci_hcd_s3c2410_driver 结构中driver.name必须是同样的这样在platform_driver_register()注冊时会对全部已注冊的platform_device中元素的name和当前注冊的platform_driver的driver.name进行比較仅仅有找到具备同样名称的platform_device存在后platform_driver才干注冊成功。当注冊成功时会调用platform_driver结构元素probe函数指针这里就是ohci_hcd_s3c2410_drv_probe開始探測载入。platform driver中的函数都是以platform device作为參数进入。 3为什么两个name的名字必须匹配才干实现device和driver的绑定1在内核初始化时kernel_init()-do_basic_setup()-driver_init()-platform_bus_init()初始化platform_bus(虚拟总线)2设备注冊的时候platform_device_register()-platform_device_add()-(pdev-dev.bus platform_bus_type)把设备挂在虚拟的platform bus下3驱动注冊的时候platform_driver_register()-driver_register()-bus_add_driver()-driver_attach()-bus_for_each_dev()对每一个挂在虚拟的platform bus的设备作__driver_attach()-driver_probe_device()推断drv-bus-match()是否存在而且是否运行成功此时通过指针运行platform_match比較strncmp(pdev-name, drv-name, BUS_ID_SIZE)假设相符就调用really_probe实际就是运行的对应设备的platform_driver-probe(platform_device)注意platform_drv_probe的_dev參数是由bus_for_each_dev的next_device获得開始真正的探測载入假设probe成功则绑定该设备到该驱动。       当进入probe函数后须要获取设备的资源信息依据參数type所指定类型比如IORESOURCE_MEM来分别获取指定的资源。 struct resource * platform_get_resource(struct platform_device *dev, unsigned int type, unsigned int num);当然也能够固定资源类型如获取资源中的中断号struct int platform_get_irq(struct platform_device *dev, unsigned int num);       probe函数一般完毕硬件设备使能struct resource的获取以及虚拟地址的动态映射和详细类型设备的注冊由于平台设备仅仅是一种虚拟的设备类型);remove函数完毕硬件设备的关闭struct resource以及虚拟地址的动态映射的释放和详细类型设备的注销。仅仅要和内核本身执行依赖性不大的外围设备 ( 换句话说仅仅要不在内核执行所需的一个最小系统之内的设备 ), 相对独立的拥有各自独自的资源 (addresses and IRQs) 都能够用platform_driver 实现。如lcd,usb,uart 等都能够用platfrom_driver 写而timer,irq等最小系统之内的设备则最好不用platfrom_driver 机制实际上内核实现也是这种。  參考原文http://blog.chinaunix.net/u1/49507/showart_494193.html 參考原文http://blog.csdn.net/yd4330152763132/archive/2010/02/01/5275776.aspx 转载于:https://www.cnblogs.com/mengfanrong/p/3806244.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/88769.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重庆网站建设哪家做的好网站建设主流语言

这是Project Student的一部分。 其他职位包括带有Jersey的 Web服务 客户端,带有Jersey的 Web服务服务器 , 业务层和带有Spring Data的持久性 。 到目前为止,所有集成测试都使用了内存嵌入式数据库,该数据库无法一次又一次地保留信…

游戏的网站seo推广软件

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼6、free()函数问:下面的程序会在用户输入’freeze’的时候出问题,而’zebra’则不会,为什么?#include int main(int argc, char *argv[]) {char *ptr (char*)malloc(10);if(NULL ptr){printf(…

媒体网站开发字体设计在线生成

链接:https://pan.baidu.com/s/1-tCCFwZ0RggXtbWYBVyhFg?pwdmcgv 提取码:mcgv 华为MageBookD14原厂WIN11系统自带所有驱动、出厂状态主题壁纸、Office办公软件、华为电脑管家、华为应用市场等预装软件程序 文件格式:esd/wim/swm 安装方式…

购物网站设计需要哪些模块优秀英文企业网站

广搜练手题 题目链接 思路 打印每个数与其最近的 1 1 1的曼哈顿距离&#xff0c;显然广搜&#xff0c;存储每一个 1 1 1&#xff0c;针对每一个 1 1 1开始广搜&#xff0c;逐层更新&#xff0c;每轮后更新的为两轮之中的最小曼哈顿距离 ACcode #include<bits/stdc.h>…

有专门做辩论的网站吗如何推广自己的网址

&#xff08;笔记&#xff0c;只为获取流量券&#xff09; MySQL中&#xff0c;UPDATE 操作涉及到行级锁和表级锁的概念&#xff0c;具体取决于事务隔离级别和被更新的条件, 无索引的情况下&#xff1a; 当表没有索引的情况下&#xff0c;UPDATE 操作通常会涉及到表级锁。这是…

辽宁城建设计院有限公司网站公司网站建设费用会计科目

说明&#xff1a;基于filebeat采集日志 概述&#xff1a; 在Kubernetes环境中&#xff0c;Filebeat不需要和业务服务部署在同一个容器中。通常的做法是将Filebeat作为一个DaemonSet部署在集群中&#xff0c;这样它可以在每个节点上运行一个实例&#xff0c;并从所有容器中收集…

网站开发文档包括广州番禺区核酸检测点

什么是守护进程&#xff1f;答&#xff1a;守护进程是后台运行的、系统启动是就存在的、不予任何终端关联的&#xff0c;用于处理一些系统级别任务的特殊进程。实现思路&#xff1a;实现一个守护进程&#xff0c;其实就是将普通进程按照上述特性改造为守护进程的过程。需要注意…

网络营销推广优化网站推广优化淄博公司

我在python上编写了一个小脚本,该脚本从控制台调用命令行以使linux机器休眠(或在更改一个单词的情况下将其自身关闭),然后在一段时间后唤醒.通过watch命令一次又一次地调用该命令.import osimport timeos.system("watch -n 20 sudo rtcwake -u -s 10 -m mem")因此,在…

网站导航一定要一样吗网站设计模版免费下载

NB-IoT模组的应用场景一般具备低频次、小数据量、上行为主、工作时间短&#xff08;激活态时间短&#xff09;等特点。因此&#xff0c;休眠态的功耗是NB-IoT模组产品综合耗电的重点考量参数之一。中移物联OneMO超低功耗NB-IoT模组MN316&#xff0c;凭借其紧凑的尺寸、极低的休…

安安互联怎么上传网站科研实验室网站建设

2024年6月24日&#xff0c;JumpServer开源堡垒机正式发布v3.10.11 LTS版本。JumpServer开源项目组将对v3.10 LTS版本提供长期的支持和优化&#xff0c;并定期迭代发布小版本。欢迎广大社区用户升级至v3.10 LTS最新版本&#xff0c;以获得更佳的使用体验。 在JumpServer v3.10.…

dede分类信息网站网站首页设计一般包括那三个

目录 一、下载nltk_data-gh-pages.zip数据文件 二、将nltk_data文件夹移到对应的目录 三、测试 四、成功调用punkt库 问题&#xff1a; 解决方案&#xff1a; 在使用自然语言处理库nltk时&#xff0c;许多初学者会遇到“nltk.download(punkt)”无法正常下载的问题。本…

asp网站设计代做深圳高端网站建设多少钱

对于Python初学者来说&#xff0c;舍得强烈推荐从《HeadFirst Python》开始读起&#xff0c;这本书当真做到了深入浅出&#xff0c;HeadFirst系列&#xff0c;本身亦是品质的保证。这本书舍得已在《Python起步&#xff1a;写给零编程基础的童鞋》一文中提供了下载。为了方便大家…

网站开发都需要什么工作百安居装修报价清单

简介&#xff1a; 从团队的角度来看&#xff0c;写好代码是一件非常有必要的事情。如何写出干净优雅的代码是个很困难的课题&#xff0c;我没有找到万能的 solution&#xff0c;更多的是一些 trade off&#xff0c;可以稍微讨论一下。 写了多年的代码&#xff0c;始终觉得如何写…

二级域名网站查询全国工商网注册查询网

创建型模式 1、FACTORY —追MM少不了请吃饭了&#xff0c;麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西&#xff0c;虽然口味有所不同&#xff0c;但不管你带MM去麦当劳或肯德基&#xff0c;只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式…

揭阳有哪家网站制作公司内蒙古住房与建设官方网站

1、模式标准 模式名称&#xff1a;组合模式 模式分类&#xff1a;结构型 模式意图&#xff1a;将对象组合成树型结构以表示“部分-整体”的层次结构。Composite 使得用户对单个对象和组合对象的使用具有一致性。 结构图&#xff1a; 适用于&#xff1a; 1、想表示对象的部分…

网站设计制作怎样可以快速天津建设工程信息网吧

一、题目 输入一个数n&#xff0c;计算123……n的和 二、代码截图【带注释】 三、源代码【带注释】 #include int main() { int num0; printf("请输入要运算的数:"); scanf("%d",&num); sumResult(num);//相加结果函数 } //计算打印…

网站页面设计论文网站流量的做

在MySQL中&#xff0c;update是原地更新数据&#xff0c;原地更新数据&#xff0c;原地更新数据。重要的事情说3遍。这是不同于PGSQL的。 update的具体过程是&#xff1a; (1)、先对该条record对应的索引加X锁 (2)、将修改后的数据写入到redo.log中 (3)、将修改之前的数据备…

西安市住宅和城乡建设局网站wordpress允许爬取

针对 ant-design-vue 版本 3.2.6 中 组件使用 mode“combobox” 时模式不生效的问题&#xff0c;我们可以基于现有信息和社区反馈来探讨可能的原因及解决方案。 警告与弃用通知 根据最新的资料&#xff0c;ant-design-vue 已经发出警告&#xff1a;[antdv: Select] The combob…

网站icp备案证明文件芜湖seo外包公司

本文来源&#xff1a; V3学院 尤老师的培训班笔记【高速收发器】xilinx高速收发器学习记录Xilinx-7Series-FPGA高速收发器使用学习—概述与参考时钟GT Transceiver的总体架构梳理 文章目录 一、概述&#xff1a;二、高速收发器结构&#xff1a;2.1 QUAD2.1.1 时钟2.1.2 CHANNEL…

对话弹窗在网站上浮动个人做外贸怎么做

给定一个字符串数组 strs &#xff0c;将 变位词 组合在一起。 可以按任意顺序返回结果列表。 注意&#xff1a;若两个字符串中每个字符出现的次数都相同&#xff0c;则称它们互为变位词。 示例 1: 输入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出…