Home
little Joy Personal
Cancel

BitBake OverView

Introduction BitBake is a generic task execution engine that allows shell and Python tasks to be run efficiently and in parallel while working within complex inter-task dependency constraints. One...

设备树API,用法等

linux内核中有许多设备树相关的API接口,主要声明在文件 <linux/of.h>中。 驱动程序中可以使用,帮助从设备树中解析相关内容。详细信息参考内核源码头文件include/linux/of.h。 另外,还有include/linux/of_xxx.h的头文件。 设备树的节点在内核中使用 struct device_node 表示,这里记录一些api。 查找节点类 查...

设备树PCI相关

设备树用法 PCI相关示例 样例使用 PCI Host Bridge(PCIe RC),像在xilinx的Zynq UltraScale+,Versal平台就有使用。 这里的示例可以参考内核源码的versatile-pb.dts设备树文件。 这里补充一个后面调试过的xilinx的pcie rc的设备树节点,(一些值是根据硬件设置的) amba_pl: amba_pl@0 { ...

设备树基本用法

设备树用法 基本数据格式 树状结构,包含大量节点和属性,属性是key-value键值对,节点中可以包含各种属性和子节点。源文件以 .dts为后缀名。example: /dts-v1/; / { node1 { a-string-property = "A string"; a-string-list-property = "first strin...

设备树简介

设备树介绍 设备树机制最初是Open Firmware固件接口标准的一部分,即Open Firmware Device Tree,是由Open Firmware创建的, 现在一般简称Devicetree (DT)。从概念上讲,它定义了一组通用的用法约定,称为“bindings”,用于定义数据在树中的展现方式, 以展现具体的硬件特征,如数据总线、中断线、GPIO 连接和外围设备。后来,因为一...

内核-completion(完成量)

在Linux内核中,Completion是一种同步机制,旨在解决异步操作中的同步问题。异步操作是指一个进程或线程在执行一个耗时的任务时,可以继续执行其他任务,而不必等待该耗时任务完成。 但在某些情况下,需要等待该异步任务完成后再继续执行后续的操作,这时就可以使用Completion来实现同步。 原理 Completion同步机制本质是等待队列的同步场景下的一个简化封装。Completio...

内核-waitqueue(等待队列)

介绍 在Linux内核中,等待队列(Wait Queue)是一种用于多任务调度和同步的机制。它是一种双向链表的数据结构,用于管理等待某个条件满足的进程或线程的列表。 等待队列通常与同步原语(如信号量、互斥锁等)一起使用,以便在满足特定条件之前,将进程或线程置于休眠状态。 等待队列用于解决并发环境中的竞争条件和资源竞争问题。当某个任务需要等待特定条件的发生时,它可以加入等待队列,并进入睡眠...

内核-perCPU(perCPU变量)

在Linux内核中,per-CPU变量是一种特殊类型的变量,用于在多处理器系统中以一种高效且线程安全的方式进行访问。 每个CPU核心都拥有自己的percpu变量副本,这意味着每个CPU核心都可以独立地读取和写入该变量的值,而无需进行同步操作。 主要特点 线程安全:由于每个CPU核心都有自己的变量副本,因此在不同核心的并发访问之间不存在数据竞争和冲突。每个CPU核心可以独立...

内核-atomic(原子变量)

介绍 在Linux内核中,原子变量(atomic variables)是一种特殊类型的变量,可以在多线程或多核环境下进行原子操作。原子操作是一种不可中断的操作,要么完全执行,要么完全不执行,不存在中间状态。 原子变量通常用于实现同步机制,确保对共享数据的访问和修改在多线程环境下的正确性。它们提供了一组原子操作函数,可以以原子方式执行常见的操作,如读取、写入、递增、递减等,不需要额外的锁机制...

内核-RCU

介绍 RCU(Read-Copy Update),用于实现在并发访问共享数据时的读操作优化。它通过一种延迟内存释放的机制来实现高效的读操作,同时保证数据的一致性。 对于读操作,相当于是免锁的操作,是一定能获取到读锁的(api层面),且是可以并发获取到,因为读操作并不会改变共享资源。 而对于写操作,它采用副本创建技术copy+update,并不是直接在原本的共享资源上直接操作,而是创建一个...