文档介绍:课程设计
题目内核模块编程和设备驱动程序
学生姓名朱小波学号 2009112127
专业计算机科学与技术班级 20091121
指导教师张莉莉
完成日期 2012年 1月 5日
Linux内核模块编程与设备驱动程序
摘要:本文给出了一个linux字符设备驱动程序的例子,:在内存虚拟一个字符设备,并由编写的驱动程序加载到系统,.
关键词: 字符设备驱动;内核模块编程;虚拟;模拟
1 前言
驱动程序是应用程序和硬件设备的一个接口,linux设备驱动程序属于内核的一部分,熟练驱动程序和内核模块开发需要硬件知识,了解操作系统的实现,需要了解内核基础知识,,主要完成了内核树的建立、内核的编译、字符设备的模拟、字符设备的驱动、,然后给出了实现一个设备驱动程序的总体框架,最后根据框架一步步详细完成了一个字符设备驱动程序,,本设备驱动程序可以作为操作系统实验课程的实例.
2 设备驱动程序和内核模块编程相关基础知识
,. .
模块不被编译在内核中,,,假如模块出现问题.,也许会带来系统的崩溃.
:
启动时,由函数 void inti_modules 来初始化模块,..
如由系统需要,则调用一系列以sys 开头的函数,对模块进行操作. 如:sys_creat_modules,sys_inti_modules , sys_deldte_modules等等.
这里会用到一些模块的数据就结构,在/usr/scr/linux/include/linux/ 中.
块的加入有两种方法:一是手动加入:如:insmod ,:
$mount -t msdos /dev/hdd /mnt/d FAT模块,以支持MSDOS的文件系统.
模块编程
写一个模块,,因为,模块需要在内核模式下运行,. 这些函数有:void put _user、memcpy_tofs 等等,. 假如版本不通可能造成,内核模块不能编译,,:系统崩溃等.
:
int init_module :这个函数在插入内核时启动,在内核中注册一定的功能函数,,内核可以安全的卸载.
int cleanup_module:.
应用程序是一个进程,编程从主函数main()开始,主函数main返回即是进程结束,使用glibc的库.
驱动程序是一系列内核函数,函数入口和出口不一样,使用Linux内核的函数,这些函数由内核在适当的时候来调用,这些函数可以用来完成硬件访问等操作.
设备一般分为字符设备(char device)、块设备(block device)、work device).
图1:设备的分类
i字符设备特点:
像字节流一样来存取的设备( 如同文件)
通过/dev下的文件系统结点来访问
通常至少需要实现 open, close, read, 和 write 等系统调用
只能顺序访问的数据通道,不能前后移动访问指针.
特例:比如framebuffer设备就是这样的设备,应用程序可以使用mmap或lseek访问图像的各个区域
ii块设备特点:
块设备通过位于/dev 目录的文件系统结点来存取
块设备和字符设备的区别仅仅在于内核内部管