嵌入式C编程12C编写Linux驱动.ppt
Linux内核模块内核模块执行编译,生成内核模块系统已安装模块01demo模块在系统上的符号链接02dev_init函数已执行03内核模块加载安装模块,使模块成为系统的一部分04Linux内核模块内核模块卸载卸载模块,使模块脱离系统2dev_exit函数已执行1Linux内核模块内核模块交叉开发在Linux宿主机上开发的内核模块最终要在开发板上加载所以需要按开发板的CPU体系架构(ARM)编译内核模块交叉开发ARM架构内核模块交叉编译:Makefile内核模块交叉开发030201执行编译,生成目标板的内核模块检查模块文件属性ARM架构内核模块交叉开发插入U盘,会自动挂载到/udisk启动开发板Linux系统将装有demo.ko模块的U盘插上开发板内核模块交叉开发在开发板上挂载与卸载1233445ABDC1个小时*复用性不好接口变动会影响所有应用消费电子**C编写Linux驱动Linux驱动概念01Linux驱动模块02Linux驱动实例03课程安排什么是驱动程序裸机程序也是驱动!驱动程序-模式一驱动程序-模式二嵌入式软件嵌入式软件层次结构213通常嵌入式系统都配置OS层,用于实现对硬件资源的统一管理保护操作:避免程序错误操作硬件,破坏系统互斥操作:系统上存在多个程序需要同时访问同一个硬件设备的情况4同步操作:系统上有多个程序对硬件设备访问必须保证先后顺序的情况OS屏蔽硬件直接访问操作系统(OS)需要控制硬件设备,就需要用到设备驱动程序1驱动程序通常作为操作系统的一部分(OS=Kernel+DeviceDriver)2驱动程序负责将(来自应用APP层)操作系统的操作请求,转化为特定物理设备控制器能够理解的命令3OS上的硬件驱动向上为Linux系统(应用APP层)提供访问硬件的调用接口中间层封装了对硬件的相关包含功能向下用于控制硬件:通常是调用裸机程序,读写硬件寄存器达到控制硬件的目的Linux驱动程序的功能:Linux驱动程序3Linux驱动实例21Linux驱动概念Linux驱动模块课程安排Linux内核模块Linux驱动程序都是以模块的形式存在的,通常成为驱动模块为了便于驱动的开发,引进内核模块的概念修改或者增加驱动,不需要重新编译内核只需要加载或者卸载模块,就可以动态增加或者删除内核的功能内核模块开发调试完成后,有需要才将代码融入内核一起编译,成为内核的一部份Linux内核模块内核模块编写:dev.cLinux内核模块X86架构内核模块编译:Makefile1233445ABDC1个小时*复用性不好接口变动会影响所有应用消费电子**