转载请注明文章地址 http://wiki.100ask.org/Linux_devicetree 这一课是设备树中最重要的一课。...前面我们从内核文档了解到,对于设备树,它里面描述的信息可以分为这三部分: Linux uses DT data for three major purposes: platform identification...事实上,内核对设备树的处理,也会分为与其对应的三部分: 对于platform identification,将在第02节_对设备树中平台信息的处理(选择machine_desc)进行分析; 对于runtime...的简单处理 现在我们开始第一节,我们要从源头分析,uboot将一些参数,设备树文件传给内核,那么内核如何处理这些设备树文件呢?...设备树只是起一个信息传递的作用,对这些信息配置的处理,也比较简单,即从设备树的DTB文件中,把这些设备信息提取出来赋给内核中的某个变量即可。
设备树的解析 setup_machine_fdt unflatten_device_tree 总结 设备树常用OF操作函数 查找节点的 OF 函数 查找父/子节点的 OF 函数 提取属性值的 OF 函数...其他常用的 OF 函数 设备树的解析 我们来看看内核是如何把设备树解析成所需的device_node。...Linux最底层的初始化部分在HEAD.s中,这是汇编代码,暂且不作过多讨论。...setup_arch(&command_line); //... } 而对于设备树的处理,基本上就在 setup_arch() 这个函数中。...unflatten_device_tree(); } 这两个被调用的函数就是主要的设备树处理函数: setup_machine_fdt:根据传入的设备树dtb的根节点完成一些初始化操作。
/****************** * 内核的调试技术 ******************/ (1)内核源代码中的一些与调试相关的配置选项 内核的配置选项中包含了一些与内核调试相关的选项,都集中在...有用的参数有: -t 显示调用发生的时间 -T 显式调用所花费的时间 -f 跟踪所有子进程 -p 跟踪特定进程 -o 将输出的信息导入特定的文件 (5)查看oops消息 oops是内核告知用户有不幸发生的最常用方式...通常,发送完oops后,内核会处于一种不稳定状态。...在某些情况下,oops会导致内核混乱,而混乱的结果就是死机,这些情况可能包括: *oops发生在持有锁的代码中 *oops发生在和硬件设备通讯的过程中 *oops在中断上下文中发生 *oops发生在idle...进程(0)或init进程(1),因为内核没有这两个进程没法工作 如果oops在其他进程运行时发生,内核会杀死该进程并尝试着继续运行。
因此,Linux中LED的驱动框架把所有LED设备的共性给实现了,把不同的地方留给驱动工程师去做。...内核在启动过程中,内核需要按照先后顺序去进行初始化操作。因此,内核给是给启动时要调用的所有初始化函数归类,然后每个类按照一定的次序去调用执行。...这些分类名就叫.initcalln.init,n的值从1到8。内核开发者在编写内核代码时只要将函数设置合适的级别,这些函数就会被链接的时候放入特定的段,内核启动时再按照段顺序去依次执行各个段即可。...详见Linux设备管理:sysfs文件系统的功能及其应用。 led_class_attrs结构体数组设置了leds设备类的属性,即led硬件操作的对象和方法。...led_brightness (brightness_get)(struct led_classdev led_cdev):该函数用于获取LED设备的当前亮度值,LED驱动框架已实现led_get_brightness
/input/keyboard/matrix_keypad.c 修改设备树文件 根据R528 原理图来添加对应行和列的gpio,分别写在row-gpios 和col-gpios,详细设备树文件为: matrix_keypad...设备树文件这里示例的是R328S3 的方案级设备树文件: lichee/linux-4.9/arch/arm/boot/dts/sun8iw18p1.dtsi 详细GPADC 配置如下: gpadc:gpadc...4.2 5.4 内核 4.2.1 LRADC-Key 5.4 内核的LRADC 驱动功能与4.4/4.9 内核的无明显变化,因此下面只介绍设备树文件与配置教程。...-5.4 LRADC 按键配置图 4.2.2 GPADC-Key 5.4 内核的GPADC 设备树配置主要是时钟和中断方面有所改动,board.dts 配置可参考4.9 内核。...这里使用R329 来作为例子,其对应的设备节点为: 图5-1: AXP 按键节点图 上报的键值为KEY_POWER 116 5.1 4.9 内核 修改设备树文件这里以R329-evb1 为例
drivers\input\keyboard\gpio_keys.c 设备树 IMX6ULL:Linux-4.9.88/arch/arm/boot/dts/100ask_imx6ull-14x14...设备树示例 2.1 设备树讲解 属性: 必备:compatible = "gpio-keys"; 可选: autorepeat: 表示自动重复,按下按键不松开,驱动会自动重复上报按键值 对于每一个...GPIO按键,都是一个子节点,有这些属性: gpios:使用哪个GPIO interrupts:对应的中断 linux,code:对应的按键值 注意:gpios和interrupts至少要保留一个,...gpios来描述用到的引脚 gpio_keys_irq_isr:设备树中的用interrupts来描述用到的引脚 3.2 gpio_keys_gpio_isr分析 理想状况是:按下、松开按键,各产生一次中断.../bin 4.2 配置内核 QEMU的内核里已经配置了GPIO按键的设备树,只需要编译出gpio_keys驱动程序即可。
我们需要阅读源码来确定设备树的上述4点内容。 1.2 ICM20608设备树 100ASK_IMX6ULL开发板上,ICM20608接在哪一个SPI控制器上? ?...1.3 SPI控制器驱动程序 1.3.1 找到驱动程序 根据上述设备树信息,在Linux内核源码目录下搜"fsl,imx6ul-ecspi",就可以找到SPI控制器的驱动程序: book@100ask:...我们得找到设备树的处理代码,看看它是怎么从设备树中设置cs_gpios的,搜“cs_gpios”,得到: ?...在SPI设备的节点中,用reg属性指定使用cs-gpios中的哪个片选(从0开始),如下: reg = ; 你看,我们只关心设备树,似乎没怎么看驱动程序啊。...(我们曾经提供一个补丁,它处理的是cs-gpio属性,最新版本的内核已经去除了这个补丁,使用drivers/spi/spi.c处理的是cs-gpios属性) 然后在开发板上安装驱动程序: [root@imx6ull
/****************** * linux内核的时间管理 ******************/ (1)内核中的时间概念 时间管理在linux内核中占有非常重要的作用。...(3)jiffies 全局变量jiffies用于记录系统启动以来产生的节拍的总数。 启动时,jiffies初始化为0,此后每次时钟中断处理程序都会增加该变量的值。...(struct timeval *tv); current_kernel_time()该函数可用于获得timespec #include struct timespec current_kernel_time...:用户空间程序调用read函数从设备读数据,但设备中当前没有产生数据。...直到某些事件发生后,如设备接收到数据,则将进程重新设为运行态并进入运行队列进行调度。 休眠函数的头文件是,具体的实现函数在kernel/wait.c中。
接下来我们要编译驱动程序,编译测试程序,并在单板上测试一样。...dev这面有设备链表 drv这面也有驱动的结构体链表 通过match函数进行对比,如果相同,则调用drv中的probe函数 第05节_使用设备树时对应的驱动编程 本节介绍怎么使用设备树怎么编写对应的驱动程序...只是平台设备的构建区别,以前构造平台设备是在.c文件中,使用设备树构造设备节点原本不存在,需要在dts文件中构造节点,节点中含有资源 dts被编译成dtb文件传给内核,内核会处理解析dtb...commpatible属性必须是 jz2440_led 才可以和驱动匹配成功 我们写驱动的人应该写一个文档,告诉写应用程序的人设备树的节点应该怎么编写 对于内核自带的驱动文件,对应的设备树的文档一般放在...网上搜索 实在不行就研究驱动源码 一个好的驱动程序,它会尽量确定所用资源,只把不能确定的资源留给设备树,让设备树来指定。
YolactEdge 是第一个可在小型边缘设备上以实时速度运行的有竞争力的实例分割方法。...在550x550分辨率的图像上,以ResNet-101为主干网的YolactEdge 在Jetson AGX Xavier上的运行速度高达30.8 FPS(在RTX 2080 Ti上的运行速度为172.7...YolactEdge: Real-time Instance Segmentation on the Edge (Jetson AGX Xavier: 30 FPS, RTX 2080 Ti: 170...作者已经提供了YouTube VIS 、COCO数据集上训练的众多模型: ? ? 可以直接跑起来。 对于做研究的同学来说,作者也提供了简单方便的在主流数据集上评估方法,方便改进后模型比较。 ?...另外,该代码提供了详细的在已有和新数据集上的训练方法,方便做工程的同学自己训练。 相关演示Demo: 总之,对于做实例分割的同学来说,YolactEdge是近期非常值得参考的算法。 ?
11.06.18-Lunix-Distributions-1068x656-1.jpg 传统上,在选择用于部署Linux的发行版时,面临着很多麻烦。...这种发行版的例子有Gentoo、Android和Yocto。 通常,这些基于源的发行版通常对于嵌入式基于Linux的设备尤其是IoT设备是首选。...鉴于当今普遍存在使用英特尔架构机器作为构建机器以及将ARM体系结构用于IoT产品的情况,跨构建支持对于IoT设备至关重要。...以容器为中心的发行版 传统的Linux方法只提供内核外部所有平台的单个统一用户空间。新模型是关于将用户空间组成一个“容器(containers)”的集合。...BSP是包含Linux内核本身,设备驱动程序和用于启用硬件平台的库的部分。它从一个更高的级别开始,需要一个以docker支持为基础的可运行Linux系统。
设备树的出现 上一节说过设备树的出现是为了解决内核中大量的板级文件代码,通过 DTS 可以像应用程序里的 XML 语言一样很方便的对硬件信息进行配置。...关于设备树的出现其实在 2005 年时候就已经在 PowerPC Linux 里出现了,由于 DTS 的方便性,慢慢地被广泛应用到 ARM、MIPS、X86 等架构上。...,我们就要写大量的类似代码,当年 Linus 看到内核里有大量的类似代码,很是生气并且在 Linux 邮件列表里发了份邮件,才有了现在的设备树概念,至于设备树的出现到底带来了哪些好处,先看一下设备树的文件...从上幅图里不难看出,其实设备树的出现在软件模型上相对于之前并没有太大的改变,设备树的出现主要在设备维护上有了更上一层楼的提高,此外在内核编译上使内核更精简,镜像更小。...设备树文件的格式是 dts,包含的头文件格式是 dtsi,dts 文件是一种程序员可以看懂的格式,但是 Uboot 和 Linux 只能识别二进制文件,不能直接识别。
一般情况中断产生设备数量要多于中断控制器,多个中断产生设备的中断都由一个中断控制器处理,这种多对一的关系也很像一个树形结构,所以在设备树中,中断也被描述成树,叫中断树。...以下表述的时候为了明确是在说中断树,在父节点和子节点前边我们都加上“中断”二字,是为了防止和设备树的父节点、子节点混淆(虽然大部分情况设备树的父子关系就是中断树的父子关系,但是因为存在特例,所以我们还是强调是中断父子关系...因为他的中断父设备可能和设备树的父设备不同,那么用interrupt-parent属性指向他的中断父设备。...根据中断树的特性,一个设备树中是有可能有多个中断树的。 以上是中断在设备树中如何描述的规则,听起来是挺复杂的,但只要理解了就很简单,为了帮助理解我们举一个实际的例子。...属性将下边所有设备的中断映射到一个gic下边的中断上。
下图是在100asK_imx6ull上运行的结果,通过对比设备树可知gpiochip96对应gpio4: ?...在驱动代码上不需要我们做任何事情。 GPIO本身需要确定引脚,这也需要在设备树里指定。 设备树节点会被内核转换为platform_device。...如果连文档都没有,那只能参考内核源码中的设备树文件,在内核源码目录arch/arm/boot/dts目录下。 最后一步,网络搜索。 Pinctrl子节点的样式如下: ?...3.3 在设备树中添加GPIO信息 先查看电路原理图确定所用引脚,再在设备树中指定:添加”[name]-gpios”属性,指定使用的是哪一个GPIO Controller里的哪一个引脚,还有其他Flag...在probe函数中获得GPIO 核心代码是第87行,它从该设备(对应设备树中的设备节点)获取名为“led”的引脚。在设备树中,必定有一属性名为“led-gpios”或“led-gpio”。
gpio控制器是由厂商负责驱动好的,在设备树里关于gpio控制器的描述: pio: pinctrl@01c20800 { compatible = "allwinner,sun50i-pinctrl...GPIO的文档描述: 其中“ #gpio-cells = ”表示在设备树里描述使用一个gpio口需要提供6个指定的参数....驱动里如何获取设备树里设备节点的gpio口信息呢?...(会导致kernel panic), // 通过阅读内核里的代码得出, flags的参数应为struct gpio_config类型....设备树里添加对这两个LED和蜂鸣器的描述: jkbuzzer { compatible = "jk,buzzer"; gpios = ; };
irq_type) .map(hwirq,virq) (map就是建立联系的作用,若是子中断,去设置父中断) 第04节_示例_在S3C2440上使用设备树描述中断体验 我们这节课之前所使用的设备树和内核是一个阉割版本...\source_and_images\第5,6课的源码及映像文件(使用了完全版的设备树)\内核补丁及设备树 先解压原始内核(source_and_images\kernel): tar xzf linux...这个驱动程序就不现场编写了,毕竟我们主题是讲设备树,而不是讲怎么写驱动程序。 源码路径 我们在以前按键驱动程序的基础上修改按键驱动程序。.../buttons_test & 然后按键 第06节_内核对设备树中断信息的处理过程 中断结构 从硬件结构上看, 处理过程分上下两个层面: 中断控制器, 使用中断的设备; 从软件结构上看, 处理过程分左右两个部分... a.1 在设备树中的描述 a.2 在内核中的驱动 b.
时钟通道专用于在高速传输数据的过程中传输同步时钟信号。此外,一个主机端可允许同时与多个从属端进行通信。(摘抄自网友) 那么,在Linux中调试MIPI LCD需要注意哪些细节呢?...,就是通用的MIPI接口LCD驱动,它在Linux内核中位于driver/gpu/drm/panel目录下,对应的文件是:panel-simple.c。...一般使用通用的MIPI LCD驱动,我们只需要根据自己选购的屏的参数进行配置即可,也就是只需要配置设备树即可顺利完成点屏的操作,那么如何来配置相关参数呢?...这里我用的是瑞芯微的RV1109方案,在此借用荣品LCD的设备树我们来学习下它的设备树参数: &dsi { status = "okay"; rockchip,lane-rate = ;...Linux内核为我们提供了丰富的文档: 有了这些文档,我们再来看上面设备树节点的内容就简单多了,当然我们也可以结合代码来理解这些参数的含义: 先列举一些重要的参数: 1、enable-gpios和
1.gpio_key.c介绍 1.1 功能介绍 Linux内核下的 drivers/input/keyboard/gpio_keys.c实现了一个体系结构无关的GPIO按键驱动,使用此按键驱动,只需在设备树...该驱动基于platform_driver架构,实现了驱动和设备分离,符合Linux设备驱动模型的思想。本文以自己的理解介绍gpio_keys.c驱动实现原理及代码技巧。...linux,code =; //键值,即中断触发上报的键值与内核定义的保持一致。...以我自己的理解来解释这三种结构体的关系: device_node : 用于采集一个设备树节点信息的结构体。...即设备树中gpios = 第三个参数。此属性还有另一种写法例如gpios = ;意义是一样的。
这时在内核程序里,netdev_rx_handler_register()被调用,一个用于接受数据的回调函数被注册。以后每当这个从设备收到数据时都会调用这个函数可以把数据转发到 Bridge 上。...图 2 .VLAN 设备工作过程 如图所示,Linux 里 802.1.q VLAN 设备是以母子关系成对出现的,母设备相当于现实世界中的交换机 TRUNK 口,用于连接上级网络,子设备相当于普通接口用于连接下级网络...Linux 支持 VLAN 硬件加速,在安装有特定硬件情况下,图中所述内核处理过程可以被放到物理设备上完成。...5) 由于对端的 VETH 设备被加入到了 bridge0 上,并且内核发现它收到一个报文,于是报文被转发到 bridge0 上。...Linux 上配置网络设备命令举例 以 Redhat6.2 红帽 Linux 发行版为例,如果已安装 VLAN 内核模块和管理工具 vconfig,TAP/TUN 设备管理工具 tunctl,那么可以用以下命令设置前述网络设备
特色一: 增强了Jetson AGX Xavier和Jetson Xavier NX的安全引导功能,将加密支持扩展到内核、内核dtb和initrd。...特色二: 支持磁盘加密以保护Jetson AGX Xavier、Jetson Xavier NX和Jetson TX2系列的静态数据。 ——这个其实和L4T无关, 是Linux本身就有的功能....特色三: 对于Jetson TX2系列、Jetson TX1和Jetson Nano模块以及开发套件,支持从USB驱动器或NVME上的根文件系统加载内核、设备树和initrd。 ——这个就厉害了!...因为以前有客户反映, 加了NVME的硬盘后, 只能当成数据盘,而不能从该盘启动(即, 载入内核, 设备树, RAMDISK, 根文件系统等等)。现在这次更新可以了....特色五: 更新所有Jetson Nano开发包的引导固件,将引导固件重新定位到集成QSPI-NOR。开发工具包中的microSD卡将仅用于未来的操作系统/应用程序存储。
领取专属 10元无门槛券
手把手带您无忧上云