Writing device drivers in Linux: A brief tutorial(二)
来源:互联网 发布:华网1588建站 编辑:程序博客网 时间:2024/05/01 23:01
内核空间和硬件设备之间的接口函数
在内核空间也有一些函数来控制设备或者用于内核和硬件之间的信息交换,下表阐述了这些概念.这个表也会随着一些概念的引入而完善.
Events
Kernel functions
Read data
Write data
表 设备驱动事件和与之相联系的介于内核空间和硬件设备之间的函数
第一个驱动程序:在用户空间加载和卸载驱动
我将给你演示如何开发你的第一个Linux设备驱动,这个驱动将会以模块的形式加载到内核。
为了达到以上目的,我将编写如下的程序,并将其命名为nothing.c
#include<linux/module.h>
MODULE_LICENSE("DualBSD/GPL");
因为目前内核的发行版本是2.6.x,所以编译模块已经变得稍微复杂一些了。首先,你需要有一个完整的,被编译过的内核源码树。如果你有一个Debian Sarge系统,你可以按照附录B的步骤来完成(在本文章的后面)。在以后,我将假定你使用的是2.6.8的内核版本。
然后,你需要编写一个makefile文件,对于我们当前的这个例子来说,我们应该编写一个名为“Makefile”的文件,它的内容如下:
obj-m := nothing.o
和以往的内核版本不同,根据你准备将之后生成的模块用在哪个版本的内核中,你在编译这个模块的时候就必须使用和你这个目标内核相同的内核。为了编译它,你可以键入下面的命令:
$ make -C/usr/src/kernel-source-2.6.8 M=pwd modules
这个非常简单的模块属于内核空间,在它被加载的时刻起它就成为了内核的一部分。在用户空间,你可以以root用户的权限键入以下命令行加载这个模块:
# insmod nothing.ko
使用insmod命令可以将这个模块安装到内核。但是,实际上这个特殊的模块本身并没有很大的用处。
为了检查我们的模块是否正确安装,我们可以键入以下命令来查看所有我们已经安装好的模块:
# lsmod
最后,我们可以使用以下命令来移除我们已经安装的模块:
# rmmod nothing
现在,通过再次键入lsmod命令,你可以确认这个模块在内核中已经不存在了。
所有的总结到以下表中为:
Events
User functions
Kernel functions
Load module
Insmod
Open device
Read device
Write device
Close device
Remove module
rmmod
表 设备驱动事件和与对应的在用户空间和内核空间的交互函数
- Writing device drivers in Linux: A brief tutorial(二)
- Writing device drivers in Linux: A brief tutorial(一)
- Writing device drivers in Linux: A brief tutorial(三)
- Writing device drivers in Linux: A brief tutorial(四)
- Writing device drivers in Linux: A brief tutorial(五)
- Writing device drivers in Linux: A brief tutorial
- Writing device drivers in Linux: A brief tutorial (1)
- Writing device drivers in Linux: A brief tutorial
- Writing Device Drivers: Tutorial 目录
- Writing Network Device Drivers for Linux
- Writing Device Drivers: Tutorial 第一章 设备驱动程序的概念
- Writing USB Device Drivers
- Writing Portable Device Drivers
- Writing a Linux device driver
- Writing a Linux device driver
- Linux Kernel Threads in Device Drivers
- Linux Kernel Threads in Device Drivers
- Linux Kernel Threads in Device Drivers
- IP/TCP 报文头和相应结构体
- near指针,far指针,huge指针
- NPOI受保护视图
- AD用户帐户属性对照表
- Oracle11gR2 RAC实时应用集群(1)在Redhat Enterprise Linux5 x86_64下的集群(ASM篇)
- Writing device drivers in Linux: A brief tutorial(二)
- 黑马程序员--IO之字节流
- IOS 页面跳转的数据传递方式
- Android中处理崩溃异常
- 【Linux】制作和部署WAR包和在TOMCAT中部署WAR
- word rectangle
- some books
- 字节顺序&字节对齐
- 区别js中的3/2(结果1.5))与 java 中的 2/3(结果:0)