Linux Platform概览

Platform 相关文件
相关文件作用举例提供的函数,结构
include/linux/platform_device.h定义
struct platform_device;
struct platform_device_info;
struct platform_driver;
声明注册,卸载等函数。
int platform_device_register ( struct platform_device * );
void platform_device_unregister ( struct platform_device * );
drivers/base/platform.c定义platform_device的操作函数,注册,卸载,匹配等函数原型。static int platform_drv_probe(struct device *_dev);
static int platform_match(struct device *dev, struct device_driver *drv);
Platform 相关结构体
struct platform_device {
	const char	*name;
	int		id;
	bool		id_auto;
	struct device	dev;
	u32		num_resources;		//num!!!   统计资源数量
	struct resource	*resource;	
	const struct platform_device_id	*id_entry;
	char *driver_override; /* Driver name to force a match */
	/* MFD cell pointer */
	struct mfd_cell *mfd_cell;
	/* arch specific additions */
	struct pdev_archdata	archdata;
};
//函数指针,抽象相关功能,参数均为平台设备, 驱动操作设备
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;
};

struct platform_device_info {
		struct device *parent;
		struct fwnode_handle *fwnode;
		const char *name;
		int id;
		const struct resource *res;
		unsigned int num_res;
		const void *data;
		size_t size_data;
		u64 dma_mask;
		struct property_entry *properties;
};

重要函数

作用函数
注册/卸载驱动void platform_driver_register/unregister(struct platform_driver *);
注册/卸载设备int platform_device_register/unregister(struct platform_device *);
批量注册设备int platform_add_devices(struct platform_device **, int);
获取平台资源struct resource *platform_get_resource(struct platform_device *,unsigned int, unsigned int);
获取中断int platform_get_irq(struct platform_device *, unsigned int);
set drv datastatic inline void platform_set_drvdata(struct platform_device *pdev, void *data)
驱动与设备匹配static int platform_match(struct device *dev, struct device_driver *drv)

driver

static struct platform_driver led_driver = {
	.driver.name	= "omap_dbg_led",
	.driver.pm	= &fpga_dev_pm_ops,
	.probe		= fpga_probe,
};
static int __init fpga_init(void)
{
	if (machine_is_omap_h4()
			|| machine_is_omap_h3()
			|| machine_is_omap_h2()
			|| machine_is_omap_perseus2()
			)
		return platform_driver_register(&led_driver);
	return 0;
}

device

static struct platform_device smsc_lan9217_device = {
	.name = "smsc911x",
	.id = -1,
	.dev = {
		.platform_data = &smsc911x_config,
	},
	.num_resources = ARRAY_SIZE(smsc911x_resources),
	.resource = smsc911x_resources,
};



int __init mxc_expio_init(u32 base, u32 intr_gpio)
{
	u32 p_irq = gpio_to_irq(intr_gpio);
	……
	brd_io = ioremap(BOARD_IO_ADDR(base), SZ_4K);
	……
	gpio_request(intr_gpio, "expio_pirq");
	gpio_direction_input(intr_gpio);
	……
	platform_device_register(&smsc_lan9217_device);

}

match 在platform总线创建时就应用

struct bus_type platform_bus_type = {
	.name		= "platform",
	.dev_groups	= platform_dev_groups,
	.match		= platform_match,
	.uevent		= platform_uevent,
	.pm		= &platform_dev_pm_ops,
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值