1. 平台总线介绍
平台总线模型将一个驱动分成两部分 device.c
, driver.c
。一个描述硬件, 一个控制硬件。
平台总线通过比较字符串, 将name相同的device.c
和driver.c
匹配到一起来控制硬件。
driver通过平台总线去拿到device.c内容。
平台总线的优点是减少重复代码 提高效率。
类似.h
和.c
的关系
平台总线的原则是先分离, 后搭档。
2.注册Platform设备
在Linux内核里用platform_device
的结构体描述硬件资源
struct platform_device {
const char *name; //device的名字, 将和driver的名字进行匹配
int id; //名字+id 为/sys/bus/platform/devices 下的名称
bool id_auto; // 自动设置id 一般不用
struct device dev;
u32 num_resources; // 存储资源的个数
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 resource {
resource_size_t start; //根据不同资源 理解不同 如 flags = REG 则代表起始地址
resource_size_t end;
const char *name; // 资源名称 如中断:irq
unsigned long flags; // 资源类型. 如IO MEM REG IRQ DMA BUS
unsigned long desc;
struct resource *parent, *sibling, *child;
};
补充:
该结构体的名称为name + id
可以在/sys/bus/platform/devices
下查看。假设id=-1
则id
不会显示。
下面是device的示例代码
执行完成在在/sys/bus/platform/devices
目录下可以找到