linux-driver-develop

上传人:j7****6 文档编号:62239057 上传时间:2018-12-18 格式:PPT 页数:24 大小:212KB
返回 下载 相关 举报
linux-driver-develop_第1页
第1页 / 共24页
linux-driver-develop_第2页
第2页 / 共24页
linux-driver-develop_第3页
第3页 / 共24页
linux-driver-develop_第4页
第4页 / 共24页
linux-driver-develop_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《linux-driver-develop》由会员分享,可在线阅读,更多相关《linux-driver-develop(24页珍藏版)》请在金锄头文库上搜索。

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

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

3、d cant exist.”的错误提示。,配置内核,以root身份进入内核源码的目录,执行以下命令: make mrproper make menuconfig(如果没有安装ncurses库,此命令将不能被正确执行,可以通过命令apt-get install libncurses5-dev安装ncurses库之后再执行此配置命令) make prepare make modules_prepare(如果不执行此命令在编译驱动程序时将会出现“/bin/sh: line 1: scripts/modpost: No such file or directory, in stage 2.”的错误),

4、内核的任务,进程管理(*) 内存管理(*) 文件系统 设备控制 网络,内核模块可加载,驱动程序是模块化的,驱动程序可根据要求进行加载与卸载 insmod rmmod,驱动程序分类,设备在/dev目录下都有专门的设备文件名,对驱动程序的操作是通过这些设备文件来进行的 字符设备 一次读写少量数据,如串口设备 块设备 一次读写大量数据,如硬盘 网络接口 与其他驱动程序不同,专门分为一类,一个例子Hello-driver-world,内核Makefile,与传统的应用程序Makefile有很大不同,内核编译系统将会多做一些工作 obj-m := hello.o 有一个模块hello.ko将从hello

5、.o中产生 如果模块依赖于非默认的产生方式 obj-m := module.o module-objs := file1.o file2.o,make -C /kernel-2.6 M=pwd modules -C /kernel-2.6 改变目录,其目录是为了找到内核的顶层Makefile M=pwd,回到生成模块的目录,scull,这是一字符驱动程序,通过它来学习字符驱动程序的开发方法 Simple Character Utility for Loading Localities的缩写 这是一个不需要额外硬件设备支持的驱动程序,使用一块内存作为设备 可以使用cp,cat以及io重定向操作命

6、令,驱动程序主数与次数,Major主数(是系统分配给加载驱动程序的数据),minor次数(由用户定义的驱动程序的附本号) 字符驱动程序在/dev目录下有对应的文件,所有与驱动相关的操作都转化成对这个文件的操作。此文件的属性为c,同时拥有主数与次数二个特征,分配设备号,驱动程序使用函数int register_chrdev_region(dev_t first, unsigned int count,char *name);来获得系统分配的主号 First主号分配的范围,count分配的数量,name为驱动程序名 如果成功返回值为0 另一个函数int alloc_chrdev_region(de

7、v_t *dev, unsigned int firstminor,unsigned int count, char *name);,释放设备号,void unregister_chrdev_region(dev_t first, unsigned int count); 模块卸载时使用,系统已经加载的模块,Cat /proc/devices 加载模块后根据这个文件中的内容来创建关联的驱动文件,scull_load,是一个scull的安装脚本 分析 只需将变量名更改便可以用于其他驱动的安装,scull_unload,这是scull的卸载脚本 分析,scull.init,支持参数的脚本,类似系统服务操作 可完成load,unload等操作 分析,文件操作,对驱动程序的操作都可转化成对文件的操作 在内核中共有三种相关的数据结构 file_operations, file,inode,File Operations,defined in ,是一组与文件操作相关的函数指针 具有的操作就指向一个函数,没有的操作可以设为NULL 看scull中的这个结构 完成的函数指针说明见第3章P9,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号