文档详情

嵌入式应用程序设计-设备驱动.ppt

发布:2025-02-28约2.48千字共10页下载文档
文本预览下载声明

嵌入式应用程序设计

第八章嵌入式Linux设备驱动编程知识点回顾TCP/IP模型套接字TCP套接字编程UDP套接字编程设备驱动的基本概念Linux内核与驱动的关系Linux内核模块结构内核模块命令本次课内容?对设备进行管理,包括实时参数设置,以及提供对设备的操作接口;设备驱动概念?对设备初始化和释放;是处理和操作硬件控制器的软件。驱动程序是内核的一部分,是操作系统内核与硬件设备的直接接口,驱动程序屏蔽了硬件的细节,完成以下功能:?检测和处理设备出现的错误。?读取应用程序传送给设备文件的数据或者回送应用程序请求的数据;设备驱动编程基础—设备驱动字符设备通常指以字节为单位顺序读写的设备,如并口设备、虚拟控制台等。块设备通常指以块为单位随机读写的设备,如IDE硬盘、SCSI硬盘、光驱等。网络设备通常是指通过网络能够与其他主机进行数据通信的设备,如网卡等。Linux系统的设备分类设备驱动编程基础—设备驱动在linux中任何设备都是文件。所有设备的设备文件节点都在/dev目录下。#:ls–al/dev内核代码内核接口内核机制和服务动态性可设置可装载设备驱动程序的特点设备驱动编程基础—设备驱动设备驱动编程基础—设备驱动设备驱动程序与整个软硬件系统的关系1.Linux的内核模块Linux内核采用可加载内核模块化设计(LoadableKernelModule,LKM)内核模块:是一些可以让操作系统内核在需要时载入和执行的代码。是一种目标对象文件,通常由一组函数和数据结构组成。内核的一个模块可以以两种方式被编译和加载。直接编译进Linux内核,随同Linux启动时加载;编译成一个可加载和删除的模块。8.1设备驱动编程基础—内核模块编程C语言程序Linux内核模块运行用户空间内核空间入口main()module_init()指定;出口main() module_exit()指定;编译gcc–cMakefile连接ldinsmod运行直接运行insmod调试gdbkdbug,kdb,kgdb等2.Linux内核模块与应用程序的区别3.内核模块相关命令insmodmodule.oLoadthemodule注意,只有超级用户才能使用这个命令rmmodmoduleUnloadthemodulelsmodListallmodulesloadedintothekernel这个命令和cat/proc/modules等价modprobe[-r]modulename–Loadthemodulespecifiedandmodulesitdependslsmodinsmodhello.ormmodhellomodprobe?/lib/modules/linux版本号/modules.dep?/etc/modprobe.confmodeproble–rhello#includelinux/module.h#includelinux/init.h#includelinux/kernelMODULE_LICENSE(GPL);staticint__inithello_init(void){ printk(“Hellokernel….\n); return0;}staticvoid__exithello_exit(void){ printk(“byebye….\n);}module_init(hello_init);module_exit(hello_exit);生成makefile文件010203make-C/usr/src/linux-2.4.20/M=$(shellpwd)modulesall:obj-m:=hello.oMakefile文件make-C/usr/src/linux-2.4.20/M=$(shellpwd)modulescleanclean:$ls

hello.c?Makefile

$make

make-CM=/wu/char_8modules

$ls

hello.c??h

显示全部
相似文档