说句老实话,我不太喜欢现在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
&n

本文探讨了Linux 2.6内核中platform_device和platform_driver的匹配过程,批评了新的驱动模型过于复杂。在系统启动时,通过注册平台设备和资源,然后使用platform_driver_register声明对应的驱动。匹配方式通常基于设备名,或者通过id_table进行更复杂的匹配。在平台设备和驱动匹配后,通过driver_data在probe阶段识别具体平台。
最低0.47元/天 解锁文章
2741

被折叠的 条评论
为什么被折叠?



