Linux内核驱动之paltform总线

现实的linux设备和驱动通常都需要挂接在一种总线上,比较常见的总线有USBPCI总线等。但是,在嵌入式系统里面,SoC系统中集成的独立的外设控制器、挂接在SoC内存空间的外设却不依附与此类总线。基于这样的背景下,2.6内核加入了platform虚拟总线。platform机制将设备本身的资源注册进内核,有内核统一管理,在驱动程序使用这些资源时使用统一的接口,这样提高了程序的可移植性

平台设备描述

平台设备使用Struct Platform_device来描述:

struct platform_device {

const char *name; /*设备名*/

int id; /*设备编号,配合设备名使用*/

struct device dev;

u32 num_resources;

struct resource *resource; /*设备资源*/

}

Struct Platform_device的分配使用:

struct platform_device *platform_device_alloc(const char *name, int id)

参数:

name: 设备名

id: 设备id,一般为-1

注册平台设备,使用函数: int platform_device_add(struct platform_device *pdev)

设备资源

resource是一个指向platform资源数组的指针,该数组中有num_resource个资源,看一下资源结构体:

struct resource {

resource_size_t start; //资源的起始物理地址

resource_size_t end; //资源的结束物理地址

const char *name; //资源的名称

unsigned long flags; //资源的类型,比如MEM,IO,IRQ类型

struct resource *parent, *sibling, *child; //资源链表指针

}

常见的flagsIORESOURCE_MEMIORESOURCE_IRQ。其他的可以自己查看include/linux/ioport.h

如果fiagsIORESOURCE_MEMstartend分别是该设备的连续的开始和结束地址,如果不连续你可以定义两个或者更多的资源结构体。

如果flagsIORESOURCE_IRQstartend分别是该设备连续的开始和结束的连续中断号,如果不连续可以分开定义。

当然,如果地址或者中断只有一个,你可以将startend定义成一样。

设备资源-例

static struct resource s3c_wdt_resource1 = {

.start = 0x44100000,

.end = 0x44200000,

.flags = IORESOURCE_MEM,

}

struct resource *platform_get_resource(struct platform_device *dev, unsigned int type, unsigned int num)

参数:

dev: 资源所属的设备

type: 获取的资源类型

num: 获取的资源数

platform_get_resource(pdev, IORESOURCE_IRQ, 0)获取中断号

平台驱动描述

平台驱动使用struct platform_driver 描述:

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 device_driver driver;

}

平台驱动注册

平台驱动注册使用函数:int platform_driver_register(struct platform_driver *)

实例Platform       实例.rar   

### VMware与Windows Hypervisor Platform的兼容性分析 VMware支持多种虚拟化环境,包括KVM和VMware本身,并通过libvirt提供管理接口[^1]。然而,在讨论VMware与Windows Hypervisor Platform (WHP) 的兼容性和配置时,需要注意两者的设计目标和技术架构存在差异。 #### 技术背景 Windows Hypervisor Platform 是微软开发的一个轻量级虚拟化框架,主要用于容器隔离和其他特定场景下的虚拟化需求。而VMware是一个功能全面的企业级虚拟化平台,提供了更复杂的管理和性能优化工具。两者的底层实现机制不同,因此在某些情况下可能存在冲突或不完全兼容的情况。 #### 配置注意事项 当尝试在同一主机上运行VMware产品(如Workstation、ESXi或其他组件)以及启用Windows Hypervisor Platform时,需注意以下几点: 1. **硬件辅助虚拟化资源的竞争** Windows Hypervisor Platform 和 VMware 可能会争夺相同的硬件辅助虚拟化资源(如Intel VT-x 或 AMD-V)。如果操作系统已经启用了 WHP,则可能会影响 VMware 虚拟机的正常启动或性能表现[^3]。 2. **模块参数调整** 对于Linux内核中的可加载模块,可以使用`modinfo -p ${modulename}`命令查看当前可用的参数列表,并通过修改 `/sys/module/${modulename}/parameters/` 下的相关文件来动态调整这些参数。这一步骤对于解决潜在的驱动程序冲突尤为重要。 3. **应急处理设置** 如果遇到严重的系统崩溃情况,可以通过指定 `vmpanic=` 参数执行z/VM CP指令作为调试手段之一[^2]。尽管此选项主要针对IBM Z系列架构上的特殊用途,但它体现了如何利用低级别的控制机制应对极端状况的理念。 #### 推荐实践 为了确保最佳体验并减少不必要的干扰,请考虑以下建议: - 确认宿主操作系统的版本和支持状态; - 测试不同的组合方式以找到最稳定的方案; - 安装最新的补丁更新保持软件栈处于良好维护之中。 ```bash # 示例:查询某个模块的所有参数 modinfo -p kvm_intel ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值