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

做网站 包含详情页设计吗信息流推广实施策划书

做网站 包含详情页设计吗,信息流推广实施策划书,asp.net个人网站模板,网站建设管理维护责任书文章目录 1.平台总线介绍1.1平台总线模型的组成部分1.2平台总线模型的优势 2.使用平台总线模型开发驱动2.1注册platform设备2.2注册platform驱动2.3效果演示 1.平台总线介绍 Linux 平台总线模型#xff08;Platform Bus Model#xff09;是一种设备驱动框架#xff0c;用于… 文章目录 1.平台总线介绍1.1平台总线模型的组成部分1.2平台总线模型的优势 2.使用平台总线模型开发驱动2.1注册platform设备2.2注册platform驱动2.3效果演示 1.平台总线介绍 Linux 平台总线模型Platform Bus Model是一种设备驱动框架用于处理那些没有标准总线如 PCI、USB 等的嵌入式设备。它为这些设备提供了统一的设备驱动模型简化了设备驱动程序的编写和管理。 1.1平台总线模型的组成部分 平台总线模型主要由以下几个组成部分构成 平台设备Platform Device平台驱动Platform Driver平台总线Platform Bus 平台设备Platform Device 平台设备表示硬件设备它们通常通过设备树Device Tree或者板文件Board File进行描述。平台设备通常包括设备名称、资源如 I/O 端口、内存区域、中断号等以及其他平台数据。 平台驱动Platform Driver 平台驱动是与平台设备匹配并管理这些设备的软件模块。平台驱动提供了 probe 和 remove 函数用于设备的初始化和清理。 平台总线Platform Bus 平台总线在内核中自动管理不需要显式地定义。它用于匹配平台设备和平台驱动。 1.2平台总线模型的优势 平台总线模型Platform Bus Model在 Linux 内核中的引入为嵌入式设备和驱动程序的开发带来了多项显著的优势。以下是平台总线模型的一些主要优势 抽象和统一的设备管理 平台总线模型为没有标准总线的设备提供了统一的抽象和管理方法。通过统一的接口和机制开发者可以更容易地管理和控制不同类型的设备无需考虑底层硬件差异。 简化驱动开发 通过使用平台总线模型驱动程序开发者不再需要为每种硬件设备编写特定的初始化和资源管理代码。平台设备和平台驱动的标准化接口使得驱动程序的开发和调试更加简单和一致。 设备树支持 平台总线模型支持设备树Device Tree这是一种硬件描述语言广泛用于描述嵌入式系统中的硬件配置。设备树使得硬件配置从代码中分离出来可以通过修改设备树文件而不是驱动代码来适应不同的硬件配置极大地提高了代码的可维护性和可移植性。 自动匹配和管理 平台总线模型通过内核自动完成平台设备和平台驱动的匹配和管理。这意味着驱动程序不需要显式地查找和初始化设备内核会自动调用合适的 probe 和 remove 函数来管理设备的生命周期。 资源管理 平台总线模型提供了简化的资源管理机制。平台设备可以通过设备树或板文件描述其所需的资源如 I/O 端口、内存区域、中断号等驱动程序可以通过标准接口获取和使用这些资源避免了手动管理资源的复杂性和潜在错误。 模块化和可移植性 通过将硬件特定的配置与驱动代码分离平台总线模型提高了驱动程序的模块化和可移植性。驱动程序可以更容易地在不同的硬件平台之间移植只需调整设备树或板文件中的硬件配置即可。 代码重用 由于平台总线模型提供了标准化的接口和机制不同驱动程序之间可以共享通用的代码和逻辑。这种代码重用不仅减少了开发时间和成本还提高了代码的稳定性和可靠性。 8. 内核维护 平台总线模型的标准化和统一管理机制使得内核代码更易于维护和升级。通过减少硬件特定的代码和逻辑内核开发者可以更专注于改进和优化内核的通用部分提高内核的整体性能和稳定性。 2.使用平台总线模型开发驱动 2.1注册platform设备 #include linux/init.h #include linux/module.h #include linux/fs.h #include linux/cdev.h #include linux/uaccess.h #include linux/device.h #include linux/semaphore.h #include linux/timer.h #include linux/atomic.h #include linux/interrupt.h #include linux/platform_device.h #include linux/gpio.h// 描述硬件资源 结构体数组 static struct resource my_device_resources[] {{.start 0x12340000,.end 0x123400FF,.flags IORESOURCE_MEM,},{.start 5,.end 5,.flags IORESOURCE_IRQ,}}; void my_device_release(struct device *dev) {printk(This is my device release); }static struct platform_device my_platform_device {.name my_platform_device,.id -1,.num_resources ARRAY_SIZE(my_device_resources),.resource my_device_resources,.dev {.release my_device_release}, };static int __init platform_device_init(void) {platform_device_register(my_platform_device);printk(platform_device_init!);return 0; }static void __exit platform_device_exit(void) {platform_device_unregister(my_platform_device);printk(platform_device_exit!); }module_init(platform_device_init); module_exit(platform_device_exit); MODULE_AUTHOR(Marxist); MODULE_LICENSE(GPL); MODULE_DESCRIPTION(a simple of platform_device); 其中有两个关键的结构体 platform_device和resource struct platform_device 功能描述 platform_device 结构体表示一个平台设备它包含了设备的名称、资源、设备数据以及其他属性。这个结构体在平台总线模型中非常重要用于描述那些没有标准总线如 PCI、USB 等支持的嵌入式设备。 struct platform_device {const char *name; // 设备名称int id; // 设备ID通常用于区分同名设备struct device dev; // 嵌入的设备结构体u32 num_resources; // 资源数量struct resource *resource; // 指向资源数组的指针const struct platform_device_id *id_entry; // 设备ID表char *driver_override; // 用于覆盖默认的驱动程序 };主要字段解释 name: 设备的名称用于匹配设备和驱动程序。id: 设备ID用于区分具有相同名称的多个设备。通常设置为 -1。dev: 嵌入的 struct device 结构体表示通用设备结构包含设备的通用属性和方法。num_resources: 资源数量表示设备所使用的资源数量。resource: 指向资源数组的指针资源数组包含了设备所使用的各种资源如内存、I/O 端口、中断等。id_entry: 指向设备ID表的指针用于在驱动程序中匹配特定的设备。driver_override: 用于指定一个特定的驱动程序覆盖默认的驱动程序。 一般只需要关注nameid, dev以及使用的资源描述 struct resource 结构体描述 resource 结构体描述了设备使用的硬件资源例如内存地址范围、中断号等。每个设备可以有多个资源这些资源通过 platform_device 结构体中的 resource 字段进行管理。 struct resource {resource_size_t start; // 资源的起始地址resource_size_t end; // 资源的结束地址const char *name; // 资源的名称unsigned long flags; // 资源的类型和属性struct resource *parent, *sibling, *child; // 资源树结构中的节点关系 };主要字段解释 start: 资源的起始地址或起始值例如内存映射地址的开始位置。end: 资源的结束地址或结束值例如内存映射地址的结束位置。name: 资源的名称用于识别资源。flags: 资源的类型和属性通过标志位表示。例如IORESOURCE_MEM 表示内存资源IORESOURCE_IRQ 表示中断资源。parent: 指向父资源的指针用于构建资源层次结构。sibling: 指向兄弟资源的指针用于构建资源层次结构。child: 指向子资源的指针用于构建资源层次结构。 编译加载之后就会在 /sys/bus/platform/devices/ 下注册新的设备 2.2注册platform驱动 #include linux/init.h #include linux/module.h #include linux/device.h #include linux/platform_device.h #include linux/mod_devicetable.h static const struct platform_device_id driver_id_table[] {{ .name my_platform_device },{ } // 结尾必须有一个空的元素 }; static int my_platform_driver_probe(struct platform_device *dev ) {printk(my_platform_driver_probe);// 通过 probe 函数 拿到硬件资源描述 probe函数将传递 platform_device结构体函数struct resource *res;int irq;//获取内存资源res platform_get_resource(dev,IORESOURCE_MEM,0);printk(IORESOURCE_MEM start addr is %x ,res-start);//获取中断资源res platform_get_resource(dev,IORESOURCE_IRQ,0);printk(IRQ number is %d ,res-start);//获取完资源进行下一步的操作return 0; } static int my_platform_driver_remove(struct platform_device *dev ) {printk(my_platform_driver_remove);return 0; }static struct platform_driver my_platform_driver {.probe my_platform_driver_probe,.remove my_platform_driver_remove,.driver {.name my_platform_device, // 平台设备名一致.owner THIS_MODULE,},.id_table driver_id_table, // id_table 的优先级更高 }; static int __init platform_driver_init(void) {int ret platform_driver_register(my_platform_driver);if (ret)printk(KERN_ALERT Failed to register platform driver\n);elseprintk( platform_driver_init!\n);return ret; } static void __exit platform_driver_exit(void) {platform_driver_unregister(my_platform_driver);printk(KERN_ALERT platform_driver_exit!\n); } module_init(platform_driver_init); module_exit(platform_driver_exit); MODULE_AUTHOR(Marxist); MODULE_LICENSE(GPL); MODULE_DESCRIPTION(a simple of platform_driver); 我们只需要注册驱动即可,重点为platform_driver结构体 platform_driver结构体为 Linux 内核中用于描述和管理平台驱动程序的一个重要结构体。它定义了驱动程序的主要回调函数和一些元数据这些信息允许内核在设备插入和移除时正确地调用驱动程序的相关函数。 结构体定义 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 (*resume)(struct platform_device *);struct device_driver driver;const struct platform_device_id *id_table;bool prevent_deferred_probe; };probe: 类型: int (*probe)(struct platform_device *);功能: 当匹配的设备被注册时内核调用此函数来初始化设备。通常在此函数中进行设备的硬件资源获取和初始化。返回值: 返回0表示成功负值表示失败。 remove: 类型: int (*remove)(struct platform_device *);功能: 当设备被移除时内核调用此函数来清理和释放设备资源。返回值: 返回0表示成功负值表示失败。 shutdown: 类型: void (*shutdown)(struct platform_device *);功能: 当系统关闭或重启时内核调用此函数来关闭设备。通常用于执行设备的关机操作。 suspend: 类型: int (*suspend)(struct platform_device *, pm_message_t state);功能: 当设备进入挂起suspend状态时内核调用此函数来保存设备的状态。返回值: 返回0表示成功负值表示失败。 resume: 类型: int (*resume)(struct platform_device *);功能: 当设备从挂起状态恢复时内核调用此函数来恢复设备的状态。返回值: 返回0表示成功负值表示失败。 driver: 类型: struct device_driver功能: 包含通用的驱动程序信息如驱动程序的名字、模块所有者等。platform_driver 通过嵌入 device_driver 结构体继承了大部分通用的驱动程序接口。关键字段: name: 驱动程序的名字应该与 platform_device 的名字匹配。owner: 指向该驱动程序模块的指针通常设置为 THIS_MODULE。 id_table: 类型: const struct platform_device_id *功能: **指向设备 ID 表的指针用于设备和驱动程序之间的匹配。**优先使用id_table进行名称匹配如果匹配不上将会进行device_driver 中的名字匹配 prevent_deferred_probe: 类型: bool功能: 控制是否防止延迟探测。默认值是 false。 注意必须要实现probe 函数当平台设备和平台驱动匹配成功就会调用probe函数通常在此完成一些资源的初始化和调用。 例如 static int my_platform_driver_probe(struct platform_device *dev ) {printk(my_platform_driver_probe);// 通过 probe 函数 拿到硬件资源描述 probe函数将传递 platform_device结构体函数struct resource *res;int irq;//获取内存资源res platform_get_resource(dev,IORESOURCE_MEM,0);printk(IORESOURCE_MEM start addr is %x ,res-start);//获取中断资源res platform_get_resource(dev,IORESOURCE_IRQ,0);printk(IRQ number is %d ,res-start);//获取完资源进行下一步的操作return 0; }2.3效果演示 无论先加载平台设备模块还是平台驱动模块就会调用probe函数具体效果如下
http://www.w-s-a.com/news/998547/

相关文章:

  • 陕西建设厅人才网站ai生成logo免费
  • 建设家居网站村建站什么部门
  • 网站建设+青海龙岗区网站建设
  • 精品课网站建设网络公司名字怎么取
  • 化工网站制作用户体验设计案例
  • 如何在微信公众平台上建立微网站垂直门户网站怎么做
  • 关于销售网站有哪些内容品牌网站建设小科6a蚪
  • 免费制作网站平台哪个好湖南企业建网站
  • 灞桥微网站建设株洲百姓网
  • 儿童网站建设互联网怎么学
  • 重庆建网站的公司集中在哪里中煤第五建设有限公司网站
  • 成都网站建设987net运维需要掌握哪些知识
  • 网站建设师个人简介怎么写WordPress头像美化插件
  • 网站优化知识销售管理系统c语言
  • 桂林市网站设计厦门自己建网站
  • 网站seo哪里做的好东莞做网站优化的公司
  • 休闲采摘园网站建设政务公开和网站建设工作的建议
  • 长沙网站建设哪个公司好PHP amp MySQL网站建设宝典
  • 代码编辑器做热点什么网站好湛江网站建设哪家好
  • php网站开发概念网站开发岗位职责任职责格
  • asp 网站源码 下载西安自适应网站建设
  • 白领兼职做网站贵阳网站设计哪家好
  • 热水器网站建设 中企动力企业网站开发需要多钱
  • 北京市建设工程信息网交易网站静态网页模板免费下载网站
  • 福田欧曼服务站网站前台设计
  • 网站做系统叫什么软件吗注册域名需要实名认证吗
  • jsp网站开发教学视频ui设计风格
  • 注册网站建设开发怎么自己做导航网站
  • 设计做网站品牌咖啡主题网页界面设计
  • 个人网站制作总体设计宿迁房价2023年最新房价