随笔分类 - 嵌入式Linux
摘要:1、在PC 机上安装虚拟机,推荐使用VMWare。 (1)对 VMWare 进行常规安装,这里选用 16.1.0 的版本,安装过程若没有特殊要求均可采用默认值进行。 (2)启动 VMWare,其程序界面如下图所示。 (3)点击其中的第一项“创建新的虚拟机”,创建一个新的虚拟机系统,在弹出的对话框中选
阅读全文
摘要:在前面驱动LED的所有案例中,都是在驱动程序中去设置每个引脚的复用功能,这会导致所编写的驱动程序移植困难,可重用性差,缺乏对引脚的统一管理,容易出现引脚的重复定义等等弊病。为此,Linux内核引入了pinctrl子系统和GPIO子系统的概念。pinctrl子系统主要用于芯片引脚功能的管理,它基本上是
阅读全文
摘要:“嵌入式Linux中的LED驱动控制(设备树方式)”一文通过设备树方式实现了在野火STM32MP157开发板上对三个LED灯的控制,这里来讨论一下设备树的原理。 设备树用于描述一个硬件平台的硬件资源,它经由bootloader传递到内核,内核就可从设备树中获取到硬件信息。设备树描述硬件资源时有两个特
阅读全文
摘要:Linux3.1之后的内核版本,引入了设备树的概念。同时,设备树还需要Bootloader的支持,如果使用Uboot,在1.1.3版本之后就可以支持设备树了。 设备树概念的提出其实有两方面的原因。其一当然是代码冗余,导致Linux内核臃肿不堪。在Linux内核源码中,只要是通过了基金会的认可,就可以
阅读全文
摘要:在前面讨论的所有LED驱动程序中,把全部设备信息和驱动代码都写在了一个文件中,从本质上看,这种开发方式与单片机的开发并没有太大的区别,一旦硬件信息发生变化,就必须要修改驱动程序的源码。然而,Linux作为一个发展成熟、功能齐全、结构复杂的操作系统,它对于代码的可维护性、复用性非常看重。为了解决驱动代
阅读全文
摘要:在前面的LED驱动控制中,都只使用了一个设备节点(一个次设备号)来进行操作,本例来讨论一下如何把三个基色的LED分别当成三个次设备,即产生出三个设备节点文件,但共用一个设备驱动(同一个主设备号),应用程序各自控制各自的LED 。 下面先给出完整的驱动程序代码,文件名仍为led.c。 #include
阅读全文
摘要:在开发驱动程序的时候,有时希望快速地实现其业务功能,以把精力放在文件接口功能的测试上来。这样,对于常见的一些繁琐而又不能省略的步骤(如设备号的申请、字符设备的注册、设备节点文件的创建等),就希望能尽量地简化。这时,就可以借用Linux内核提供的misc(杂项)来实现。 这里仍然使用“嵌入式Linux
阅读全文
摘要:“嵌入式Linux中的LED驱动控制”一文实现了在野火STM32MP157开发板上对三个LED灯的控制,这里来讨论一下该驱动程序具体实现的原理。由于实例使用的是STM32MP157这款芯片,所以先来看一下与该芯片端口操作相关的寄存器。 先看端口模式寄存器MODER,该类型的寄存器在STM32MP15
阅读全文
摘要:在“嵌入式Linux中内核模块的基本框架”一文中,已经构建好了内核模块的基本框架结构,现在在该框架的基础上进一步扩展,就可以形成Linux下的字符型设备驱动基本框架,下面就详细进行讨论。 在Linux系统中,设备驱动共分为三种类型,即字符型、块型和网络型。字符型设备以字节为最小操作单位,最为常见,其
阅读全文
摘要:在Linux系统中,驱动程序属于内核态程序,可以认为它是介于操作系统和硬件实体之间的一层,对上负责与操作系统交流,对下负责控制硬件设备。 即,驱动程序对操作系统通过软件接口进行沟通,对芯片硬件通过读写寄存器进行控制。Linux系统的驱动由内核模块(Loadable Kernel Module,简称L
阅读全文
摘要:在前面“嵌入式Linux中字符型驱动程序的基本框架”一文中,讨论了一个字符型驱动的基本框架,但没有实现具体的驱动任务。这里就以野火STM32MP157开发板为例,通过编写一个实际的驱动程序去控制开发板上三个LED的亮灭。 先来看一下LED部分的电路原理图,如下所示。 从上图中可以看到,三个RGB颜色
阅读全文
摘要:串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口(Serial Interface) 是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信,大大降低了成本,特别适用于远距离通信,但传送速度较慢。根据信息的传送方
阅读全文