注册Platform设备-14

Posted 杨斌并

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了注册Platform设备-14相关的知识,希望对你有一定的参考价值。

注册Platform设备

平台总线注册一个device

device.c里面写的是硬件资源,这里的硬件资源是指寄存器的地址,中断号,时钟等硬件资源。
在Linux内核里面,我们是用一个结构体来描述硬件资源的。

  • #include <linux/platform_device.h>
struct platform_device {
	//设备id,一般写-1
	int id;
	//平台总线进行匹配的时候用到的name,/sys/bus/platform/devices/name
	const char *name;
	//内嵌的device结构体
	struct device dev;
	//资源的个数
	u32 num_resources;
	//device里面的硬件资源。
	struct resource *resource;
	struct device	dev;
	};
struct resource {
	//资源的起始
	resource_size_t start;
	//资源的结束
	resource_size_t end;
	//资源的名字
	const char *name;
	//资源的类型
	unsigned long flags;
};
//IO的内存
#define IORESOURCE_IO
//表述一段物理内存
#define IORESOURCE_MEM
//表示中断
#define IORESOURCE_IRQ

device的注册

extern int platform_device_register(struct platform_device *);

device的卸载

extern void platform_device_unregister(struct platform_device *);

代码

  • devicebee.c
#include <linux/init.h>
#include <linux/module.h>
#include <linux/platform_device.h>


struct resource beep_res[] =
{
    [0] = {
        .start  = 0x20AC000,
        .end    = 0x20AC000,
        .flags  = IORESOURCE_MEM,
        .name   = "GPIO5_DR"
    }
};

void beep_release(struct device *dev){
    printk("beep_release \\n");
}

struct platform_device beep_device = 
{
    .name = "beep_test",
    .id = -1,
    .resource = beep_res,
    .num_resources = ARRAY_SIZE(beep_res),
    .dev = {
        .release = beep_release
    }
};


static int deivce_init(void){
    printk(KERN_EMERG "hello world enter \\n");
    int ret;
    ret = platform_device_register(&beep_device);
    return ret;
}

static void device_exit(void){
    printk(KERN_EMERG "hello world exit! \\n");
    platform_device_unregister(&beep_device);
}

module_init(deivce_init);
module_exit(device_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("LIYU");

安装完驱动后,执行下面的会看到对应name的设备

ls /sys/bus/platform/devices

以上是关于注册Platform设备-14的主要内容,如果未能解决你的问题,请参考以下文章

平台设备驱动注册及使用分析

Platform device/driver注册过程 (转)

[platform]Device和Driver注册顺序

linux platform device/driver--Platform Device和Platform_driver注册过程

linux驱动之platform总线

驱动开发读书笔记. 0.04 linux 2.6 platform device register 平台设备注册 1/2 共2篇