驱动
scutth
这个作者很懒,什么都没留下…
展开
-
Debugging Techniques [LDD3 04]
kernel相较于user,debug起来更加困难,原因有很多,比如kernel中代码的执行是并发的,靠event来驱动;而且kernel一旦出现了bug,很容易把整个系统搞挂,导致后面的现场无法trace,本章就介绍了一些kernel中的debug技巧。Debugging Support in the Kernelkernel的发行版都是production code,也就是说里面包含的...原创 2020-04-20 22:41:39 · 156 阅读 · 0 评论 -
Build and Run Modules [LDD3 02]
模块化是Linux kernel driver的立身之本,几乎所有的device driver都是module driver,在kernel启动的时候动态加载,学会如何编写module driver是编写device driver的必修课。#include <linux/init.h> #include <linux/module.h> MODULE_LICENS...原创 2020-03-27 22:43:40 · 336 阅读 · 0 评论 -
Memory Mapping and DMA [LDD3 15]
Memory Management in LinuxAddress TypesLinux kernel中有很多的地址类型,比如最简单的就是虚拟地址和物理地址。在用户程序中看到的地址都是虚拟地址,和硬件使用的物理地址不同。kernel中的地址类型如下:User virtual addressesuser space programmer看到的地址就是用户态虚拟地址,可能是32bit,...原创 2020-04-15 13:08:20 · 861 阅读 · 0 评论 -
Linux kernel slub debug
在device driver开发的过程中,有时候会碰到memory相关的问题,比如memory leak,use after free,out of boundary,double free等等。因为device driver运行在kernel环境,kernel是一个global的runtime,driver分配或者释放的memory都是由kernel负责管理,而且所有的device driver...原创 2020-04-13 14:26:50 · 1311 阅读 · 0 评论 -
The Linux Device Model [LDD3 14]
kernel中的设备模型分为如下几种:Power management and system shutdownCommunications with user spaceHotpluggable devicesDevice classesObject lifecycles以一个鼠标为例,看一下它的设备模型:这个一个简化的模型,设备模型本身比较复杂,kernel内部已...原创 2020-04-12 18:56:58 · 417 阅读 · 0 评论 -
PCI Drivers [LDD3 12]
因为很多device都是PCI device,所以本章重点看一下。PCI(Peripheral Component Interconnect)。首先明确一点,PCI是总线类型,总线有两种接口类型组成,electrical interface和programming interface,软件层面都属于programming interface。The PCI InterfacePCI由一...原创 2020-04-11 11:48:47 · 379 阅读 · 0 评论 -
Data Types in the Kernel [LDD3 11]
kernel中各种各样的数据结构,主要三类:1, int等标准的C类型2, 表明大小或者长度的类型,如u32等3, kernel自己的结构体,如pid_t等原创 2020-04-11 11:02:55 · 150 阅读 · 0 评论 -
Interrupt Handling [LDD3 10]
device的IO region可以用来控制device,但是还不够。一个device,往往会有外界有交互,当外界发生了某个事件,需要device做出某种响应,driver也需要做处理。那就要有一种机制,让device能够通知到driver,这就是中断的作用。driver能做的,其实就是实现一个handler,当device中断产生时,handler能够正确处理这个中断就可以了。在讲中断之前,...原创 2020-04-08 22:58:37 · 425 阅读 · 0 评论 -
Communicating with Hardware [LDD3 09]
本章开始讲一些跟hardware有关的操作,比如I/O port,register等。device driver的角色要清楚,它只是中间层,向上有kernel,user application,向下就是actual hardware。作为driver,核心功能必然是驱动硬件。I/O Ports and I/O Memory每一个外设都要通过register来控制,大多数设备都有不止一个...原创 2020-04-08 13:19:34 · 226 阅读 · 0 评论 -
Allocating Memory [LDD3 08]
本章讨论从kernel分配memory的同样方法,并尽可能与架构无关。kmalloc相对来说,是最简单的分配memory的方式,因为用法和user mode的malloc非常相似。kernel的kmalloc分配的memory在物理地址上是连续的,并且里面包含了随机的数据,需要使用者自己清零。#include <linux/slab.h>void *kmalloc(size...原创 2020-04-06 22:50:57 · 428 阅读 · 0 评论 -
Time Delays and Deferred Work [LDD3 07]
kernel提供了一些跟时间管理相关的函数,device driver中往往需要这些函数来实现driver的部分功能。1, 测量时间和比较时间2, 如何获取当前时间3, 延迟某些操作,直到某个时刻4, 异步函数的调度整个kernel的运行非常的依赖与时间,因为kernel里面很多的工作需要做同步,如果计时器不准确,那kernel运行起来就不可控了。kernel的时间需要靠硬件的...原创 2020-04-05 17:01:31 · 221 阅读 · 0 评论 -
Advanced Char Driver Operations [LDD3 06]
本章讲的是driver的高级操作,比如:1, 实现了ioctl,device driver可以满足user mode一些特定的操作。2, 和user mode做好sync的几种方式。3, 如何让process进入sleep,以及如何wake up。4, 非阻塞IO操作,以及读写完成以后如何通知user mode。...原创 2020-04-04 11:33:36 · 178 阅读 · 0 评论 -
Concurrency and Race Conditions [LDD3 05]
Concurrency and Its Management并发和竞争条件,这个计算机操作系统里经典话题,只看文字体会不出什么,如果真正做过devcie driver的人都会深有体会。并发是一个很复杂的场景,复杂到没有人能预测当前的code会是怎么样的环境下执行,看似简答的device driver code,也许正在执行的时候因为时间片用完,CPU被切走了;可能中断发生,CPU处理中断去了;...原创 2020-04-01 23:23:45 · 157 阅读 · 0 评论 -
Char Drivers [LDD3 03]
本章开始讲解char device drivers.在linux中设备可通过文件进行访问,在/dev目录下,有很多device,通过ls -l可以看到这些device有major/minor number。majoy number用来表明该device和哪个driver关联,minor number被kernel用来确定当前被使用的是哪个device,因为同一个driver可以驱动多个devi...原创 2020-03-30 13:28:07 · 256 阅读 · 0 评论 -
introduction to device drivers【LDD3 01】
做Linux下驱动开发有段时间了,但是有时候对Linux kernel涉及到的部分依然不甚明了,所以打算再把kernel相关的一些书籍过一遍,同时分享下自己的理解。既然是做driver,就从ldd3开始吧。今天是第一篇,从导论开始吧,虽然看上去导论很浅显,但是往往能起到提纲挈领的左右,有助于对device driver有个全盘的了解。Linux kernel虽然复杂和庞大,但是最核心的部分仍然...原创 2020-03-24 23:36:33 · 346 阅读 · 0 评论 -
驱动程序与应用程序之间的通信
驱动程序必须与应用程序进行通信,才能最终达到应用程序控制设备的目的,不然驱动有QIU用。要通信就涉及到3个方面: 1.应用程序与驱动程序通信2.驱动程序与应用程序通信3.数据传输下面分别讨论1。应用程序与驱动程序通信1-1 应用程序实现与驱动通信的过程: ---用CreateFile打开设备,然后用DeviceIoControl和驱动通信,包括从驱动读数据和写数据2转载 2012-11-05 15:25:49 · 933 阅读 · 0 评论