| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> linux设备驱动开发基础(一) -> 正文阅读 |
|
[系统运维]linux设备驱动开发基础(一) |
?参考:《Linux驱动开发入门与实战》 ????????设备驱动程序时计算机硬件与应用程序的接口,是软件系统与硬件系统沟通的桥梁。 1. 设备驱动的分类 ????????Linux将设备分为3大类,分别是字符设备、块设备、网络设备。每一个字符设备或块设备都在/dev目录下对应一个设备文件。linux用户程序通过设备文件(或称设备节点)使用驱动程序操作字符设备和块设备。 1.1 字符设备是指只能一个字节一个字节读写数据的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后顺序。字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和LED设备等。 1.2 块设备是指可以从设备的任意位置读取一定长度数据的设备。其读取数据不必按照先后顺序,可以定位到设备的某一具体位置。块设备包括硬盘、磁盘、U盘和SD卡等。块设备比字符设备需要有更复杂的结构来描述。在Linux内核中,块设备与字符设备驱动有完全不同的API。 1.3 网络设备主要负责主机之间的数据交换,是面向数据包的接受和发送而设计的。网络设备在Linux操作系统中是一种非常特殊的设备,其没有实现类似字符设备和块设备的read()、write()、ioctl()等函数。网络设备通过套接字接口来完成网络数据传输。 2. 用户态和内核态 ????????Linux操作系统分为用户态和内核态。用户态处理应用层的业务,然后通过系统调用向内核态发送操作请求,内核态响应用户态的请求,从而实现对具体硬件设备的操作。 ????????应用态程序只能通过系统调用或硬件中断访问内核态程序。当应用程序执行系统调用或被硬件中断挂起时,Linux操作系统会从应用态切换到内核态。当系统调用或硬件中断处理完成完成后,操作系统会从内核态返回到用户态,继续执行应用程序。 ????????应用态和内核态的划分,有以下优点: 2.1 容易移植:应用态不需要了解硬件的具体工作原理,就能很好的操作硬件设备。 2.2 安全性:应用态和内核态处于不同的地址空间,应用态程序不会因为一些错误破坏内核态程序,也就不会因为应用态的程序错误导致内核崩溃。 3. 模块机制 ????????模块是可以在运行时加入内核的代码。模块机制的引入一方面扩展了内核的功能,另一方面减小了内核的大小。 ????????模块是由编译好的目标代码组成的,可以使用insmod命令将模块加载到正在运行的内核,可以使用rmmod命令将一个未使用的模块从内核删除(但是不能删除一个正在使用的模块)。 ????????模块在内核启动时装在称为静态装载,在内核已经运行时装载成为动态装载。 ????????一个模块最基本的框架代码如下:
4. 注意 ????????内核及驱动程序的开发与应用程序开发有很大不同,最重要的差异如下: 4.1 内核及驱动程序开发时不能访问C库,因为C库是使用内核中的系统调用来实现的,而且是在用户空间实现的。 4.2 内核及驱动程序开发时必须使用GNU C,因为Linux操作系统从一开始就使用的是GNU C,虽然也可以使用其他编译工具,但是需要对以前的代码做大量的修改。 4.3 内核支持异步终端、抢占和SMP,因此内核及驱动程序开发时必须时刻注意同步和并发。 4.4 内核只有一个很小的定长堆栈。 4.5 内核及驱动程序开发时缺乏像用户空间那样的内存保护机制。 4.6 内核及驱动程序开发时浮点数很难使用,应该使用整形数。 4.7 内核及驱动程序开发要考虑可移植性,因为不同的平台,驱动程序是不兼容的。? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 11:43:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |