Linux系统platform设备驱动全透析
在代码清单5中,模块加载和卸载函数仅仅通过platform_driver_register()、platform_driver_unregister()函数进行platform_driver的注册与注销,而原先注册和注销字符设备的工作已经被移交到platform_driver的probe()和remove()成员函数中。 代码清单5未列出的部分与原始的globalfifo驱动相同,都是实现作为字符设备驱动核心的file_operations的成员函数。 为了完成在板文件中添加globalfifo这个platform设备的工作,需要在板文件(对于LDD6410而言,为arch/arm/mach-s3c6410/ mach-ldd6410.c)中添加相应的代码,如代码清单6。 代码清单6 globalfifo对应的platform_device 1 static struct platform_device globalfifo_device = { 2 .name = "globalfifo", 3 .id = -1, 4 }; 对于LDD6410开发板而言,为了完成上述globalfifo_device这一platform_device的注册,只需要将其地址放入arch/arm/mach-s3c6410/ mach-ldd6410.c中定义的ldd6410_devices数组,如: static struct platform_device *ldd6410_devices[] __initdata = { + & globalfifo_device, #ifdef CONFIG_FB_S3C_V2 &s3c_device_fb, #endif &s3c_device_hsmmc0, ... } 在加载LDD6410驱动后,在sysfs中会发现如下结点: /sys/bus/platform/devices/globalfifo/ /sys/devices/platform/globalfifo/ 留意一下代码清单5的第48行和代码清单6的第2行,platform_device和platform_driver的name一致,这是二者得以匹配的前提。 (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |