文档介绍:LINUX LINUX 驱动开发驱动开发郑灵翔郑灵翔 ******@xmu. ******@xmu. 厦门大学通讯工程系厦门大学通讯工程系郑灵翔郑灵翔 Agenda Agenda 基本原理基本原理内核模块内核模块设备驱动的结构设备驱动的结构 Linux Linux 内核设备模型内核设备模型中断处理中断处理各种接口设计与驱动开发实例各种接口设计与驱动开发实例厦门大学通讯工程系厦门大学通讯工程系郑灵翔郑灵翔 LINUX LINUX 设备的分类设备的分类字符设备字符设备––串口,终端,触摸屏串口,终端,触摸屏–– ls ls -l /dev/ttyS0 -l /dev/ttyS0 crw-rw-rw crw-rw-rw - 1 root - 1 root uucp uucp 4, 64 4 4, 64 4 月月 1 19:56 /dev/ttyS0 1 19:56 /dev/ttyS0 块设备块设备–– FLASH FLASH , , RAMDISK RAMDISK ,硬盘,硬盘–– ls ls -l /dev/mtdblock3 -l /dev/mtdblock3 brw-r--r brw-r--r -- 1 505 -- 1 505 505 505 31, 3 Feb 19 2005 /dev/mtdblock3 31, 3 Feb 19 2005 /dev/mtdblock3 网络设备网络设备 ifconfig ifconfig -a -a 厦门大学通讯工程系厦门大学通讯工程系郑灵翔郑灵翔设备文件与设备号设备文件与设备号用户通过设备文件访问设备用户通过设备文件访问设备每个设备用一个主设备号和次设备号标识每个设备用一个主设备号和次设备号标识厦门大学通讯工程系厦门大学通讯工程系郑灵翔郑灵翔设备驱动的功能设备驱动的功能管理管理 I/O I/O 设备设备上层软件的抽象操作与设备操作的转换上层软件的抽象操作与设备操作的转换厦门大学通讯工程系厦门大学通讯工程系郑灵翔郑灵翔内核模块内核模块 Linux Linux 内核运行时动态扩展的一种技术内核运行时动态扩展的一种技术一组可以动态加载一组可以动态加载/ /卸载的代码卸载的代码 Linux Linux 驱动以内核模块的方式实现驱动以内核模块的方式实现厦门大学通讯工程系厦门大学通讯工程系郑灵翔郑灵翔 LINUX LINUX 内核模块的框架内核模块的框架 static static int int init_routine init_routine (void) (void) { {……} } void void cleanup_routine(void cleanup_routine(void ) ){ {……} } module_init(init_routine module_init(init_routine ); ); module_exit(cleanup_routine module_exit(cleanup_routine ); ); MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL"); 厦门大学通讯工程系厦门大学通讯工程系郑灵翔郑灵翔内核模块的编译和加载内核模块的编译和加载 Kconfig Kconfig Makefile Makefile 厦门大学通讯工程系厦门大学通讯工程系郑灵翔郑灵翔 Kconfig Kconfig 与与 Makefile Makefile 的关系的关系厦门大学通讯工程系厦门大学通讯工程系郑灵翔郑灵翔 Kconfig Kconfig 语法语法 config <symbol> config <symbol> <config options> <config options> config options config options ––类型定义类型定义––依赖性定义依赖性定义––帮助定义帮助定义