Linux设备驱动分析
文章平均质量分 73
KurdtCobain
这个作者很懒,什么都没留下…
展开
-
Linux驱动基础 内核模块
Linux设备驱动是以内核模块的形式出现,所以,学会编写Linux内核模块编程是学习Linux设备驱动的必要步骤 Linux内核模块的存在原因和作用 Linux内核的整体架构非常庞大,其包含的组件也非常多,不信的可以去linux官网下载一个linux内核的源码包,不压缩的话一般都30+MB,如此庞大的内核 如果编译的话一般都要编译5分钟左右 你要把需要的部分都包含在内核中,一种方法是把所有需要的原创 2017-05-24 20:36:49 · 296 阅读 · 0 评论 -
Linux设备驱动概述
设备驱动的作用: 一个计算机系统需要硬件和软件的协作才能完成各种计算机复杂的任务 比如键盘的输入各种,硬件是软件得以运行的平台,代码最终会落实为硬件上的组合逻辑和时序逻辑,软件则实现了具体的应用,它按照各种不同额业务需求而设计,并完成用户的最终需求 但是软硬件同样存在着悖论,那就是软硬件不应该相互渗透入对方的领地。应用软件工程师不想关心硬件,而硬件不需要关心软件。比如应用软件工程师在调用套接字发原创 2017-05-22 17:29:55 · 288 阅读 · 0 评论 -
Linux驱动程序之阻塞和非阻塞IO
所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回。也就是说在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的条件后再进行操作。被挂起的进程进入睡眠状态,被从调度器的运行队列移走,直到等待的条件被满足 所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯转载 2017-06-08 08:51:47 · 822 阅读 · 0 评论 -
不容错过:Linux定时器的使用
用定时器的目的无非是为了周期性的执行某一任务,或者是到了一个指定时间去执行某一个任务。要达到这一目的,一般有两个常见的比较有效的方法。一个是用 linux内部的三个定时器,另一个是用sleep, usleep函数让进程睡眠一段时间,使用alarm定时发出一个信号,还有那就是用gettimeofday, difftime等自己来计算时间间隔,然后时间到了就执行某一任务,但是这种方法效率低,所以不常用。转载 2017-06-30 03:16:08 · 533 阅读 · 0 评论 -
嵌入式中断(stm32+linux)详解
一开始学单片机时 就知道中断这一个概念 看些视频学了大半天 也是似懂非懂 看代码也就是设置下寄存器写下中断服务程序而已 学的不是很深入 一直到现在 经过了<微机原理>这门课的学习 才对中断有了一定的深入了解 发现中断也就是一门说复杂也能很复杂 只要封装好了api 使用也很简单的事 但是身为一名学习者 还是有必要学习中断的使用和原理身为一个学习嵌入式的小白 一开始我学习的当然是单片机 所学的单片机是原创 2017-06-22 16:37:19 · 4829 阅读 · 0 评论 -
arm-linux之为开发板写上电自启动程序之方法
开发环境开发板:AM335虚拟机:ubuntu 14.04编译器:gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf开发板内核:linux 4.4.12首先开发板的文件使用的是systemd 并没有/etc/rc.local文件 所以要想修改rc.local这一简单的操作已经不存在 但是也是可以用systemd和initd两种方式解决这个问题原创 2017-07-13 09:58:20 · 6615 阅读 · 1 评论 -
armlinux开发板用户自动登录
开发板:AM335虚拟机:ubuntu 14.04编译器:gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf开发板内核:linux 4.4.12设置开发板自动登录目前而言就两种方法 1.修改/etc/inittab文件 2.systemd方法 1.要是文件系统有/etc/inittab文件的话就可以修改/etc/inittab文件 找到如下原创 2017-07-13 15:14:51 · 2933 阅读 · 0 评论 -
Linux设备驱动模型之platform总线深入浅出(加入设备树)
在Linux2.6以后的设备驱动模型中,需关心总线,设备和驱动这三种实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。 对于依附在USB、PCI、I2C、SPI等物理总线来 这些都不是问题。但是在嵌入式系统里面,在Soc系统中集成的独立外设控制器,挂接在Soc内存空间的外设等却不依附在此类总线。基原创 2017-06-25 17:03:37 · 9852 阅读 · 1 评论 -
创建进程
进程:处于执行期的程序 相当于“进程=程序+执行” 但是进程不局限于一段可执行代码(代码段) 还包括进程需要的其他资源 例如打开的文件 挂起的信号量 内存管理 处理器状态 一个或者多个线程 数据段之类的 进程控制块就是task_struct进程和线程的区别 :线程是操作系统调度的最小单位 进程拥有独立的资源空间而线程则共享进程的资源空间 但是linux内核并没有特别的调度算法或定义特别的数据结构来标原创 2017-11-14 20:22:46 · 278 阅读 · 0 评论 -
自旋锁
自旋锁主要是为了解决对临界资源的互斥访问 也就是适合在smp或者单cpu可抢占的系统中比如在SMP 多核处理器中的情况 现在的处理器大多是这种类型的 可以使用自旋锁来解决对临界资源互斥访问 当一个CPU在访问自旋锁保护的临界区时 临界区锁被锁上 也就是spin_lock(lock) 将自旋锁置0 这时其他访问此临界区的CPU 或者本地CPU的其他进程想要访问此临界区时会忙等待 直到第一个访原创 2017-11-14 20:47:51 · 392 阅读 · 0 评论 -
编译乱序和执行乱序
编译乱序也就是编译器对访存的执行进行乱序 减少逻辑上不必要的访存 已经尽量提高cache命中率和cpu的load/store单元的工作效率 因此在打开编译器优化以后 看到生成的汇编码并没有严格按照代码的逻辑顺序 怎么解决这个问题 设置编译屏障 barrier(); 这样的话就能解决编译乱序所造成的问题 那么你可能会说 volatile也可以实现这个功能啊 其实在编译乱序的问题上 volatil原创 2017-11-15 14:09:47 · 1709 阅读 · 0 评论 -
代码详解Linux总线serio
观察了input驱动 我们可以知道驱动可以分为几个层次,驱动之间可以嵌套。而总线也可以分为几个层次,一种总线可以架构在另一种总线之上。 总线适配器: 我们知道计算机的体系架构中,PCI总线占有重要的地位,是连接主板和外部设备的标准总线。而网卡,声卡,显卡,SCSI卡等等设备很多都是以PCI卡的形式出现,并插入计算机的PCI插槽。这些设备中,声卡显卡加载驱动后,就可以直接读写操作,而像SCSI卡这原创 2017-03-15 23:41:40 · 2342 阅读 · 0 评论 -
Linux文件系统的挂载过程代码分析
linux系统中是可以通过mount挂载一个文件系统 mount命令格式:mount [-t vfstype] [-o options] device dir1.-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有: 光盘或光盘镜像:iso9660 DOS fat16文件系统:msdos Windows 9x fat32文件系统:vfat W原创 2017-03-09 01:02:50 · 1856 阅读 · 0 评论 -
u-boot源码分析第一阶段之Start.S
本人基于u-boot的启动文件start.s的一些代码分析!!!原创 2016-03-29 10:36:19 · 570 阅读 · 0 评论 -
IIC总线介绍
由于最近在学习IIC的设备驱动,所以在此写一篇关于I2C的总线介绍来分享我对IIC的理解。希望大家能学习到一些知识和指出我的错误。IIC:又称I2C,即Inter-Integrated Circuit(集成电路总线),由飞利浦公司开发的串行总线,用于控制微控制器及其他设备。IIC特点 1.只有两条总线线路:一条串行数据线(SDA),一条串行时钟线(SCL)。 2.每个连接到总线的设备的器件都可以原创 2016-09-12 01:16:05 · 2477 阅读 · 0 评论 -
ARM下位置无关码和位置相关码介绍
由于在学I2C裸板程序中在分析head.S时用到了这个位置无关码这个概念,并且之前一直不明白位置无关码,故此次通过查阅其他大神的博客了解可以得到下面的教程,希望对学ARM的朋友有一点帮助。参考:http://www.cnblogs.com/mylinux/p/5577472.html位置无关代码:即该段代码无论放在内存的哪个地址,都能正确运行。究其原因,是因为代码里没有使用绝对地址,都是相对地址。转载 2016-09-12 15:58:51 · 2481 阅读 · 0 评论 -
Linux链接脚本.lds
.lds链接脚本原创 2016-09-13 16:01:07 · 961 阅读 · 0 评论 -
Linux设备之I2C体系
I2C体系结构分为三个组成部分 1、I2C核心:I2C核心提供了总线驱动和设备驱动的注册、注销的方法,I2C通信方法(即algorithem提供的通信函数),与具体适配器无关的代码以及检测设备地址的代码等。这部分是与平台无关的.与其对应的是Linux内核源代码中的drivers目录下的i2c-core.c. 2、I2C总线驱动:对I2C硬件体系结构中适配器的实现,I2C总线驱动主要包含了I2C适原创 2016-09-19 19:43:29 · 349 阅读 · 0 评论 -
通过路由器或者直连方法实现nfs挂载
刚入门时,本人也是对环境的搭建一头雾水,埋头苦干了很久才搞定。 环境这个问题,千变万化各种稀奇古怪的原因都可能出现,而且你问人别人也不一定能帮你解决,因为别人未必遇到过这个问题,恰好今晚一人来问,我就想把nfs挂载问题给详细说明下,让大家少走弯路 这里对有无路由器情况分开分析 环境 1.Ubuntu14.04 2.普通路由器 3.JZ2440 4.网线若干一.有路由器 开发板 路由器转载 2016-10-28 23:30:36 · 5020 阅读 · 0 评论 -
Linux下udev和mdev详解
/* * Edison Gao */ 设备文件系统有devfs,mdev,udev这三种如果你使用Linux比较长时间了,那你就知道,在对待设备文件这块,Linux改变了几次策略。在Linux早期,设备文件仅仅是是一些带有适当的属性集的普通文件,它由mknod命令创建,文件存放在/dev目录下。后来,采用了devfs, 一个基于内核的动态设备文件系统,他首次出现在原创 2016-10-20 02:43:35 · 7480 阅读 · 0 评论 -
S3C2440存储管理器详解
存储管理器概念,通俗而言就是可以通过它来访问外部存储设备的一种东西s3c2440地址空间分布 s3c2440对外引出了27根地址线ADDR0-ADDR26,访问空间为128MB,还对外引出了8根片选信号nGCS0-nGCS7,对应BANK0~BANK7,n表示低电平有效。学过数电的同学都知道。 这是s3c2440存储器的BANK0~BANK7但是2440是32位的CPU,地址空间应该为4GB原创 2017-01-17 19:28:27 · 1922 阅读 · 0 评论 -
Linux最简单的文件系统aufs剖析详解
对于一个普通的编程小白来说,文件系统无非就是几个功能,创建文件,创建目录,打开文件和文件读写。对于通常的硬盘文件系统来说,这要涉及硬盘的读写和硬盘空间管理,而读写从文件系统一直到通用块设备再到硬盘驱动。我们这些就剖析最简单的文件系统,深入内核。 aufs文件系统源代码#include <linux/module.h> #include <linux/fs.h> #include <linux/原创 2017-03-08 03:07:35 · 6460 阅读 · 1 评论 -
内核定时器
内核的软中断提供了定时器软中断的类型 TIMER_SOFTIRQ 所以我们可以使用这个软中断来实现定时运行我们的程序 内核提供的API和数据结构如下 struct timer_list { /* * All fields that change during normal runtime grouped to the * same cacheline原创 2017-11-15 14:10:31 · 256 阅读 · 0 评论