说句老实话,我不太喜欢现在Linux 2.6这套bus, platform, device,device driver 的模式。我觉得这种模式破坏了Linux的“简单就是美”的哲学,原来那套驱动已经可以包容所有驱动,也可以直接注册驱动文件和管理,而且以前的驱动在现在的结构上也还可以使用,把它在注册到bus这棵树上又有什么用呢?虽然可以看到一点对于移植性和平台管理方面的优点,但是我认为现在这种驱动编程的风格越来越像Windows的风格,很不直观和简约,让人理解起来相当的困惑。
牢骚发完了,bus结构还得继续,说说platform_device和platform_driver的匹配吧!一般来说系统上来在init_init_machine的对应函数ap_init中注册一些这个平台的设备,如下:
static struct resource cbp_sdmmc_resource[]=
{
[0]={
.start=HWD_MMC_BASE,
.end=HWD_MMC_BASE+0xff0,
.flags=IORESOURCE_MEM
},
[1]={
.start=IRQ_SDMMC,
.end=IRQ_SDMMC,
.flags=IORESOURCE_IRQ
},
[2]={
.start=IRQ_SDMMC_CD,
.end=IRQ_SDMMC_CD,
.flags=IORESOURCE_IRQ
}