Linux驱动程序开发_第1页
Linux驱动程序开发_第2页
Linux驱动程序开发_第3页
Linux驱动程序开发_第4页
Linux驱动程序开发_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、准备 Linux的安装及基本操作 C语言语法 Gcc开发工具链的使用与调试批呈生成用户LDV z并限制组空间为2G学生可以在服务器上开发linux驱动,但必须拿到具有全部权限的机器上进行测试 学生可自行安装windows xp与linux(debian或utunbu )参考文献 Linux设备歩动3 LDD3中文版.pdf-Linux驱动开发第三版(英文原版)第2页/共24页设备驱动程序的作用直接进入内核,对系统的任何东西逬行操作Linux设备驱动程序完全是以文件的形式出现的 Linux设备驱动程序后缀2.6为ko , 26以前为0第3页/共24页开发环境的搭建对于Linux驱动程序开发而言,

2、除了编译器gcc之外,内核源码是必须的,而且源码必须经过正确的编译, 安装正确的模块,即通过make (编译),make modules (模块编译),make modulesnstall (安装 模块)。第4页/共24页安装内核源码 apt-get install linux-tree-2.6.18 apt-get install linux-kernel-headers apt-get install install linux-headers-vuname内核开发头文件的正确安装也是很重要的,否则如果没有正确安装则在驱动程序编译时会出现Vlib/modules/'uname -r

3、'/build can't exist.p的错误提示。配置内核以root身份进入内核源码的目录,执行以下命令: make mrproper make mepuconfig(如果没有安装ncurses库,此命令将不能 被正确执行,可以通过命令apt-get install Iibncurses5-dev 安装ncurses库乏后再痴行此配晝命令) make prepare make modules_prepare(如果不执行此命令在编译驱动程序 时将会出现"/bin/sh: line 1: scripts/modpost: No such file or directo

4、ry, in stage 2”的错误)内核的任务逬程管理(*)内存管理(*)文件系统设备控制网络第7页/共24页内核模块可加载驱动程序是模块化的KemdJ=s=lw_& OXMumoryConsoles,etc.Networkinterfaces第9页/共24页驱动程序可根据要求逬行加载与卸载 insmodrmmod第10页/共24页驱动程序分类设备在/dev目录下都有专门的设备文件名,对驱动程序的操作是通过这些设备文件来进行的字符设备一次读写少臺数据,如串口设备块设备一次读写大星数据,如硬盘网络接口与其他驱动程序不同,专门分为一类第12页/共24页个例子 Hello, driver-

5、world第笛页/共24页内核 Makefile与传统的应用程序Makefile有很大不同,内核编译系统将会多做一些工作 obj-m := hello.o有一个模块hello.ko将从hello.o中产生如果模块依赖于非默认的产生方式 obj-m := module.o module-objs := filel.o file2.o make -C /kernel-26 M =、pwd、modules-C /kernel-2.6改变目录,其目录是为了找到内核的顶层Makefile M Jpwd、,回到生成模块的目录第14页/共24页scull这是一字符驱动程序,通过它来学习字符驱动程序的开发方法

6、 Simple Character Utility for Loading Localities的缩写这是一个不需要额外硬件设备支持的驱动程序,使用一块内存作为设备可以使用cp cat以及io重走向操作命令第15页/共24页驱动程序主数与次数Major主数(是系统分配给加载驱动程序的数据),minor次数(由用户定义的驱动程序的附本号)字符驱动程序在/dev目录下有对应的文件,所有与驱动相关的操作都转化成对这个文件的操作。此文件的 属性为c ,同时拥有主数与次数二个特征第16页/共24页分配设备号_ 驱动程序使用函数int registerchrdev_region(dev_t first,

7、unsigned int count,char name);来获得系统分配的主号一一一First主号分配的范围,count分配的数星,name为驱动程序名-如果成功返回值为0另一个函数int alloc_chdev_region(dev_t *devf unsigned int firstminocunsigned int count, char *name);第17页/共24页释放设备号 void unregister_chrdev_region(dev_t first, unsigned int count);模块卸载时使用第18页/共24页系统已经加载的模块 Cat /proc/devices加载模块后根据这个文件中的内容来创建关联的驱动文件第19页/共24页sculljoad是一个scull的安装脚本-分析只需将变呈名更改便可以用于其他驱动的安装第20页/共24页scull_ unload这是scull的卸载脚本分析第21页/共24页scull.init支持参数的脚本,类似系统服务操作可完成load , unload等操作分析第22页/共24页文件操作对驱动程序的操作都可转化成对文件的操作在内核中共有三种相关的数据结构 file_operations# filejnode第23页/共24页File Operation

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论