![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux驱动
晴天_QQ
嵌入式软件开发工程师
展开
-
TFT液晶屏显示原理
1.液晶显示原理我们一般认为物体有三态:固态、液态、气态,其实这只是针对水而言,有一些有机化和物还有介于固态和液态中间的状态就是液晶态,如下图。从成分和出现液晶的物理条件来看液晶可分为热致液晶和溶致液晶两大类:热致液晶:把某些有机物加热溶解,由于加热破坏了液晶晶格形成的液晶。溶致液晶:把某些有机物放在一定的溶剂中,由于溶剂破坏液晶晶格而形成的液晶。用于显示的液晶材料都是热致液晶,生物系统中存在大量...转载 2018-04-24 14:19:39 · 3755 阅读 · 0 评论 -
ARM Linux设备树
1.ARM设备树起源在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,很多代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是垃圾,如板上的platform设备、resource、i2c_board_info、spi_board_info以及各种硬件的platform_data。读者若有兴趣,可以统计一下常见的s3...原创 2018-09-24 09:32:25 · 1221 阅读 · 0 评论 -
Linux下的led子系统分析(二)
内核版本:linux-3.4.2开发板:JZ2440V4编译工具链版本:gcc version 4.5.1上篇文章是翻译的内核中关于led子系统的解读文章,现在来介绍led子系统的核心内容。首先,看涉及到的文件都是有哪些:drivers/leds/led-core.c led-class.c led-triggers.cinclude/linux/leds.h上...原创 2018-09-19 22:34:57 · 1227 阅读 · 0 评论 -
Device Tree(一):背景介绍
一、前言作为一个多年耕耘在linux 2.6.23内核的开发者,各个不同项目中各种不同周边外设驱动的开发以及各种琐碎的、扯皮的俗务占据了大部分的时间。当有机会下载3.14的内核并准备学习的时候,突然发现linux kernel对于我似乎变得非常的陌生了,各种新的机制,各种framework、各种新的概念让我感到阅读内核代码变得举步维艰。 还好,剖析内核的热情还在,剩下的就交给时间的。首先进入视...转载 2018-09-21 20:38:23 · 147 阅读 · 0 评论 -
Device Tree(二):基本概念
一、前言一些背景知识(例如:为何要引入Device Tree,这个机制是用来解决什么问题的)请参考引入Device Tree的原因,本文主要是介绍Device Tree的基础概念。简单的说,如果要使用Device Tree,首先用户要了解自己的硬件配置和系统运行参数,并把这些信息组织成Device Tree source file。通过DTC(Device Tree Compiler),可...转载 2018-09-21 22:27:28 · 187 阅读 · 0 评论 -
启动ARM架构的Linux内核条件说明
为了启动ARM Linux内核,您需要使用bootloader,它是一个在Linux内核之前运行的一小段程序。bootloader代码需要做的就是初始化CPU的各种控制器和外设,将必要的信息传递给内核,并最终调用Linux内核代码执行。事实上,bootloader的代码要完成以下基本的工作:1.设置并初始化RAM(内存);2.初始化一个串口(方便打印调试信息);3.检测机器类型(Mach...原创 2018-09-22 18:41:09 · 635 阅读 · 0 评论 -
Linux和设备树
设备树数据的Linux使用模型作者:Grant Likely <grant.likely@secretlab.ca>本文介绍Linux如何使用设备树。可以在下面的网址设备树使用页面上找到设备树数据格式的概述。https://elinux.org/Device_Tree_Usage"Open Firmware Device Tree"或简称设备树(DT)是用于描述硬件的...原创 2018-11-04 16:18:09 · 558 阅读 · 0 评论 -
设备树规范翻译
1.介绍为了初始化和引导计算机系统,需要各种软件组件进行交互。在将控制权交给软件(如操作系统,引导加载程序或虚拟机监控程序)之前,固件可能会执行系统硬件的低级初始化。bootloader程序或管理程序可以加载和转移控制全给操作系统。而一致的接口和约定有助于这些软件组件之间的交互。在该文档中,引导加载程序一般是指初始化系统状态并将程序执行控制器交给操作系统的软件。引导程序的示例包括:固件,boo...原创 2018-11-11 18:30:20 · 2004 阅读 · 0 评论 -
eMMC协议分析
在进行电路设计之前,必须要明白具体实现的原理,因此本文首先要研究eMMC5.0的协议,这个协议是经过电子设备工程联合委员会JEDEC制定的全球统一标准,对eMMC的具体电路的功能实现和规范进行了统一的制定。本章会对这个协议中与设计相关的协议进行研究总结,而且对该课题用到相关重要部分进行深入研究,是之后硬件电路设计的基础。eMMC设备和系统:eMMC系统有三个模块,分别是主机、eMMC设备和...转载 2018-12-27 19:42:05 · 11784 阅读 · 2 评论 -
eMMC分区管理
1.分区概述eMMC标准中,将内部的Flash Memory划分为4类区域,最多可以支持8个硬件分区,如下图所示:1.1.概述一般情况下,Boot Area Partitions和RPMB Partition的容量大小通常都为4MB,部分芯片厂家也会提供配置的机会。General Purpose Partitions (GPP)则在出厂时默认不被支持,即不存在这些分区,需要用户主动...转载 2019-01-06 18:18:52 · 2620 阅读 · 3 评论 -
eMMC总线协议
1.eMMC总线接口eMMC总线接口定义如下图所示:各个信号的描述如下:CLK:CLK信号用于从Host端输出时钟信号,进行数据传输的同步和设备运作的驱动。在一个时钟周期内,CMD和DAT0-7信号上都可以支持传输1个比特,即SDR(Single Data Rate)模式。此外,DAT0-7信号还支持配置为DDR(Double Data Rate)模式,在一个时钟周期内,可以传...转载 2019-01-06 19:33:14 · 960 阅读 · 2 评论 -
MMC/SD/SDIO介绍
1.前言熟悉Linux kernel的人都知道,kernel使用MMC subsystem统一管理MMC、SD、SDIO等设备,为什么呢?到底什么是MMC?SD和SDIO又是什么?为什么可以用MMC统称呢?在分析Linux kernel的MMC subsystem之前,有必要先介绍一些概念,以便对MMC/SD/SDIO有一个大致的了解,这就是本文的目的。2.基本概念MMC是Mult...转载 2019-01-02 19:31:09 · 1019 阅读 · 0 评论 -
eMMC简介
eMMC是embedded MultiMediaCard的简称。MultiMediaCard,即MMC,是一种闪存卡(Flash Memory Card)标准,它定义了MMC的架构以及访问Flash Memory的接口和协议。而eMMC则是对MMC的一个拓展,以满足更高标准的性能、成本、体积、稳定、易用等的需求。eMMC的整体架构如下图片所示:图. eMMC整体框架eMMC内部主要...转载 2019-01-02 20:06:55 · 19497 阅读 · 0 评论 -
eMMC工作模式
eMMC在Power On、HW Reset或者SW Reset时,Host可以触发eMMC Boot,让eMMC进入Boot Mode。在此模式下,eMMC Device会将Boot Data发送给Host,这部分内容通常为系统的启动代码,如BootLoader。如果Host没有触发Boot流程或者Boot流程完成后,eMMC Device会进入Device Identification M...转载 2019-01-13 12:32:57 · 1580 阅读 · 0 评论 -
eMMC命令详解
本文主要对eMMC的command进行详细介绍,主要包含如下内容:command类型 command格式命令类型:命令类型 说明 bc 不带response的广播命令 bcr 带有response的广播命令 ac 点对点无数据传输 adtc 点对点数据传输 命令格式:如上图所示,eMMC Command由48Bits组成,各个B...转载 2019-01-13 13:58:07 · 16991 阅读 · 0 评论 -
Linux MMC framework(1)_软件架构
1.前言由[1]中MMC、SD、SDIO的介绍可知,这三种技术都是起源于MMC技术,有很多共性,因此Linux kernel统一使用MMC framework管理所有和这三种技术有关的设备。本文将基于[1]对MMC技术的介绍,学习Linux kernel MMC framework的软件架构。2.软件架构Linux kernel的驱动框架有两个要点(尽管本站前面的文章已经多次强调,...转载 2019-01-13 14:58:13 · 682 阅读 · 0 评论 -
Linux下的led子系统分析(一)
最近工作用到Linux内核中的led框架,所以写几篇文章记录自己学习的知识点以及遇到的问题。这批文章是leds-class.txt一文的翻译;文件地址如下:Documentation\leds\leds-class.txt。如果您正在阅读本文并准备实现键盘的LED灯,则这些功能可以由输入子系统处理,并不需要使用led子系统来实现。led子系统的实现很简单,允许从用户空间控制led灯。其实,...翻译 2018-09-16 19:37:08 · 909 阅读 · 0 评论 -
JZ2440V3开发板clk系统分析
开发板:JZ2440V3内核版本:linux-4.16.16函数的调用关系如下:在项目主文件中定义了machine_desc结构体变量:MACHINE_START(S3C2440, "SMDK2440") /* Maintainer: Ben Dooks <ben-linux@fluff.org> */ .atag_offset = 0x100, .init_i...原创 2018-08-31 19:57:14 · 359 阅读 · 0 评论 -
Linux_framebuffer.text文件翻译
本文是"Documentation\fb\framebuffer.txt"一文的翻译。0.引言 帧缓冲设备(framebuffer)为图形硬件设备(LCD)提供了抽象。它代表一些视频硬件的帧缓冲区并允许应用程序通过已经定义好的接口访问图形硬件,所以应用程序不需要知道任何有关底层(硬件寄存器)的东西。可以通过特殊的设备节点来访问帧缓冲区设备,通常位于/dev目录下,即/dev/fb*。1.用户角度观...原创 2018-05-16 09:43:08 · 243 阅读 · 0 评论 -
Linux内核模块简要介绍
本文的主要内容是阅读LDD3书籍的第二章笔记;测试开发板是JZ2440V3,内核版本是Linux version 2.6.22.6。要想为内核构造模块,还必须在自己的系统中配置并构造好内核数。因为内核的模块要和内核源码树中的目标文件进行连接,通过这种方式,可得到一个更加健壮的模块装载器,但也需要这些目标文件存在于内核目录树中。这样,我们就要首先准备好一个内核源代码树,构造一个新内核,然后安装到开发...原创 2018-05-26 20:05:23 · 555 阅读 · 0 评论 -
Linux内核中链表介绍
链表是Linux内核中最简单、最普通的数据结构。链表是一种存放和操作可变数量元素(常称为节点)的数据结构。链表和静态数组的不同之处在于,它所包含的元素都是动态创建并插入链表的,在编译时不必知道具体需要创建多少个元素。另外也因为链表中每个元素的创建时间各不相同,所以它们在内存中无须占用连续内存区。正是因为元素不连续地存放,所以各元素需要通过某种方式被连接在一起。于是每个元素都包含一个指向下一个元素的...原创 2018-06-03 14:45:32 · 7838 阅读 · 1 评论 -
Linux Framebuffer驱动框架、接口实现和使用
一、LinuxFramebuffer的软件需求 1.针对SoC的LCD控制寄存器进行编程,以支持不同的LCD屏,以使该SOC的应用场景最大化。这是硬件平台相关的需求。其对应Linux源码路径arch\arm\mach-s5pv210\XXX210-lcds.c中的实现内容。2.给用户提供一个进程空间映射到实际的显示物理内存的接口(mmap),以使应用在一次拷贝的情况下即可以将图像资源显示到LCD屏...转载 2018-05-16 14:50:56 · 589 阅读 · 0 评论 -
Linux内核中的container_of函数简要介绍
container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址。container_of的定义如下: #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__...原创 2018-06-03 21:08:11 · 8262 阅读 · 1 评论 -
rmmod: chdir(xxx): No such file or directory 解决方法
最近在JZ2440V3开发板上面移植了最新的内核(4.16.16),也移植了根文件系统busybox。但是在做向内核中插入模块的时候发生了:rmmod: chdir(/lib/modules): No such file or directory错误,搜索找到了答案;这是由于使用的busybox不同于发行版linux安装,没有生成相应的目录。 解决方案:创建/lib/modules/$(uname...原创 2018-06-19 22:36:09 · 1566 阅读 · 0 评论 -
剖析Linux系统调用的执行路径
在什么是操作系统这篇文章中,介绍过操作系统像是一个代理一样,为我们去管理计算机的众多硬件,我们需要计算机的一些计算服务、数据管理的服务,都由操作系统提供接口来完成。这样做的好处是让一般的计算机使用者不用关心硬件的细节。1. 什么是操作系统的接口既然使用者是通过操作系统接口来使用计算机的,那到底是什么是操作系统提供的接口呢?接口(interface)这个词来源于电气工程学科,指的是插座与插头的...转载 2018-07-31 22:19:18 · 737 阅读 · 0 评论 -
Linux proc文件系统介绍
最初开发/proc文件系统是为了提供有关系统中进程的信息。但是由于这个文件系统非常有用,因此内核中的很多元素也开始使用它来报告信息,或启用动态运行时配置。/proc文件系统包含了一些目录(用作组织信息的方式)和虚拟文件。虚拟文件可以向用户呈现内核中的一些信息,也可以用作一种从用户空间向内核发送信息的手段。实际上我们并不会同时需要实现这两点,但是本文将向您展示如何配置这个文件系统进行输入和输出。...原创 2018-08-14 22:58:48 · 10949 阅读 · 0 评论 -
Linux内核中队列的实现详解
任何操作系统内核都少不了一个编程模型:生产者和消费者。在该模式中,生产者创造数据(比如说需要读取的错误信息或者需要处理的网络包),而消费者则反过来,读取消息和处理包,或者以其他方式消费这些数据。实现该模型的最简单的方式无非是使用队列。生产者将数据推进队列,然后消费者从队列中摘取数据。消费者获取数据的顺序和推入队列的顺序一致。也就是说,第一个进入队列的数据一定是第一个离开队列的。也正是这个原因,队列...原创 2018-08-02 20:52:41 · 3861 阅读 · 0 评论 -
Linux内核通知链介绍
在阅读内核源码的时候,到处会看到通知链的身影。从技术上来讲,这并不是一个多么复杂、高深、难懂的部分,说白了就是一个单向链表的插入、删除和遍历等操作。但这部分是由协议栈头号大Boss----Alan Cox亲自主刀,足以说明这个基础特性的重要性,也有很多值得我们学习的地方。内核中通知链的基础文件就两个:头文件include/linux/notifier.h源文件kernel/notifier...原创 2018-08-12 11:28:46 · 903 阅读 · 0 评论 -
使用cat读取和echo写内核文件节点的一些问题
平台:busybox-1.24.2Linux-4.10.17Qemu+vexpress-ca9概述:在写驱动的时候,我们经常会向用户空间导出一些文件,然后用户空间使用cat命令去读取该节点,从而完成kernel跟user的通信。但是有时会发现,如果节点对应的read回调函数写的有问题的话,使用cat命令后,节点对应的read函数会被频繁调用,log直接刷屏,而我们只希望read被...转载 2018-08-18 09:27:39 · 2209 阅读 · 3 评论 -
Linux定时器和时间管理
时间管理在内核中占有非常重要的地位。相对于事件驱动而言,内核中有大量的函数都是基于时间驱动的。其中有些函数都是周期执行的,像对调度程序中的运行队列进行平衡调整或对屏幕进行刷新这样的函数,都需要定期执行,比如说,每秒执行100次;而另外一些函数,比如需要推后执行的磁盘I/O操作等,则需要等待一个相对时间后才运行——比如说,内核会在500ms后再执行某个任务。除了上述两种函数需要内核提供时间外,内核还...原创 2018-08-18 19:12:19 · 5447 阅读 · 0 评论 -
S3C2440A时钟(clock)模块介绍
系统时钟:JZ2440V3开发板在没有开启时钟前,整个开发板全靠一个12MHz的晶振提供频率来运行,也就是说CPU,内存,UART等需要用到时钟频率的硬件都工作12MHz下,而S3C2440A可以正常工作在400MHz下,两者速度相差可想而知,就好比牛车和动车。如果CPU工作在12MHz频率下,开发板的使用效率非常低,所有依赖系统时钟工作的硬件,其工作效率也很低,比如,我们电脑里面经常提到的超频...转载 2018-08-26 15:43:44 · 1031 阅读 · 0 评论 -
Linux common clock framework(1)_概述
1.前言common clock framework是用来管理系统clock资源的子系统,根据职能,可分为三个部分:1.向其它driver提供操作clocks的通用API。2.实现clock控制的通用逻辑,这部分和硬件无关。3.将和硬件相关的clock控制逻辑封装成操作函数集,交由底层的platform开发者实现,由通用逻辑调用。因此,蜗蜗会将clock framework的分析文章...转载 2018-08-26 21:06:36 · 157 阅读 · 0 评论 -
Linux common clock framework(2)_clock provider
1.前言本文接上篇文章,从clock driver的角度,分析怎么借助common clock framework管理系统的时钟资源。换句话说,就是怎么编写一个clock driver。由于kernel称clock driver为clock provider(相应的,clock的使用者为clock consumer),因此本文遵循这个规则,统一以clock provider命名。2.clock...转载 2018-08-27 22:24:20 · 525 阅读 · 0 评论 -
Linux MMC framework(2)_host controller driver
1.前言本文是Linux MMC framework的第二篇,将从驱动工程师的角度,介绍MMC host controller driver有关的知识,学习并掌握如何在MMC framework的框架下,编写MMC控制器的驱动程序。同时,通过本篇文章,我们会进一步的理解MMC、SD、SDIO等有关的基础知识。2.MMC host驱动介绍MMC的host driver,是用于驱动MMC ...转载 2019-01-13 15:28:19 · 646 阅读 · 0 评论