飞凌嵌入式推出的OKT507-C作为一款广受欢迎的开发板拥有丰富的功能接口,而实际上OKT507-C开发板的CPU引脚资源是比较紧缺的,那么它究竟是如何提供如此丰富的接口资源的呢?答案就是IO扩展芯片——TCA6424A。
Dts:DTS即Device Tree Source,是一个文本形式的文件,用于描述硬件信息。一般都是固定信息,无法变更,无法overlay。
我们需要编写设备树文件 (dts: device tree source) ,它需要编译为 dtb(device tree blob) 文件,内核使用的是 dtb 文件。
设备树(Device Tree),将这个词分开就是“设备”和“树”,描述设备设备树的文件叫做DTS(Device Tree Source),这个DTS文件采用了树形结构来描述板机设备,也就是开发板信息,比如CPU数量、内存基地址、IIC接口上接了那些设备、SPI接口上接了那些设备等。如最开始的图片所示! 在图片中,树的主干就是系统总线,IIC控制器、SPI控制器等都是接到系统主线的分支上的。通过DTS这个文件描述设备信息是有相关的语法规则的,并且在Linux内核中只有3.x版本以后的才支持设备树。
转载请注明文章地址 http://wiki.100ask.org/Linux_devicetree
Device Tree 是目前嵌入式 Linux 系统最常用的设备解耦工具, 所以要玩转嵌入式 Linux , 这个东西必须掌握.
Allwinner 平台支持三种不同类型的Key:GPIO-Key,ADC-Key,AXP-Key。其中,GPIOKey又包括普通的gpio 按键和矩阵键盘。
设备树是一种数据结构,它通过特有的语法格式描述片上片外的设备信息。由BootLoader传递给kernel,kernel进行解析后形成和驱动程序关联的dev结构供驱动代码使用。
介绍Linux 内核中RTC 驱动的适配和DEBUG 方法,为RTC 设备的使用者和维护者提供参考。
高通平台8953 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇)
上一节说过设备树的出现是为了解决内核中大量的板级文件代码,通过 DTS 可以像应用程序里的 XML 语言一样很方便的对硬件信息进行配置。关于设备树的出现其实在 2005 年时候就已经在 PowerPC Linux 里出现了,由于 DTS 的方便性,慢慢地被广泛应用到 ARM、MIPS、X86 等架构上。为了理解设备树的出现的好处,先来看下在使用设备树之前是采用什么方式的。
修改设备树打开 uart1 和 uart2,在 buildroot 移植 minicom 用来测试 uart1 和 uart2。
高通平台8953 Linux DTS(Device Tree Source)设备树详解之三(高通MSM8953 android7.1实例分析篇)
AMD MPSoC Linux一般使用PetaLinux编译Linux系统,包括Linux内核、DTS、文件系统。
在现在的linux内核中都采用设备树来管理资源分配和模块装载,减少依赖性,在树莓派的内核系统中也是这样,设备树其实就是硬件资源的描述文件,代表硬件配置的节点,每一个节点又可以包括子节点和属性。设备树文件一般都是以.dts为后缀的文本文件,即我们常说的DTS(Device TreeSource), 语法有点像C语言,但还是有区别的,要注意。如下面的文件就是一个DTS文件 /dts-v1/; /include/ "common.dtsi"; / { node1 { a-string-
全志平台他Tina系统linux4.9,Tina3.0.1-Tina3.0.3,再往后的版本应该修复了这个问题,此处以R331为例
在内核源码中,存在大量对板级细节信息描述的代码。这些代码充斥在/arch/arm/plat-xxx和/arch/arm/mach-xxx目录,对内核而言这些platform设备、resource、i2c_board_info、spi_board_info以及各种硬件的platform_data绝大多数纯属垃圾冗余代码。为了解决这一问题,ARM内核版本3.x之后引入了原先在Power PC等其他体系架构已经使用的Flattened Device Tree。
Linux内核从3.x开始引入设备树的概念,用于实现驱动代码与设备信息相分离。在设备树出现以前,所有关于设备的具体信息都要写在驱动里,一旦外围设备变化,驱动代码就要重写。引入了设备树之后,驱动代码只负责处理驱动的逻辑,而关于设备的具体信息存放到设备树文件中,这样,如果只是硬件接口信息的变化而没有驱动逻辑的变化,驱动开发者只需要修改设备树文件信息,不需要改写驱动代码。比如在ARM Linux内,一个.dts(device tree source)文件对应一个ARM的machine,一般放置在内核的"arch/arm/boot/dts/"目录内,比如exynos4412参考板的板级设备树文件就是"arch/arm/boot/dts/exynos4412-origen.dts"。这个文件可以通过$make dtbs命令编译成二进制的.dtb文件供内核驱动使用。
在Linux3.x版本后,arch/arm/plat-xxx和arch/arm/mach-xxx中,描述板级细节的代码(比如platform_device、i2c_board_info等)被大量取消,取而代之的是设备树,其目录位于arch/arm/boot/dts
前面通过学习总线、设备、驱动模型知识后,知道了设备和驱动之间都是通过总线进行绑定而匹配的;然后通过设备树的深入探究,知道了设备树的出现大大增加了驱动的通用性;接着我们一起看了 Linux 的启动流程和设备在内核里一层一层的展开。
设备节点要么被转换为platform_device,或者其他结构体(比如i2c_client),但是里面都会有一个device结构体,比如:
资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git 视频观看 百问网驱动大全 资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git 视频观看 百问网驱动大全 编程_
参考地址 http://blog.csdn.net/green1900/article/details/45646095 http://www.cnblogs.com/xiaojiang1025/p/6131381.html http://blog.csdn.net/21cnbao/article/details/8457546
本文档对内核的 GPIO 接口使用进行详细的阐述,让用户明确掌握 GPIO 配置、申请等操作的编程方法。
Linux内核从3.x开始引入设备树的概念,用于实现驱动代码与设备信息相分离。在设备树出现以前,所有关于设备的具体信息都要写在驱动里,一旦外围设备变化,驱动代码就要重写。
设备树(Device Tree),将这个词分开就是“设备”和“树”,描述设备树的文件叫做 DTS(DeviceTree Source),这个 DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息,比如CPU 数量、 内存基地址、IIC 接口上接了哪些设备、SPI 接口上接了哪些设备等等。
Linux-4.9.88\arch\arm\boot\dts\imx6ull.dtsi:
NXP官方linux仓库地址为:https://github.com/Freescale/linux-fslc/tree/5.4-2.1.x-imx。
pincontroller虽然是一个软件的概念,但是它背后是有硬件支持的,所以可以使用一个结构体来表示它:pinctrl_dev。
总线、设备和驱动模型,如果把它们之间的关系比喻成生活中的例子是比较容易理解的。举个例子,充电墙壁插座安静的嵌入在墙面上,无论设备是电脑还是手机,插座都能依然不动的完成它的使命——充电,没有说为了满足各种设备充电而去更换插座的。其实这就是软件工程强调的高内聚、低耦合概念。
在Linux 2.6中, ARM架构的板极硬件细节过多地被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx中,采用设备树后,许多硬件的细节可以直接通过它传递给Linux,而不再需要在内核中进行大量的冗余编码。
rk3568 芯片非常强大,可以支持的屏幕接口有很多,显示接口支持可是非常丰富的,
在之前使用 S3C2440 开发板移植 Linux 3.4.2 内核时,修改了很多关于 c 文件去适配开发板,和开发板相关的文件放在arch/arm/mxch-xxx目录下,因此 linux 内核 arm 架构下添加了很多开发板的适配文件:
介绍 Linux 内核中 UART 驱动的接口及使用方法,为 UART 设备的使用者提供参考。
传输文件每次都插拔 SD 卡太麻烦了,还是使用网线传输文件比较快,借此机会讲述一下 通过 tftp下载 kernel 和 nfs 挂载文件系统
修改内核文件:drivers/video/fbdev/Makefile,把内核自带驱动程序mxsfb.c对应的那行注释掉,如下:
上篇文章(【i.MX6ULL】驱动开发4--点亮LED(寄存器版))介绍了在驱动程序中,直接操作寄存器了点亮LED。本篇,介绍另外一种点亮LED的方式——设备树,该方式的本质也是操作寄存器,只是寄存器的相关信息放在了设备树中,配置寄存器时需要使用OF函数从设备树中读取处寄存器数据后再进行配置。
主要使用pinctrl子系统把引脚配置为LCD功能,对于背光引脚等使用GPIO子系统的函数控制它的输出电平。
Linux驱动程序 = 驱动程序框架 + 硬件编程。 在前面已经基于QEMU编写了LCD驱动程序,对LCD驱动程序的框架已经分析清楚。 核心就是:
FAQ_全志平台Tina3.0.7 RXXX cowbell方案启动时cpufreq报错且无法生成cpufreq节点
进行整体编译时遇到相应的错误,这个是为了跟RK原厂SDK同步的代码,由于我这个是从第三方买来的,故下面这个功能需要屏蔽掉。
今天跟大家分享的是设备树,设备树是Linux3.x以后的版本才引入的,设备树用于描述一个硬件平台的板级细节。
关于设备树,之前就经过详细的系统培训,但是本着会用就行的原则,对各个知识点都没有进行系统的总结。都是用到哪里学哪里,时间长了,基本也忘记了。所以对于后期知识各个知识点进行总结,本章主要讨论一下内容,能看懂和修改对应模块的dts文件。
在platform_device部分有简单说明描述设备有两种方法:一种是使用platform_device结构体来指定;另一种是使用设备树来描述。
在后续课程中我们把GIC之下的中断控制器分为两类:链式(chained)、层级(hierarchy)。
RK系列的SDK给的默认的调试串口都是uart2/1500000波特率,本次调试设备已经把console调试口改为了uart0,所以需要修改下uboot和内核,然后把波特率设为常用的115200。
资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git 视频观看 百问网驱动大全 编程_配置LCD控制器_基于IMX6ULL 参考资料,GIT仓库里: 芯片资料 IMX6ULL\开发板配套资料\datasheet\Core_board\CPU\IMX6ULLRM.pdf 《Chapter 34 Enhanced LCD Interf
资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git 视频观看 百问网驱动大全 编程_配置LCD控制器之寄存器操作_基于IMX6ULL 参考资料,GIT仓库里: 芯片资料 IMX6ULL\开发板配套资料\datasheet\Core_board\CPU\IMX6ULLRM.pdf 《Chapter 34 Enhanced LCD
领取专属 10元无门槛券
手把手带您无忧上云