驱动学习之驱动体验

1:什么是linux驱动

从本质上讲,驱动就是属于内核层面的程序代码,是直接和硬件打交道的。与裸机中直接操作寄存器去操作硬件的不同之处在于,裸机中操作的是物理内存,而我们在驱动中操作的是虚拟内存,驱动中还可以调用内核中提供的很多接口函数来简化我们操作硬件的过程。

2:linux设备驱动的分类

根据设备本身的读写操作特征的差别,linux驱动主要分为三类

(1)字符设备驱动

字符设备驱动的特点是软件在驱动设备是以字节为单位进行的,如LED、LCD、串口、蜂鸣器等

(2)块设备

块设备是相对于字符设备类定义的,块设备的操作单位是块,每个块的字节大小是由硬件本身自己决定的,我们不能通过软件去修改,不同的块设备的块大小也可以不同。常见的块设备有硬盘、NandFlash、iNand、SD卡等

(3)网络设备

网络设备是专门为网卡设计的驱动模型,linux中网络设备驱动的主要目的是为了支持API中socket相关的函数的工作。

3:怎么学习linux驱动

(1)C语言是基础,驱动代码本身就是由C语言来编写的,所以C语言是学习驱动的基础

(2)理解linux驱动框架,内核给我们驱动开发者提供了很多设备驱动的框架,而驱动开发者则在理解驱动框架的基础上去移植驱动,使之适合自己的产品。当然驱动框架只是一个驱动开发的一个标准,而非必须,驱动开发者也可以使用驱动框架去开发驱动

时间: 2024-10-13 09:26:23

驱动学习之驱动体验的相关文章

Linux驱动学习之驱动开发准备工作

一.开启驱动开发之路 1.驱动开发的准备工作 (1)正常运行linux系统的开发板.要求开发板中的linux的zImage必须是自己编译的,不能是别人编译的.原因在于在安装模块的时候会进行安全性校验 (2)内核源码树,其实就是一个经过了配置编译之后的内核源码.我们需要内核源码编译自己的模块 (3)nfs挂载的rootfs,主机ubuntu中必须搭建一个nfs服务器.这对于驱动开发前期是不可或缺的,能够提高我们的开发效率. 2.驱动开发的步骤 (1)驱动源码编写.Makefile编写.编译 (2)

驱动学习之驱动的设备文件

首先需要明白的一点是:一个硬件对应一个驱动,对应一个设备文件(/dev/),用来描述这个设备,将来应用程序就是通过这个设备文件来找到这个驱动. 1:设备号 = 主设备号+次设备号 主设备号标识的是设备的驱动告诉Linux内核使用哪一个驱动程序为该设备(也就是/dev下的设备文件)服务,次设备号则是具体唯一标识是哪个设备. 在linux中,通过mknod创建设备文件:mknod /dev/xxx  c  主设备号 次设备号  ,可以通过ls -l来查看xxx设备文件的信息.其中/dev/xxx:设

驱动学习之驱动和应用的接口

在前面讲过,驱动层是应用层是分离,驱动层的代码不能使用再应用层,应用层也不能直接操作驱动代码,那么应用层和驱动层之间是如何来实现数据间的交换的能,方法就是通过相应的接口函数. (1)copy_from_user unsigned long copy_from_user(void *to, const void __user *from, unsigned long n) {    might_sleep();      if (access_ok(VERIFY_READ, from, n))  

写作驱动学习

写作驱动学习 在软件开发领域有这样的几个名词 BDD.测试驱动开发(Test-driven development)是极限编程中倡导的程序开发方法,以其倡导先写测试程序,然后编码实现其功能得名 TDD.行为驱动开发(Behavior-Driven Development)是一种敏捷软件开发的技术,它鼓励软件项目中的开发者.QA和非技术人员或商业参与者之间的协作. DDD.领域驱动设计(Domain-Driven Design)的一个核心的原则是使用一种基于模型的语言. 而最近我处在于一个尴尬的位

字符设备驱动体验,字符设备驱动学习

字符设备驱动学习 在Linux系统中,驱动程序通常采用内核模块的程序结构来进行编码.因此,编译/安装一个驱动程序,其实质就是编译/安装一个内核模块. 一.编译安装字符设备驱动程序 memdev文件中:在这个文件里和真实的硬件无关,只是虚构了一个数组 1 #include <linux/module.h> 2 #include <linux/fs.h> 3 #include <linux/init.h> 4 #include <linux/cdev.h> 5

基于Scala的Actor之上的分布式并发消息驱动框架Akka初体验

学习了基于Scala的Actor之上的分布式并发消息驱动框架Akka初体验,应用actor模型,位置透明,做到高并发.可伸缩.容错.单机也可以用,水平扩展.垂直扩展.容错都有很好的表现,spark中的例子如下: private def initializeEventProcessActor(){ implicat val timeout=Timeout( 30 seconds) val initEventActorReply= dagSchedulerActorSupervisor ? Prop

Linux驱动学习之TQ2440 DM9000E网卡驱动移植(Linux-2.6.30.4)

引言 在之前的文章中,我们介绍了如何使用Scala IDE也就是eclipse中集成的Scala开发插件来进行Scala语言程序的开发,在使用了一段时间之后,发现eclipse对Scala的支持并不是很好.用户体验比较差,比如联想速度比较慢等.由于在公司一直使用的Scala开发工具是Intellij IDEA(好吧,其实我使用Scala IDE的目的就是想试一下这两个各有什么优缺点),各方面感觉还不错,所以在此介绍一下这个开发环境. Intellij IDEA是jetbrain开发的一个IDE,

0915-----Linux设备驱动 学习笔记----------一个简单的字符设备驱动程序

0.前言 研究生生活一切都在步入正轨,我也开始了新的学习,因为实在不想搞存储,所以就决定跟师兄学习设备驱动,看了两星期书,终于有点头绪了,开始记录吧! 1.准备工作 a)查看内核版本 uname -r b)安装内核源码树(http://www.cnblogs.com/Jezze/archive/2011/12/23/2299871.html) 在www.linux.org上下载源码编译,这里是.xz格式,需要安装解压工具,xz-utils: 解压方法示例:xz -d linux-3.1-rc4.

第十七篇:实例分析(3)--初探WDDM驱动学习笔记(十)

续: 还是记录一下, BltFuncs.cpp中的函数作用: CONVERT_32BPP_TO_16BPP 是将32bit的pixel转换成16bit的形式. 输入是DWORD 32位中, BYTE 0,1,2分别是RGB分量, 而BYTE3则是不用的 为了不减少color的范围, 所以,都是取RGB8,8,8的高RGB5, 6, 5位, 然后将这16位构成一个pixel. CONVERT_16BPP_TO_32BPP是将16bit的pixel转换成32bit的形式 输入是WORD 16BIT中