Writing device drivers in Linux: A brief tutorial(一)

最近看到一篇国外关于Linux内核入门的比较好的指南,于是就尝试翻译了一下。由于是第一次尝试翻译,加之英语水平有限,错误在所难免,欢迎拍砖!

由于没有大段的时间来做这个,一下翻译完是肯定不可能的,故每天翻译一部分。转载请指明出处,尊重别人的劳动成功,谢谢!



编写系统驱动:简单指南

像一个内核开发者一样编写Linux设备驱动的简要介绍

作者:Xavier Calbet

2006-04-26

 

预备知识要求

为了能够开发Linux内核驱动,具备下列知识是必要的:

l  C 编程经验:需要深入了解一些C语言开发经验,例如指针的使用,位操纵函数等。

l  微处理器编程:了解微型计算机内部工作原理是很有必要的:内存编址、中断等。这些内容对于一个汇编语言编程者来说应该会很熟悉。

 

Linux中会有好几种不同的设备。为了简洁,本文只介绍了以模块形式加载的字符设备驱动。使用的内核版本是2.6.x(特别地,是在Debian Sarge下的2.6.8内核,目前这个版本在Debian下是稳定的)。

 

用户空间和内核空间:

         当你在编写设备驱动的时候,你必须能够区分“用户空间”和“内核空间”

l  内核空间:Linux(内核)使用一种简单而且有效的方式来管理计算机的硬件,并为用户提供了一种简单而又统一的接口。相同地,内核,特别是它的的设备驱动,就充当了介于终端用户或者程序员与硬件之间的桥梁。任何组成内核的一部分的子程序或者函数都(例如模块和设备驱动)被认为是内核空间的一部分。

l  用户空间:终端用户程序,例如Unix shell或者其他基于GUI的应用程序(例如Kpresenter)都是用户空间的一部分。很明显,这些应用程序都需要和系统硬件进行交互。但是,他们不会亲自去完成,而是通过内核支持函数来完成。

所有这些表1所示:


表1  应用程序所在的用户空间,模块或者设备驱动所在的内核空间

用户空间和内核空间的接口函数

         内核提供给用户空间一些子程序和函数,通过这些子程序和函数中断应用编程者可以完成和硬件的交互。通常,在Unix或者Linux系统当中,这些会话交换式通过读写文件的子程序或者函数来完成的。因为在Unix系统当中,在用户角度,设备是被当中文件来看待的。

         另一方面,在内核空间,Linux也提供了若干个函数或者子程序来完成底层和硬件直接交互的任务,同时允许将内核的信息传递到用户空间。

         通常,在用户空间允许使用设备或者文件的每个函数,在内核都存在函数与之对等(这些函数可以完成将内核空间的信息传递到用户空间,反之亦然)。这些都表示在下表当中。目前这个表格还是空白的,当之后引入不同设备驱动概念后我们会将其填满。

Events

User functions

Kernel functions

Load module

 

 

Open device

 

 

Read device

 

 

Write device

 

 

Close deviece

 

 

Remove module

 

 

表  设备驱动事件和与对应的在用户空间和内核空间的交互函数



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值