![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
device-trees
device-trees
qq_34738528
这个作者很懒,什么都没留下…
展开
-
设备树led
硬件king3288两个led:RED、BLUE使用LED1进行解析:32*4 + 8*3 + 3=155 0:低电平有效设备树rpdzkj_config.dtsiled_gpio{ compatible = "led_gpio";//匹配 status = "okay";//使能 led_gpio =<&gpio4 GPIO_D3 ...原创 2020-04-01 12:47:13 · 258 阅读 · 0 评论 -
平台总线驱动模型
这是在整理设备树时,发现平台设备还是不够的清楚,这里在重新详细的整理一下下图是嵌入式系统常见的硬件拓扑的一个示例platform总线设备模型platform_bus_init过程中,platform_bus_type总线和platform_bus设备的注册,以及构建的目录结构driver/base/platform.cplatform_bus_init//总...原创 2020-03-31 14:51:26 · 144 阅读 · 0 评论 -
6.4使用设备树指定lcd参数
目录参考文章:实验方法: 临时笔记:代码zj2440-irq.dts参考文章:讓TQ2440也用上設備樹(1)http://www.cnblogs.com/pengdonglin137/p/6241895.html参考代码: https://github.com/pengdonglin137/linux-4.9/blob/tq2440_dt/driv...原创 2020-03-30 15:04:32 · 260 阅读 · 0 评论 -
6.3在设备树中pinctrl的简单使用
文档:内核 Documentation/devicetree/bindings/pinctrl/samsung-pinctrl.txt几个概念:Bank: 以引脚名为依据, 这些引脚分为若干组, 每组称为一个Bank 比如s3c2440里有GPA、GPB、GPC等Bank, 每个Bank中有若干个引脚, 比如GPA0,GPA1, ..., GPC0, GPC...原创 2020-03-30 14:59:54 · 315 阅读 · 0 评论 -
6.2设备树中时钟的使用
s3c2440.dtsixti: xti_clock { compatible = "fixed-clock"; clock-frequency = <12000000>;//晶振 clock-output-names = "xti"; #clock-cells = <0>; }; clocks: clock-controller...原创 2020-03-30 14:57:33 · 1391 阅读 · 1 评论 -
4.1uboot对设备树的支持——传递dtb给内核
从flash中将设备树读入内存,在启动内核时,把设备树所在的地址写到r2寄存器中就可以了。a. u-boot中内核启动命令: bootm <uImage_addr> // 无设备树,bootm 0x30007FC0 bootm <uImage_addr> <initrd_addr> ...原创 2020-03-30 14:40:01 · 886 阅读 · 0 评论 -
3.8在根文件系统中查看设备树(有助于调试)
内核启动后会进入根文件系统,在根文件系统中如何查看设备树,查看设备树有助于调试驱动程序。a.我们知道uboot会把dtb文件传给内核,并且dtb文件所占的那块内存会被保留下来,我们可以在内核启动之后,查看那块内存,查看里面原始的dtb文件。/sys/firmware/fdt//原始dtb文件进入/sys/firmware目录后便可看到二个文件,一个是devicetree文件夹,另一...原创 2020-03-30 14:27:53 · 709 阅读 · 0 评论 -
3.5device_node转换为platform_device
以前在写驱动程序的时候,需要把驱动分为平台device和平台driver两部分。在平台device中会放入硬件所使用的资源,使用C代码来指定platform_device,当需要修改硬件资源时,比如说想去修改led的引脚时,需要重新修改C文件,重新编译内核。再后来我们使用了设备树,可以在设备树中指定硬件资源。设备树是dts文件,它会转换成dtb文件,最终给内核使用。内核会来解析dtb文件得到...原创 2020-03-30 12:17:46 · 216 阅读 · 0 评论 -
3.4dtb转换为device_node
device_node只是某个结构体而已。在uboot中把设备树文件随表放入内存中的某个地方就可以使用,为什么内核运行过程中它不会覆盖dtb文件所占用的那块内存呢?在设备树格式那篇文章中曾经说过,在设备树文件中可以用memreserve指定一块内存,这块内存就是保留下来的内存,内核不会占用它。即使没有指定这块内存,当内核启动的时候,它也会把设备树文件所在的那块内存保留出来。看一下函数...原创 2020-03-27 16:18:34 · 134 阅读 · 0 评论 -
3.2-3.3对设备树中运行时配置信息的处理
设备树仅仅起到信息传递的作用,对配置信息的处理相对来说比较简单,即从设备树中将信息提取出来,然后赋给内核中的某一变量。函数调用过程:start_kernel // init/main.c setup_arch(&command_line); // arch/arm/kernel/setup.c mdesc = setup_machine_fdt(__...原创 2020-03-27 15:08:33 · 114 阅读 · 0 评论 -
3.1从源头分析_内核head.S对dtb的简单处理
uboot把设备树文件传给内核,内核怎么处理这些设备树文件呢?需要从内核的第一个执行文件head.s开始分析。bootloader启动内核时,会设置r0,r1,r2三个寄存器,r0一般设置为0;r1一般设置为machine id(在使用设备树时该参数没有被使用);r2一般设置ATAGS或DTB的开始地址machine_id有什么作用呢?一个内核比如说uImage可以支持...原创 2020-03-27 14:54:19 · 173 阅读 · 0 评论 -
3.7内核中设备树的操作函数
内核中开放出来的接口函数的声明大多在include/linux/下面,关于设备树的都是以ofxxx.h形式命名这里介绍一下各个头文件中是关于那些的函数of_fdt.h // dtb文件的相关操作函数, 我们一般用不到, 因为dtb文件在内核中已经被转换为device_node树(它更易于使用) b. 处理device_nodeof.h ...原创 2019-11-18 15:16:22 · 115 阅读 · 0 评论 -
3.6platform_device和platform_driver如何让匹配
分析主要是在匹配函数里面的支持设备树。struct bus_type platform_bus_type = { .name = "platform", .dev_groups = platform_dev_groups, .match = platform_match, .uevent = platform_uevent, .dma_configure = ...原创 2019-11-18 14:54:19 · 119 阅读 · 0 评论 -
2.设备树dts/dtb格式
一、前言简单的说,如果要使用Device Tree,首先用户要了解自己的硬件配置和系统运行参数,并把这些信息组织成Device Tree source file。通过DTC(Device Tree Compiler),可以将这些适合人类阅读的Device Tree source file变成适合机器处理的Device Tree binary file(有一个更好听的名字,D...原创 2019-11-18 14:33:21 · 160 阅读 · 0 评论 -
1.5-1.6使用设备树时对应的驱动编程
简介a. 使用"总线设备驱动模型"编写的驱动程序分为platform_device和platform_driver两部分 platform_device : 指定硬件资源, 来自.c文件 platform_driver : 根据与之匹配的platform_device获得硬件资源, 并分配/设置/注册file_operationsb. 实际上platform_devi...原创 2019-11-17 11:29:56 · 235 阅读 · 0 评论 -
1.4-总线设备驱动模型
回顾a. 驱动程序分为platform_device和platform_driver两部分 platform_device : 指定硬件资源 platform_driver : 根据与之匹配的platform_device获得硬件资源, 并分配/设置/注册file_operationsb. 如何确定platform_device和platfo...原创 2019-12-17 15:02:28 · 87 阅读 · 0 评论 -
1.1-1.3设备树的引入与体验
字符设备驱动程序的三种写法a. 驱动程序编写有3种方法:传统方法、使用总线设备驱动模型、使用设备树b. 这3种方法也核心都是一样的: 分配、设置、注册 file_operations结构体 这个结构体中有.open, .read, .write, .ioctl等成员 驱动程序要实现这些成员,在这些成员函数中操作硬件c. 这3种方法的差别在于:如何指定硬件资源,比如如何指定...原创 2020-03-19 11:58:08 · 102 阅读 · 0 评论