米乐m6官网
您现在的位置:首页 > 产品展示 > LED驱动

嵌入式Linux设备驱动开发之:字符设备驱动编程

发布时间:2022-04-15 14:27:29 来源:米乐m6官网

  程序能够运用模块的方法动态加载到内核中去。加载模块的方法与以往的应用程序开发有很大的不同。以往在开发应用程序时都有一个main()函数作为程序的进口点,而在驱动开发时却没有main()函数,模块在调用insmod指令时被加载,此刻的进口点是init_module()函数,通常在该函数中完结设备的注册。相同,模块在调用rmmod指令时被卸载,此刻的进口点是cleanup_module()函数,在该函数中完结设备的卸载。在设备完结注册加载之后,用户的应用程序就能够对该设备进行必定的操作,如open()、read()、write()等,而驱动程序便是用于完结这些操作,在用户应用程序调用相应进口函数时履行相关的操作,init_module()进口点函数则不需求完结其他如read()、write()之类功用。

  用户应用程序调用设备的一些功用是在设备驱动程序中界说的,也便是设备驱动程序的进口点,它是一个在linux/fs.h中界说的structfile_operations结构,这是一个内核结构,不会出现在用户空间的程序中,它界说了常见文件I/O函数的进口,如下所示:

  这儿界说的许多函数是否跟第6章中的文件I/O体系调用相似?其实其时的体系调用函数经过内核,终究调用对应的structfile_operations结构的接口函数(例如,open()文件操作是经过调用对应文件的file_operations结构的open函数接口而被完结)。当然,每个设备的驱动程序不必定要完结其间一切的函数操作,若不需求界说完结时,则只需将其设为NULL即可。

  structinode结构供给了关于设备文件/dev/driver(假定此设备名为driver)的信息,structfile结构供给关于被翻开的文件信息,首要用于与文件体系对应的设备驱动程序运用。structfile结构较为重要,这儿列出了它的界说: