![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux-driver-note
King Seal
这个作者很懒,什么都没留下…
展开
-
Linux设备驱动开发详解-Note(5)---Linux 内核及内核编程(1)
Linux 内核及内核编程(1) Linux 2.6 内核的特点 Linux 2.6 相对于 Linux 2.4 有相当大的改进,主要体现在如下几个方面。 1.新的调度器 2.6 版本的 Linux 内核使用了新的进程调度算法,它在高负载的情况下执行得极其出色,并且当有很多处理器时也可以很好地扩展。 2.内核抢占 在 2.6 版本的 Linux 内核中,内核任务可以被抢占,从原创 2013-07-08 18:02:10 · 5822 阅读 · 4 评论 -
Linux设备驱动开发详解-Note(15)--- Linux 设备驱动中的并发控制(2)
Linux 设备驱动中的并发控制(2) 成于坚持,败于止步 信号量 信号量的使用 信号量(semaphore)是用于保护临界区的一种常用方法,它的使用方式和自旋锁类似。与自旋锁相同,只有得到信号量的进程才能执行临界区代码。但是,与自旋锁不同的是,当获取不到信号量时,进程不会原地打转而是进入休眠等待状态。 Linux 系统中与信号量相关的操作主要有如下 4 种。 1.定义信号量原创 2013-07-17 18:59:04 · 2759 阅读 · 0 评论 -
Linux设备驱动开发详解-Note(17)---Linux 设备驱动中的阻塞与非阻塞 I/O(2)
Linux 设备驱动中的阻塞与非阻塞 I/O(2) 成于坚持,败于止步 轮询操作 轮询的概念与作用 在用户程序中,select()和 poll()也是与设备阻塞与非阻塞访问息息相关的论题。使用非阻塞 I/O 的应用程序通常会使用 select()和 poll()系统调用查询是否可对设备进行无阻塞的访问。select()和 poll()系统调用最终会引发设备驱动中的 poll()函数被执原创 2013-07-17 19:32:08 · 2488 阅读 · 0 评论 -
Linux设备驱动开发详解-Note(16)---Linux 设备驱动中的阻塞与非阻塞 I/O(1)
Linux 设备驱动中的阻塞与非阻塞 I/O(1) 成于坚持,败于止步 阻塞与非阻塞 I/O 阻塞操作是指在执行设备操作时若不能获得资源则挂起进程,直到满足可操作的条件后再进行操作。被挂起的进程进入休眠状态,被从调度器的运行队列移走,直到等待的条件被满足。而非阻塞操作的进程在不能进行设备操作时并不挂起,它或者放 弃,或者不停地查询,直至可以进行操作为止。 驱动程序通常需要提供这原创 2013-07-17 19:22:41 · 2820 阅读 · 1 评论 -
Linux设备驱动开发详解-Note(18)---Linux 设备驱动中的异步通知与异步 I/O(1)
Linux 设备驱动中的异步通知与异步 I/O(1) 成于坚持,败于止步 异步通知的概念与作用 阻塞与非阻塞访问、poll()函数提供了较好的解决设备访问的机制,但是如果有了异步通知整套机制就更加完整了。 异步通知的意思是:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬件上“中断”的概念,比较准确的称谓是“信号驱动的异步 I/O”。信号是在软原创 2013-07-17 20:02:16 · 3349 阅读 · 0 评论 -
Linux设备驱动开发详解-Note(13)--- 字符设备驱动(2)
字符设备驱动(2) 成于坚持,败于止步 globalmem程序源码 #include #include #include #include #include #include #include #include #include #include #include #include #define GLOBALMEM_SIZE 0x1000 /*4KB*/ #d原创 2013-07-16 18:48:01 · 3409 阅读 · 0 评论 -
Linux设备驱动开发详解-Note(14)--- Linux 设备驱动中的并发控制(1)
Linux 设备驱动中的并发控制(1) 成于坚持,败于止步 并发与竞态 并发(concurrency)指的是多个执行单元同时、并行被执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问则很容易导致竞态(race conditions)。例如,对于 globalmem 设备,假设一个执行单元 A 对其写入 3000 个字符“a”,而另一个执行单元 B 对其写原创 2013-07-16 19:58:04 · 3836 阅读 · 1 评论 -
Linux设备驱动开发详解-Note(12)--- 字符设备驱动(1)
字符设备驱动(1) 成于坚持,败于止步 Linux 字符设备驱动结构 cdev 结构体 在 Linux 2.6 内核中使用 cdev 结构体描述字符设备,cdev 结构体的定义如代码所示。 1 struct cdev 2 { 3 struct kobject kobj; /* 内嵌的 kobject 对象 */ 4 struct module *owner原创 2013-07-10 22:46:09 · 4938 阅读 · 0 评论 -
Linux设备驱动开发详解-Note(11)--- Linux 文件系统与设备文件系统(3)
Linux 文件系统与设备文件系统(3) 成于坚持,败于止步 sysfs 文件系统与 Linux 设备模型 1.sysfs 文件系统 Linux 2.6 内核引入了 sysfs 文件系统,sysfs 被看成是与 proc、devfs 和 devpty 同类别的文件系统,该文件系统是一个虚拟的文件系统,它可以产生一个包括所有系统硬件的层级视图,与提供进程和状态信息的 proc 文件系原创 2013-07-10 20:18:37 · 4061 阅读 · 0 评论 -
Linux设备驱动开发详解-Note(10)--- Linux 文件系统与设备文件系统(2)
Linux 文件系统与设备文件系统(2) 成于坚持,败于止步 Linux 文件系统目录结构 进入 Linux 根目录(即“/”,Linux 文件系统的入口,也是处于最高一级的目录),运行“ls –l”命令,可以看到 Linux 系统包含以下目录。 1./bin 包含基本命令,如 ls、cp、mkdir 等,这个目录中的文件都是可执行的。 2./boot Linux 系统原创 2013-07-09 20:07:23 · 5508 阅读 · 0 评论 -
Linux设备驱动开发详解-Note(9)--- Linux 文件系统与设备文件系统(1)
Linux 文件系统与设备文件系统(1) 成于坚持,败于止步 文件操作的相关系统调用 Linux 的文件操作系统调用(在 Windows 编程领域,习惯称操作系统提供的接口为 API)涉及创建、打开、读写和关闭文件。 1.创建 int creat(const char *filename, mode_t mode); 参数 mode 指定新建文件的存取权限,它同 umask原创 2013-07-09 19:22:24 · 4116 阅读 · 0 评论 -
Linux设备驱动开发详解-Note(1)---设备驱动概述(1)
设备驱动概述(1) 设备驱动的作用 任何一个计算机系统的运行都是系统中软硬件协作的结果,没有硬件的软件是空中楼阁,而没有软件的硬件则只是一堆废铁。硬件是底层基础,是所有软件得以运行的平台,代码最终会落实为硬件上的组合逻辑与时序逻辑;软件则实现了具体应用,它按照各种不同的业务需求而设计,满足了用户的需求。硬件较固定,软件则很灵活,可以适应各种复杂多变的应用。可以说,计算机系统的软硬件互相成就了原创 2013-07-08 14:48:31 · 9592 阅读 · 5 评论 -
Linux设备驱动开发详解-Note(3)---驱动设计的硬件基础(1)
驱动设计的硬件基础(1) 处理器分类 不做过多说明,处理器类型很多,大同小异 存储器 存储器可分为只读储存器(ROM)、闪存(Flash)、随机存取存储器(RAM)、光介质存储器和磁介质存储器。 ROM 还可再细分为不可编程 ROM、可编程 ROM(PROM)、可擦除可编程 ROM(EPROM)和电可擦除可编程 ROM(E2PROM),E2PROM 完全可以用软件来擦写,已经原创 2013-07-08 15:38:08 · 6250 阅读 · 1 评论 -
Linux设备驱动开发详解-Note(4)---驱动设计的硬件基础(2)
驱动设计的硬件基础(2) 接口与总线 串口 RS-232、RS-422 与 RS-485 都是串行数据接口标准,最初都是由电子工业协会(EIA)制定并发布的。 RS-232 在 1962 年发布,命名为 EIA-232-E。之后发布的 RS-422 定义了一种平衡通信接口,它是一种单机发送、多机接收的单向、平衡传输规范,被命名为TIA/EIA-422-A 标准。RS-422 改进了 RS原创 2013-07-08 16:27:00 · 5208 阅读 · 0 评论 -
Linux设备驱动开发详解-Note(7)---Linux 内核模块(1)
Linux 内核模块(1) Linux 内核模块简介 Linux 内核的整体结构非常庞大,其包含的组件也非常多。我们怎样把需要的部分都包含在内核中呢? 一种方法是把所有需要的功能都编译到 Linux 内核。这会导致两个问题,一是生成的内核会很大,二是如果我们要在现有的内核中新增或删除功能,将不得不重新编译内核。 有没有一种机制使得编译出的内核本身并不需要包含所有功能,而在这些功能需要原创 2013-07-08 19:01:43 · 4449 阅读 · 0 评论 -
Linux设备驱动开发详解-Note(2)---设备驱动概述(2)
设备驱动概述(2) Linux 设备驱动 设备的分类及特点 计算机系统的硬件主要由 CPU、存储器和外设组成。随着 IC 制造工艺的发展,目前,芯片的集成度越来越高,往往在 CPU 内部就集成了存储器和外设适配器。ARM、PowerPC、MIPS 等处理器都集成了 UART、I2C 控制器、USB 控制器、SDRAM 控制器等,有的处理器还集成了片内 RAM 和 Flash。 驱动针对原创 2013-07-08 15:12:10 · 6398 阅读 · 0 评论 -
Linux设备驱动开发详解-Note(6)---Linux 内核及内核编程(2)
Linux 内核及内核编程(2) Linux 下的C编程举例 零长度数组 GNU C 允许使用零长度数组,在定义变长对象的头结构时,这个特性非常有用。例如: struct var_data { int len; char data[0]; }; char data[0]仅仅意味着程序中通过 var_data 结构体实例的 data[index]成员可以访问 len 之后原创 2013-07-08 18:39:33 · 4422 阅读 · 1 评论 -
Linux设备驱动开发详解-Note(8)---Linux 内核模块(2)
Linux 内核模块(2) 模块加载函数 Linux 内核模块加载函数一般以_ _init 标识声明,典型的模块加载函数的形式如代码所示: 1 static int _ _init initialization_function(void) 2 { 3 /* 初始化代码 */ 4 } 5 module_init(initialization_funct原创 2013-07-08 19:33:52 · 3908 阅读 · 0 评论 -
Linux设备驱动开发详解-Note(19)---Linux 设备驱动中的异步通知与异步 I/O(2)
Linux 设备驱动中的异步通知与异步 I/O(2) 成于坚持,败于止步 Linux 2.6 异步 I/O AIO 概念与 GNU C 库函数 Linux 系统中最常用的输入/输出(I/O)模型是同步 I/O。在这个模型中,当请求发出之后,应用程序就会阻塞,直到请求满足为止。这是很好的一种解决方案,因为调用应用程序在等待 I/O 请求完成时不需要使用任何中央处理单元(CPU)。但是原创 2013-07-17 20:21:44 · 4527 阅读 · 0 评论