驱动编程的本质属于Linux内核编程,因此我们非常有必要熟悉Linux内核以及Linux内核的特点。 这篇文章将会帮助读者打下Linux驱动编程的基础知识。
读者朋友千万不要觉得了解目录结构对我们进行Linux开发没什么帮助,实际上目录体现了Linux的整体架构和思想,对于我们理解Linux是大有裨益的。Linux内核源代码包含如下目录:
arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如:ARM、PowerPC、MIPS等,在arch目录下,存放了各个不同的平台芯片对Linux内核进程调度、内存管理和中断等的支持;
drivers:设备驱动程序,每个不同的驱动占用一个子目录,如char、net、i2c、spi等(重点来了,划重点了:高工资,设备驱动程序就是我们学习的重点,而开发过单片机程序的读者对驱动程序应该有更深刻的理解);
进程调度控制系统中的多个进程对CPU的访问,使得多个进程能够在CPU中“宏观并行、微观串行”地执行。进程调度处于系统的中心位置,内核其他的功能都依赖于它,因为每个子系统都需要挂起或者恢复进程。Linux进程会在几个状态之间进行切换,在设备驱动编程中,当请求的资源不能得到满足时,驱动一般或调度其他进程执行并使本进程进入睡眠状态,直到它请求的资源被释放,才会被系统唤醒从而进入就绪状态等待调度。绝大多数的进程是由我们的应用程序创建的,当它们存在硬件访问的需求时,会通过系统调用进入内核空间(文章的后面会讲到用户空间和内核空间的区别)。
内存管理的主要作用是控制多个进程安全的共享内存区域。当CPU提供内存管理单元MMU时,Linux内存管理对于每个进程完成从虚拟内存到物理内存的转换。现在常用的处理器都是32位的,那么每个进程也就享有4GB(2的32次方)的内存空间,0~3GB属于用户空间,3~4GB属于内核空间。当然,这个界限是可以调整的,但是我们一般使用这个默认配置即可。
Linux虚拟文件系统隐藏了各种硬件的具体细节,为所有设备提供了统一的接口。而且,虚拟文件系统独立于各个具体的文件系统,是对各种文件系统的一个抽象。它为上层的应用程序提供了统一的vfs_read()、vfs_write()等接口,然后它在调用具体的底层文件系统或者设备驱动中实现的file_operations结构体的成员函数(这个结构体将是我们后面学习Linux设备驱动的关键数据结构)。
网络接口提供了对各种网络标准的存取和网络硬件的支持。在Linux中网络接口可分为网络协议和网络驱动程序,网络协议负责实现每一种可能的网络传输协议,网络设备驱动程序负责与硬件设备通信。Linux内核支持的协议栈很多,例如:Internet、NFC、Bluetooth等,在上层的应用程序中统一使用接口。看到这里,我想你也大概明白了吧,都是套路,我们需要学会这些调用API的套路。
Linux支持进程间的多种通信机制,包含信号量、共享内存、消息队列、管道等,这些机制可以协调多个进程、多个资源的互斥访问,进程间的同步和消息传递。这一部分也是我们后续学习的重点。
在Linux中分为用户空间和内核空间,我们开发时写的程序就是运行在用户空间,那我在这一节为什么又要说驱动的编程实质上就是内核的编程呢?这是因为我们完成驱动程序的开发之后,它是被编译进内核的,那它也就属于内核空间。在这种情况下,上层的程序是不能直接访问底层功能的,这就意味着应用程序是被禁止直接访问硬件和内存的,在应用程序中操作硬件的时候,其实发生了这样一个转换的过程:应用程序(用户空间)--->
系统调用(文件系统)--->
内核空间(驱动程序)。这样做有很多优点,最重要的一点是保证了系统的安全运行。
内核空间和用户空间这两个名词还用来区别程序执行的两种不同状态,也就是用户态和内核态,他们使用的是不同的地址空间。看到这里的读者还记不记得他们分别使用的地址空间呢?上文已经说过了哦。
SoC上电时,CPU0会先引导bootloader,而其他的CPU则判断自己是不是CPU0,进入等待状态等待CPU0来唤醒它。CPU0引导bootloader,bootloader引导Linux内核,在内核启动阶段,CPU0会发中断唤醒CPU1,之后CPU0和CPU1都投入运行。CPU0导致了用户空间的init初始化程序被调用,init程序再派生出其他进程,然后这些进程再派生出其他的进程 (看到这里你有没有想起单片机开发时的启动文件stm32f10x_startup.s,正因为有它帮我们把代码运行的环境都准备好了,所以我们才直接从main函数进入)
关于内核启动,与我们关系比较大的部分是每个平台的设备回调函数和属性信息,这些回调函数会在内核启动过程中被调用,后续的文章会进一步介绍。
相信读者已经对Linux的内核有了一个初步的了解,当然这只是初步的而已,更多更难的还在后面等着你呢!我们一步一步来,循序渐进的学习才能达到最好的效果。下一篇文章将介绍在Linux中 C语言编程的特点。
若您身处于网络通信行业,相信您应该了解一些以太网线缆,比如说超五类网线、六类网线和七类网线等等。但是....
次阅读 --
我们在配置交换机的时候首先要了解的就是交换机命令模式,小编用Cisco思科交换机为例带大家了解交换机....
次阅读 --
Linux桌面版推广不起来主要是应用生态系统无法构建,就拿国内来讲,安装一个Linux系统里面常见的....
次阅读 --
FORESEE DDR4 SO-DIMM采用了黑色面板,颇具科技神秘感。内存采用了单颗8Gb bit....
次阅读 --
一般,具有五脚连接器的键盘称之为AT键盘,而具有六脚mini-DIN连接器的键盘则称之为PS/2键盘....
次阅读 --
看了LM4F232的bootloader过程,没有看懂,麻烦专家介绍下LM4F232从上电到加载应用程序到SRAM中的过程!! 最好说明清...
次阅读 --
随着信息技术的不断发展,手机逐渐成为现代社会必不可少的工具。但是,一旦手机丢失,存在SIM卡内的资料....
次阅读 --
三月中旬,微软曾通过博客宣布,WSL2 将在 Windows 10 2004 版本中正式进入普遍可用....
次阅读 --
eval-AD7679CBZ,评估板,用于AD7679,18位,571-Ksps PulSAR ADC。这些低功耗,逐次逼近型寄...
次阅读 --
Linux很强大,它是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多....
次阅读 --
最新消息称微软正开始在Win10上开发基于USB4.0的驱动程序,大量厂商已经开发基于USB4.0的....
次阅读 --
本文介绍了一个基于三星ARM9芯片S3C2440嵌入式系统的以太网接口电路设计方案,采用了工业级以太网控制器DM9000AEP成功...
次阅读 --
DC449A-A,用于LTC3719的演示板 - 用于AMD Opteron CPU的2相,高效率,降压型控制器...
次阅读 --
基于RPMSG的异构核信息交互 本次讨论的异构内核是基于linux的,那就首先要了解一下这个Remoteproc/RPMsg 架构。 RP...
次阅读 --
随着计算机网络技术的飞速发展,网络服务器的使用进一步迈进,目前在网络存储领域,内商用市场上的网络存储NAS系统大都采用x8...
次阅读 --
系统调用时操作系统的最小功能单位。根据不同的应用场景,不同的 Linux 发行版本提供的系统调用数量....
次阅读 --
Linux普及度不高主要说的是在桌面版里面,在服务器以及移动设备端有些非常大的占比,特别是移动端占比....
次阅读 --
笔者前段时间做了一款STM32下载器,为了与新时代接轨,在设计电路板的时候首次使用了USBType-....
次阅读 --
Linux 内核现在已经增加了对 exFAT 的支持,同时它也没有放弃维护原有 FAT 文件系统驱动....
次阅读 --
PC104总线系统是一种新型的计算机测控平台,作为嵌入式PC的一种,在软件与硬件上与标准的台式PC(....
次阅读 --
8核35W Core i9-9900T可以与45 W的Core i7-9750H的性能不相伯仲,为什....
次阅读 --
当今的模数转换器 (ADC) 采用了最新的技术,以高精度及快速的采样频率对模拟信号进行采集。数据转换....
次阅读 --
大冶铁矿球团厂造球工段控制系统中,利用研华ADAM-5000系列智能I/O模块实现数据采集和输出功能....
次阅读 --
次阅读 --
20 世纪 90 年代后期,存储器接口从单倍数据速率 (SDR) SDRAM 发展到了双倍数据速率 ....
次阅读 --
近年来,由于人们防火意识的不断增强以及有关法律、法规的不断完善,火灾自动报警系统得到迅猛发展和广泛应....
次阅读 --
美国微芯公司的集成了CAN 通讯接口,执行Bosch 公司的CAN2.0A/B 协议。它能支持CAN....
次阅读 --
近读到这样一篇文章,从底层硬件角度出发剖析了一下CPU对代码的识别和读取,内容之精彩,读完感觉学到的....
次阅读 --
首先说明:写这个第一个Linux设备驱动程序的目的是熟悉Linux驱动的框架以及编程流程,所以是通过....
次阅读 --
买电脑内存条主要看什么呢?由于内存条的种类和品牌非常的多,消费者在选择内存条的时候就需要认识内存的主....
次阅读 --
电脑是CPU重要还是显卡重要?对电脑配置要求高的玩家来说,首要考虑的就是显卡的性能,反倒会觉得CPU....
次阅读 --
DSP芯片能够大大提高数字信号处理的效率,但在主机与DSP构成的系统中,当DSP与主机间需要大数据量....
次阅读 --
当前嵌入式系统技术已得到了广泛应用,但传统嵌入式系统的人机接口多采用小键盘操作的文本菜单方式,用户操....
次阅读 --
传统的外设操作使用I/O接口方式,在硬件工程中,需要设计与外设相连的I/O接口,在软件工程中,需要用....
次阅读 --
次阅读 --
任何送到该接口的网络数据报文都会被认为是送往设备自身的。大多数平台都支持使用这种接口来模拟真正的接口....
次阅读 --
具体来说,KX-6000处理器基于16nm工艺,是国内首款主频达到3.0GHz的国产通用处理器,且支....
次阅读 --
次阅读 --
在许多嵌入式系统的实际应用中,需要扩展FP-GA(现场可编程门阵列)模块,将CPU实现有困难或实现效....
次阅读 --
Linux系统下使用CAN接口 得益于ST官方的linux系统,已经集成了我们所需要的CAN的驱动程序,因此基于DK1我们实现CA...
次阅读 --
有人做过MVB通信吗,跪求大神指点MVB接口技术和MVB通信,本人打算在STM32上实现MVB通信 ...
次阅读 --
新冠疫情对各行各业的生产造成了严重的冲击,但医疗相关设备的需求则是直线上升,对相关产业和企业提出了严....
次阅读 --
这一年来,国产OS系统异常火爆,统信软件的UOS成为股市的香饽饽,而两大麒麟Linux合并的麒麟软件....
次阅读 --
这一年来,国产OS系统异常火爆,统信软件的UOS成为股市的香饽饽,而两大麒麟Linux合并的麒麟软件....
次阅读 --
Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作...
次阅读 --
VGUS 串口屏结构分为普通结构、AIO 一体化结构两种。本文将分别介绍两种结构的串口屏和测试用转接....
次阅读 --
微软推送Windows 10 build 19603 编译版本 引入面向Linux子系统的文件资源管理器集成
微软刚刚向开启了快速更新(Fast Ring)通道的 Insider 测试者们推送了 Windows....
次阅读 --
最近因为COVID-19疫情的原因,全球都是陷入了“家里蹲”模式,正常的生活、工作都要受到影响。对工....
次阅读 --
Windows 10最新预览版首次集成Linux子系统 可直接对Linux系统进行文件管理和访问
继上周四的Build 19592后,微软今晨面向快速通道的Insider会员推送Windows 10....
次阅读 --
微软发布了有关该公司一直致力的 Linux 内核新项目的详细信息。该项目名为 Integrity P....
次阅读 --
以工作模式来说,一般的RS485总线工作在主从模式下。整个通信总线系统由一个主节点、若干个从节点组成....
次阅读 --
Intel发布通知,宣布代号Kaby Lake-U Refresh的第八代酷睿U系列低功耗处理器进入....
次阅读 --
本数据表总结了这组dsPIC30F设备的特性,不打算成为完整的参考源。有关CPU、外围设备、寄存器描....
次阅读 --
RCS-9000CS 系列保护测控装置是针对企业电力系统的新型“四合一”综合保护测控装置,它适用于石....
次阅读 --
VxWorks操作系统以其高度的可靠性、优秀的实时性、灵活的可裁减性等优势在嵌入式系统中备受关注,广....
次阅读 --
字符式液晶显示模块SMC1602B由一块5x7点阵液晶屏和控制芯片HD44780及其辅助电路组成。它....
次阅读 --
在航空视频采集记录系统中,摄像头把载机任务系统的实时画面视频数据按预定格式组帧,通过LVDS信号总线....
次阅读 --
接口总线为一群互相连接的设备提供一种有效的通信方式,它是自动测试系统发展的标志,可以说接口总线技术发....
次阅读 --
T32A的引脚排列与LS32完全相同。设备输入与标准CMOS或LSTTL输出兼容。 特性 输出驱动能力:10 LSTTL载荷 直接输出到CMOS,NMOS和TTL接口 工作电压范围:2.0 V至6.0 V 低输入电流:1 A CMOS器件的高抗噪性能 符合JEDEC标准第7A号要求 芯片复杂性:48 FET或12个等效门 PbFree软件包可用 应用 桌面 电路图、引脚图和封装图
次阅读 --
T20A的引脚排列与LS20完全相同。器件输入与标准CMOS LSTTL输出兼容。 特性 输出驱动能力:10 LSTTL负载 直接输出到CMOS,NMOS和TTL接口 工作电压范围:4.5 V至5.5 V 低输入电流:1uA CMOS器件的高抗噪性能 这些是无铅设备 应用 桌面,白色家电等 电路图、引脚图和封装图
次阅读 --
能硅栅CMOS MC74HCT86A的引脚排列与LS86完全相同。器件输入与标准CMOS输出和LSTTL输出兼容。 特性 输出驱动能力:10 LSTTL载荷 直接输出到CMOS,NMOS和TTL接口 工作电压范围:2至6 V 低输入电流:1 mA CMOS器件的高抗噪性能 符合JEDEC标准第7A号要求 芯片复杂性:56 FET或14个等效门 这些是无铅设备 应用 桌面 电路图、引脚图和封装图
次阅读 --
能硅栅CMOS。 MC74HCT08A的引脚排列与LS08完全相同。设备输入与标准CMOS或LSTTL输出兼容。 特性 输出驱动能力:10 LSTTL载荷 直接输出到CMOS,NMOS和TTL接口 工作电压范围:2.0 V至6.0 V 低输入电流:1μA CMOS器件的高抗噪性能 符合JEDEC标准第7A号要求 芯片复杂性:24 FET或6个等效门 这些是无铅设备 应用 桌面 电路图、引脚图和封装图
次阅读 --
能硅栅CMOS MC74HC86A的引脚排列与LS86相同;该器件的功能类似于MM74C86和L86,但具有不同的引脚排列。器件输入与标准CMOS输出兼容;使用上拉电阻,它们与LSTTL输出兼容。 特性 输出驱动能力:10 LSTTL负载 直接输出到CMOS,NMOS和TTL接口 工作电压范围:2至6 V 低输入电流:1 mA CMOS器件的高抗噪性能 符合JEDEC标准第7A号规定的要求 芯片复杂性: 56个FET或14个等效门 无铅封装可用 电路图、引脚图和封装图...
次阅读 --
30的引脚排列与LS30完全相同。器件输入与标准CMOS输出兼容,带上拉电阻,与LSTTL输出兼容。 特性 输出驱动能力:10 LSTTL负载 直接输出到CMOS,NMOS和TTL接口 工作电压范围:2至6 V 低输入电流:1μA CMOS器件的高抗噪性能 这些是无铅设备 电路图、引脚图和封装图
次阅读 --
能硅栅CMOS MC74HC32A的引脚排列与LS32完全相同。器件输入与标准CMOS输出兼容;使用上拉电阻,它们与LSTTL输出兼容。 特性 输出驱动能力:10 LSTTL负载 直接输出到CMOS,NMOS和TTL接口 工作电压范围:2至6V 低输入电流:1mA CMOS器件的高抗噪性能 符合JEDEC标准第7A号要求 芯片复杂性:48个FET或12个等效电路盖茨 无铅包装可用 电路图、引脚图和封装图...
次阅读 --
20A的引脚排列与LS20完全相同。器件输入与标准CMOS输出兼容;使用上拉电阻,它们与LSTTL输出兼容。 特性 输出驱动能力:10 LSTTL负载 直接输出到CMOS,NMOS和TTL接口 工作电压范围:2 V至6 V 低输入电流:1 uA CMOS器件的高抗噪性能 这些是无铅设备 电路图、引脚图和封装图
次阅读 --
11A的引脚排列与LS11完全相同。器件输入与标准CMOS输出兼容;使用上拉电阻,它们与LSTTL输出兼容。 特性 输出驱动能力:10 LSTTL负载 直接输出到CMOS,NMOS和TTL接口 工作电压范围:2 V至6 V 低输入电流:1 A CMOS器件的高抗噪性能 这些是无铅设备 应用 桌面,白色商品等 电路图、引脚图和封装图
次阅读 --
10A的引脚排列与LS10完全相同。器件输入与标准CMOS输出兼容;使用上拉电阻,它们与LSTTL输出兼容。 特性 输出驱动能力:10 LSTTL负载 直接输出到CMOS,NMOS和TTL接口 工作电压范围:2至6 V 低输入电流:1μA CMOS器件的高抗噪性能 符合要求JEDEC标准第7号A 芯片复杂性:36 FET或9个等效门 PbFree包可用 电路图、引脚图和封装图
次阅读 --
能硅栅CMOS MC74HC08A的引脚排列与LS08完全相同。器件输入与标准CMOS输出兼容;使用上拉电阻,它们与LSTTL输出兼容。 特性 输出驱动能力:10 LSTTL负载 直接输出到CMOS,NMOS和TTL接口 工作电压范围:2至6V 低输入电流:1mA CMOS器件的高抗噪性能 符合JEDEC标准第7A号要求 芯片复杂性:24个FET或6个等效电路盖茨 无铅包装* * 电路图、引脚图和封装图...
次阅读 --
能硅栅CMOS MC74HC02A的引脚排列与LS02完全相同。器件输入与标准CMOS输出兼容;使用上拉电阻,它们与LSTTL输出兼容。 特性 输出驱动能力:10 LSTTL负载 直接输出到CMOS,NMOS和TTL接口 工作电压范围:2.0至6.0 V 低输入电流:1.0 mA CMOS器件的高抗噪性能 符合JEDEC标准第7A号规定的要求 芯片复杂性: 40个FET或10个等效门 无铅封装可用 电路图、引脚图和封装图...
次阅读 --
输入与非门。高性能硅栅CMOS。 MC74HC00A的引脚排列与LS00完全相同。器件输入与标准CMOS输出兼容;使用上拉电阻,它们与LSTTL输出兼容。 特性 输出驱动能力:10 LSTTL负载 直接输出到CMOS,NMOS和TTL接口 工作电压范围:2至6 V 低输入电流:1μA CMOS器件的高抗噪性能 符合JEDEC标准第7号A要求 芯片复杂性:32个FET或8个等效门 PbFree包可用 电路图、引脚图和封装图...
次阅读 --
T00是通过使用先进的硅栅极CMOS技术制造的NAND门,可提供CMOS的固有优势 - 低静态功率和宽电源范围。此器件的输入和输出特性以及引脚分配与标准74LS逻辑MM-4HCT器件专用于TTL和NMOS组件与标准CMOS器件之间的接口。另外,这些兼容器件也是LS-TTL器件的插件替换件,而且可用于降低现有设计的功耗。 特性 TTL,LS引脚分配和阈值兼容 快速开关:t PLH ,t PHL = 14 ns(典型值) 低功率:直流时为10μW 高扇出,10个LS-TTL负载 应用 此产品是一般用途,适用于许多不同的应用。 电路图、引脚图和封装图...
次阅读 --
T08是通过使用先进的硅栅极CMOS技术制造的逻辑功能器件,可提供CMOS的固有优势 - 低静态功率和宽电源范围。此器件的输入和输出特性以及引脚分配与标准74LS逻辑系列兼容。保护所有输入端,以免受到内部二极管至V CC 和地线HCT器件专用于TTL和NMOS组件与标准CMOS器件之间的接口。另外,这些器件也是LS-TTL器件的插件替换件,而且可用于降低现有设计的功耗。 特性 TTL,LS引脚分配和阈值兼容 快速开关:t PLH ,t PHL = 12 ns(典型值) 低功率:直流时为10μW 高扇出,10 LS-TTL负载 应用 本产品是一般用途,适用于许多不同的应用。 电路图、引脚图和封装图...
次阅读 --
T05是通过使用先进的硅栅极CMOS技术制造的逻辑功能器件,可提供CMOS的固有优势 - 低静态功率和宽电源范围。此器件的输入和输出特性以及引脚分配与标准DM74LS逻辑系列兼容.MM74HCT05开路漏极六路转换器要求增加一个外部电阻以实现有线 - 或非功能。保护所有输入端,以免受到内部二极管至V CC 和地线HCT器件专用于TTL和NMOS组件与标准CMOS器件之间的接口。另外,这些器件也是LS-TTL器件的插件替换件,而且可用于降低现有设计的功耗。 特性 开路漏极实现有线 - 或非功能 LS- TTL引脚和阙值兼容 10 LS-TTL负载的高扇出 典型传播延迟:t PZL (带1 kohm阻)10 nst PLZ (带1 kohm电阻)8 ns 应用 此产品是一般用途,适用于许多不同的应用。 电路图、引脚图和封装图...
次阅读 --
是一款4数据通道,移动产业处理器接口(MIPI),D-PHY开关。该器件为单刀双掷(SPDT)开关,专门针对两个高速或低功耗MIPI信号源之间的切换进行了优化.FSA646特别针对MIPI规格设计,可连接至CSI或DSI模块。 特性 开关类型:SPDT(10x) 信号类型: MIPI,D-PHY V CC :1.5至5.0 V 输入信号:0至1.3 V R ON : 6Ω典型HS MIPI 6Ω典型LP MIPI △R ON :0.1Ω典型LP& HS MIPI R ON_FLAT :0.9Ω典型HS& LS MIPI I CCZ :1μA(最大值) I CC :32μA(典型值) OIRR:-24 dB(典型值) 带宽:2500 MHz最小值 C ON :15 pF(典型值) Xtalk:-30 dB(典型值) 在相同输出下,反向转换的时滞:6 ps(典型值) 电路图、引脚图和封装图...
次阅读 --
99B是一款超低RON双DPDT和一个0.5欧姆RON模拟开关。该器件专为低工作电压,扬声器输出的高电流切换和手机应用的耳机而设计。它可以切换平衡的立体声输出。 NLAS3799B可以在单声道模式下处理平衡麦克风,扬声器,铃声发生器。该设备包含一个先断后合(BBM)功能。 特性 单电源供电,1.65至4.5 V 直接来自LiON电池的功能 最大值击穿电压:5.5 V 低静态功率 NLAS3799B与2.8 V芯片组的接口; NLAS3799BL与1.8 V芯片组的接口 应用 终端产品 手机扬声器/麦克风切换 铃声 - 芯片/放大器切换 四个不平衡(单端)开关 立体声平衡(推挽)切换 手机 VoIP手机 液晶电视 电路图、引脚图和封装图...
次阅读 --
222是一款DPDT交换机,针对便携式系统中的高速USB 2.0应用进行了优化。它具有超低的导通电容,CON = 7.5 pF(典型值),带宽高于950 MHz。它针对使用单个USB接口connectorto路由多种信号类型的应用进行了优化。两个通道的CON和RON都很低,允许NL3HS2222将任何速度的USB数据传输信号传递到中等电阻的终端,如外置耳机。 应用 USB 2.0开关 电路图、引脚图和封装图
次阅读 --
8是一款集成电源控制IC,具有I 2 C接口。 NCP4208是一款高效,多相,同步降压开关稳压控制器,可帮助设计高效率和高密度解决方案。 NCP4208可编程为1,2,3,4,5,6,7或8相操作,允许构建多达8个互补降压开关级。 特性 优势 快速增强PWM 出色的负载转换性能 应用 终端产品 CPU Vcore 台式电脑,服务器 电路图、引脚图和封装图

