linux platform驱动实例之leds-gpio(一)

为更好地理解platform_device,platform_driver,platform_bus_type之间的关系,本博文以leds-gpio为例做一个讲解,硬件平台是am335x评估板.该节描述platform_device相关的内容.

1.定义platform_device设备leds_gpio

static struct platform_device leds_gpio = {
	.name	= "leds-gpio",
	.id	= -1,
	.dev	= {
		.platform_data	= &gpio_led_info,
	},
};

以上代码定义了一个platform_device,其中平台相关的数据platform_data成员保存的是gpio_led_info指针, gpio_led_info定义如下

struct gpio_led_platform_data {
	int 		num_leds; // led灯个数
	const struct gpio_led *leds; // led灯数组

#define GPIO_LED_NO_BLINK_LOW	0	/* No blink GPIO state low */
#define GPIO_LED_NO_BLINK_HIGH	1	/* No blink GPIO state high */
#define GPIO_LED_BLINK		2	/* Please, blink */
	int		(*gpio_blink_set)(unsigned gpio, int state,
					unsigned long *delay_on,
					unsigned long *delay_off);
};
static struct gpio_led_platform_data gpio_led_info = {
	.leds		= gpio_leds,// led灯数组
	.num_leds	= ARRAY_SIZE(gpio_leds),// led灯个数
};

2.platform_device设备leds_gpio 注册

static void gpio_led_init(int evm_id, int profile)
{
......
	err = platform_device_register(&leds_gpio);
......
}

platform_device_register函数的调用过程如下:
arch_initcall(customize_machine);//.initcall3.init
customize_machine()->init_machine()->am335x_evm_init()->am335x_evm_setup()->setup_dk()->_configure_device()->gpio_led_init()->platform_device_register();

platform_device_register调用主要实现以下功能:
1).创建/sys/devices/platform/leds-gpio目录
2).创建连接/sys/bus/platform/devices/leds-gpio -> /sys/devices/platform/leds-gpio
3).创建连接/sys/devices/platform/leds-gpio/subsystem -> ./sys/bus/platform
3).添加设备到platform_bus_type->p->klist_devices列表
4).添加device到platform_bus树
5).匹配驱动

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值