嵌入式Linux设备驱动程序开发.ppt
文本预览下载声明
嵌入式Linux设备驱动程序开发 电子信息工程学院 杨昕欣 本讲主要内容 交叉编译环境 Makefile简介 设备驱动相关概念 设备驱动程序的开发流程 I2C驱动程序实例 交叉编译环境 嵌入式系统的开发需要宿主机(Host pc),因为嵌入式系统一般没有大容量的存储设备。 由于host pc的处理器与嵌入式微处理器通常不同,为了生成能够在嵌入式系统中运行的代码,需要进行交叉编译。 交叉编译:在宿主机上编译可以在目标系统上运行的二进制文件。 交叉编译环境 一般包括: Gcc编译器,for c,c++ Binutil,一些辅助工具,包括objdump(可反编译二进制文件)、as(汇编器)、ld(链接器)等 Glibc,提供系统调用和基本函数的c库 C header Gdb调试器 交叉编译环境的建立 以root用户登陆linux系统 将/usr/local目录备份,然后清空 将BSP0.3.6/Toolchain/中的 armLinuxXToolChain01.tar.gz glibc2.1.3.tar.gz inst_glibc2.1.3 ftp上传到/usr/local 执行 # tar xvfz armLinuxXToolChain01.tar.gz # tar xvfz glibc2.1.3.tar.gz # rm -rf arm-elf-linux/lib # cp -R arm/gnu/release/arm-linux/lib arm-elf-linux/ 嵌入式Linux一般调试方法 使用Gdbserver和gdb 在目标系统上运行gdbserver 在主机上运行gdb 一般通过以太网建立连接 Makefile简介 Linux开发一般有大量源代码,为了避免大量重复的键入gcc进行编译,定义了Makefile文件,用于自动编译 # make 该操作会调用Makefile Makefile一般定义了: Gcc编译工具 编译命令 目标文件 依赖关系 Makefile简介 例: test.o: test.c test.h gcc -c -g test.c -g 生成调试信息 -c 只编译不链接成为可执行文件 -o 确定输出文件名称 -O 优化 -w 禁止警告信息 -Wall 打开所有类型警告信息 Makefile变量 makefile 变量-预定义变量 $* 不包含扩展名的目标文件名 $+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。 $ 第一个依赖文件的名称 $? 所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。 $@ 目标的完整名称。 $^ 所有的依赖文件,以空格分开,不包含重复的依赖文件。 简单Make指令说明 # Make clean ——清除编译过程的中间文件 # make dep ——设置Makefile文件中各个目标所依赖的文件列表 使用Makefile方法 嵌入式Linux中Makefile更加复杂 可在已有Makefile文件基础上更改 Linux系统中的设备文件 Linux将所有外部设备看成是一类特殊文件,称之为“设备文件”,如果说系统调用是Linux内核和应用程序之间的接口,那么设备驱动程序则可以看成是Linux内核与外部设备之间的接口。设备驱动程序向应用程序屏蔽了硬件在实现上的细节,使得应用程序可以像操作普通文件一样来操作外部设备 设备驱动程序是内核重要部分 设备驱动的大致结构 设备驱动的作用 设备驱动是位于应用和物理设备之间的软件层,负责完成二者间的I/O操作; 在LINUX系统里,对用户程序,设备驱动隐藏了设备的具体细节,为不同设备提供了一致的接口; 设备驱动是嵌入式系统开发的重要内容之一 设备驱动完成的工作 对设备初始化和释放 把数据从内核传送到硬件和从硬件读取数据 读取应用程序传送给设备文件的数据和回送应用程序请求的数据 检测和处理设备出现的错误 设备文件类型 通常有字符设备、块设备、网络设备三种 字符设备 字符设备是能够像字节流一样被访问的设备,例如字符终端、串口、键盘、声卡、LCD、触摸屏、扫描仪、打印机、并口、鼠标、游戏杆等。 块设备 块设备是指支持面向块访问的设备,每块包含2的N次幂字节数据,例如IDE设备(磁盘)、floppy disk 、CD-ROM、Ramdisk等。 块设备接口必须支持挂装文件系统。 网络设备——即能够和其他主机交换数据的设备接口。 主设备号与次设备号 LINUX系统中,设备由一个主设备号和一个次设备号来标识; 主设备号唯一标识了设备类型,即设备驱动程序类型,它是块设备表或字符设备表中设备表项的索引。 次设
显示全部