- 博客(1433)
- 资源 (33)
- 收藏
- 关注

原创 RK3399平台入门到精通系列讲解 - 总目录
欢迎大家来到内核笔记的《RK3399平台开发入门到精通系列讲解》,开始前博主先列出RK3399平台学习的大纲,同时这也可以作为大家学习RK3399内核与安卓框架的参考。下面蓝字都是传送门,点击进入即可:...
2020-11-17 23:20:48
96993
206

原创 RK3568 从入门到实战项目专栏目录及介绍
本专栏采用AIO-3568J四核高性能人工智能主板。是四核处理器,集成双核心架构GPU以及高效能NPU;支持8G大内存;板载M.2与SATA3.0接口;支持POE+供电;支持WiFi 6,5G/4G无线网络通讯;拥有丰富的扩展接口,可应用于智能NVR、云终端、物联网网关、工业控制等场景。
2018-01-30 20:05:13
31360
52
原创 RK3568平台开发系列讲解(内核篇)Linux kbuild编译系统
从Linux内核2.6开始,Linux内核的编译采用Kbuild系统,这同过去的编译系统有很大的不同,尤其对于Linux内核模块的编译。在新的系统下,Linux编译系统会两次扫描Linux的Makefile:首先编译系统会读取Linux内核顶层的 Makefile,然后根据读到的内容第二次读取Kbuild的Makefile来编译Linux内核。用途:根目录下的 Makefile 是内核构建的核心入口点。用途:包含 kbuild 体系的核心构建规则和工具定义。沉淀、分享、成长,让自己和他人都能有所收获!
2025-03-11 19:22:29
170
原创 RK3568平台开发系列讲解(内核篇)Linux 内核启动流程
自解压:Bootloader 加载压缩的内核映像,内核自解压到内存。内核运行入口:从汇编代码(如 stext)开始,初始化 CPU 和内存管理。汇编阶段:完成低级硬件初始化,设置堆栈、分段和分页。C 函数阶段:进入 start_kernel(),初始化内核核心子系统。启动内核现场:创建第一个用户进程,挂载根文件系统。执行 init 程序:启动用户空间的第一个进程 init,完成系统初始化。
2025-02-26 19:33:05
466
原创 RK3568平台开发系列讲解(UBOOT篇)u-boot启动流程
U-Boot(Universal Bootloader)是一种开源的引导加载程序,广泛用于嵌入式系统中。它的主要功能是初始化硬件设备,加载操作系统内核,并将控制权交给操作系统。U-Boot的启动流程可以分为多个阶段,以下是典型的U-Boot启动流程:
2025-02-26 19:04:37
127
原创 RK3568平台开发系列讲解(调试篇)CGroup(Control Group)
CGroup 的全称是 Control Group,是容器实现环境隔离的两种关键技术之一,它对很多子系统提供精细化的控制的能力,比如下面这些:
2025-02-25 19:20:06
66
原创 当 VSCode 遇见 DeepSeek:AI 赋能未来编程
近期,国产大模型Deepseek v3凭借其卓越的推理能力引发了广泛关注🔥。其官网提供的大模型API接口服务以高性价比著称,价格极具竞争力。本文将介绍如何在VSCode中,通过开源AI编程辅助插件Continue,配置Deepseek的API接口,从而实现常见的AI编程辅助功能。
2025-02-11 19:20:32
1332
原创 RK3568平台开发系列讲解(调试篇)网卡队列均衡负载
RPS(Receive Packet Steering) 是一种用于提高网络接收性能的技术,通常用于多核处理器系统中。它的主要目的是优化网络接收数据包的分配,减少 CPU 负载的集中,改善网络处理性能,特别是在高负载的情况下。RPS 通过将网络接收数据包的处理任务分配到多个 CPU 核心,来平衡各核心的负载,提高多核系统的吞吐量。
2025-02-11 00:42:50
126
原创 RK3568平台开发系列讲解(ConfigFS篇)ConfigFS核心数据结构
理解 ConfigFS 的核心数据结构对于深入使用和定制 ConfigFS 非常重要, 可以帮助开发者更好地进行设备的配置和管理, 提高系统的灵活性和可扩展性。
2025-02-07 19:32:52
314
原创 RK3568平台开发系列讲解(设备树篇)设备树插件驱动
dtbocfg.c 为设备树插件驱动文件。在驱动文件中, 生成 device-tree/overlays 目录结构。
2025-02-07 01:06:42
196
1
原创 RK3588平台开发系列讲解(DMA篇)DMA engine使用
Linux 内核的 DMA 引擎提供了一组完整的接口,用于申请和释放 DMA 通道、准备 DMA 描述符、启动和控制 DMA 传输,以及同步和管理缓存。通过这些接口,内核能够高效地处理异步的 DMA 传输任务,减少 CPU 的干预,提高数据传输的效率。
2025-02-06 19:09:39
298
原创 Linux 音视频入门到实战专栏(视频篇)视频编解码 MPP
瑞芯微提供的媒体处理软件平台(Media Process Platform,简称MPP)是适用于瑞芯微芯片系列的通用媒体处理软件平台。该平台对应用软件屏蔽了芯片相关的复杂底层处理,其目的是为了屏蔽不同芯片的差异,为使用者提供统一的视频媒体处理接口(Media Process Interface,缩写MPI)。视频解码 H.265 / H.264 / H.263 / VP9 / VP8 / MPEG-4 / MPEG-2 / MPEG-1 / VC1 / MJPEG / AV1。
2025-01-18 23:31:51
575
1
原创 Linux 音视频入门到实战专栏(音频篇)基于alsa api的音频播放/录制流程
音频播放流程主要包括打开设备、设置参数、写入数据和关闭设备等步骤。
2025-01-15 00:39:11
437
原创 RK3588平台开发系列讲解(调试篇)CGroup 精细化的控制
可以看到 CGroup 可以控制的子系统。其中 CPU 和 memory 我们日常关注是最多的,接下来我们来看看 CGroup 与 CPU 相关的内容。
2025-01-14 21:13:32
229
1
原创 RK3588平台开发系列讲解(系统篇)Linux Kconfig的语法
Kconfig的语法及代码结构非常简单。本博文只介绍Kconfig中常用的几个知识点。更详尽的内容可以参阅Linux官方提供的帮助文档。这份文档们于内核源码目录下的 ./Document/kbuild/kconfig-language.txt。所谓 Kconfig,其实就是一个位于要被控制的程序模块源码目录下的文件名为 Kconfig 的普通的文本文件而已。Kconfig文件在Linux系统中的数量是不确定的。
2025-01-06 00:18:58
465
1
原创 RK3568平台开发系列讲解(Linux文件系统篇)文件描述符相关系统调用实现
open()系统调用会分配新的文件句柄(file description),用来维护与打开文件相关的元信息(如偏移量、路径、操作方法等),并会给进程返回一个文件描述符(其实就是个小整数)。close() 系统调会回收文件描述符,同时会给文件描述符指向的文件句柄(file description)的引用计数减 1,并在需要的时候进行回收。沉淀、分享、成长,让自己和他人都能有所收获!
2024-12-28 11:30:00
146
1
原创 RK3568平台开发系列讲解(Linux文件系统篇)I/O的访问方式有哪些?
上图中我以 read() 操作为例,它会导致数据先从磁盘拷贝到 Page Cache 中,然后再从 Page Cache 拷贝到应用程序的用户空间,这样就会多一次内存拷贝。在实际应用中,如果某些数据我们觉得非常重要,是完全不允许有丢失风险的,这个时候我们应该采用同步写机制。它们希望可以绕开页缓存机制,这样可以减少一次数据拷贝,这些数据也不会污染页缓存。从图中你可以看到,直接 I/O 访问文件方式减少了一次数据拷贝和一些系统调用的耗时,很大程度降低了 CPU 的使用率以及内存的占用。
2024-12-28 08:30:00
109
原创 RK3568平台开发系列讲解(Linux文件系统篇)缓存
因为硬盘的读写速度远远低于内存的读写速度,如果直接让内存与硬盘进行交换数据,那么会导致内存资源严重浪费,因为为了优化此问题,在UNIX当中,读写的数据会先存放到高速缓存中,以提高读写速度,linux以页作为高速缓存的单位,当进程修改了高速缓存里的数据时,该页就被内核标记为脏页,内核将会在合适的时间把脏页的数据写到磁盘中去,以保持高速缓存中的数据和磁盘中的数据是一致的。这种输出方式就被称为延迟写。延迟写减少了磁盘读写次数,但是却降低了文件内容的更新速度,使得欲写到文件中的数据在一段时间内并没有写到磁盘上。
2024-12-27 10:00:00
247
1
原创 RK3568平台开发系列讲解(Linux文件系统篇)Linux 存储系统的 I/O 栈
缓存机制在优化 I/O(输入/输出)效率方面起着关键作用,它可以显著提高数据访问速度并降低对底层存储设备的频繁访问。我们可以把 Linux 存储系统的 I/O 栈,由上到下分为三个层次,分别是文件系统层、通用块层和设备层。根据这张 I/O 栈的全景图,我们可以更清楚地理解,存储系统 I/O 的工作原理。📢本篇将介绍 Linux 存储系统的 I/O 原理。沉淀、分享、成长,让自己和他人都能有所收获!
2024-12-27 09:30:00
89
原创 RK3568平台开发系列讲解(Linux文件系统篇)挂载文件系统
管理员可以执行命令“mount-tfstype [-ooptions] devicedir”,把存储设备device上类型为fstype的文件系统挂载到目录dir下。例如:命令“mount-text4/dev/sda1 /a”把SATA硬盘a的第一个分区上的EXT4文件系统挂载到目录“/a”下。参数dev_name是设备名称,参数dir_name是目录名称,参数type是文件系统类型的名称,参数flags是挂载标志位,参数data是挂载选项。虚拟文件系统在内存中把目录组织为一棵树。
2024-12-26 09:00:00
466
原创 RK3568平台开发系列讲解(Linux文件系统篇)UBI均衡(Wear-leveling)
Ubi擦写均衡在ubi驱动中c 处理,ubi驱动中开启两个线程,ubi_work→func指向erase_work函数(处理擦除操作),(wear_leveling_worker)与损益均衡。上层应用通过逻辑地址来访问存储设备,FTL把不同的逻辑地址映射到Nand Flash中的不同位置。沉淀、分享、成长,让自己和他人都能有所收获!
2024-12-26 09:00:00
146
原创 RK3568平台开发系列讲解(Linux文件系统篇)虚拟文件系统的数据结构
目录a称为挂载点,文件系统2的mount实例是文件系统1的mount实例的孩子,文件系统1的mount实例是文件系统2的mount实例的父亲。d_lru用来把目录项加入超级块的最近最少使用(Least Recently Used,LRU)链表s_dentry_lru中,当目录项的引用计数减到0时,把目录项添加到超级块的LRU链表中。(7)成员mnt_instance用来把挂载描述符添加到超级块的挂载实例链表中,同一个存储设备上的文件系统,可以多次挂载,每次挂载到不同的目录下。
2024-12-25 09:15:00
84
原创 RK3568平台开发系列讲解(中断及异常篇)中断亲和性
配置完以后,可以连续执行命令“cat /proc/interrupts | grep ‘CPU|32:’”,观察是否只有处理器0~3收到了Linux中断号为32的中断。在多处理器系统中,管理员可以设置中断亲和性,允许中断控制器把某个中断转发给哪些处理器,有两种配置方法。例如,我们想要配置允许中断控制器把Linux中断号为32的中断转发给处理器0~3,配置方法有两种。目录:soc/fsl/qbman/qman_portal.c。沉淀、分享、成长,让自己和他人都能有所收获!
2024-12-25 09:00:00
271
1
原创 RK3568平台开发系列讲解(中断及异常篇)异常
当异常发生的时候,处理器需要执行异常的处理程序。存储异常处理程序的内存位置称为异常向量,通常把所有异常向量存放在一张表中,称为异常向量表。同步异常是试图执行指令时生成的异常,或是作为指令的执行结果生成的异常。异步异常不是由正在执行的指令生成的,和正在执行的指令没有关联。在ARM64体系结构中,异常分为同步异常和异步异常。沉淀、分享、成长,让自己和他人都能有所收获!
2024-12-24 09:30:00
377
原创 RK3568平台开发系列讲解(中断及异常篇)Linux 中断系统中的重要数据结构
irq_domain用它维护基树中Linux IRQ和hwirq号之间的映射。映射hwirq时,会分配irq_desc,并将hwirq用作基树的查找键。如果hwirq号非常大,那么树映射是一个不错的选择,因为它不需要分配与最大hwirq号一样大的表。其缺点是hwirq到IRQ号的查找取决于表中的项数。CPU获得请求后,停止其实际工作,保存其上下文,以便服务于设备发出的请求。它管理硬件IRQ和Linux IRQ(虚拟IRQ)之间的映射。这里描述的一些字段是内部的,IRQ内核使用这些字段。
2024-12-23 19:52:50
354
原创 RK3568平台开发系列讲解(中断及异常篇)中断子系统框架
这样, CPU 和中断控制器在标识中断上就有了一些不同的概念, 但是, 对于驱动工程师而言, 我们和 CPU 视角是一样的, 我们只希望得到一个 IRQ number, 而不关系具体是那个 GIC中断控制器上的那个 HW interrupt ID。: 对于 GIC 中断控制器而言, 它收集了多个外设的 interrupt request line 并向上传递, 因此, GIC 中断控制器需要对外设中断进行编码。通用层的代码在所有硬件平台上都是通用的, 不依赖于具体的硬件架构或中断控制器。
2024-12-23 19:47:11
273
原创 RK3568平台开发系列讲解(中断及异常篇)应用读取按键
驱动程序中构造、注册一个 file_operations 结构体,里面提供有对应的 open,read 函数。APP 调用 open 时,导致驱动中对应的 open 函数被调用,在 里面配置 GPIO 为输入引脚。APP 调用 read 时,导致驱动中对应的 read 函数被 调用,它读取寄存器,把引脚状态直接返回给 APP。第 2、3、4 种方法,都涉及中断服务程序。中断,就像小孩醒了会哭闹一样, 中断不经意间到来,它会做某些事情:唤醒 APP、向 APP 发信号。所以,在按键驱动程序中,中断是核心。
2024-12-21 09:00:00
70
原创 RK3568平台开发系列讲解(中断及异常篇)设备树中断信息节点
第 4 行, interrupts 描述中断中断源的信息,第一个表示中断类型,为 GIC_SPI,也就是共享中断。③、 SGI(Software-generated Interrupt),软件中断,由软件触发引起的中断,通过向寄存器GICD_SGIR 写入数据来触发,系统会使用 SGI 中断来完成多核之间的通信。RK809 是开发板上核心板的 PMIC 芯片,上述代码就是 RK809的节点信息, RK809 芯片有一个中断,此引脚链接到了 RK3568 的 GPIO0_A3 上,此中断是电平触发。
2024-12-20 10:00:00
71
原创 RK3568平台开发系列讲解(中断及异常篇)中断下半部:中断线程化
以前用 work 来线程化地处理中断,一个 worker 线程只能由一个 CPU 执行, 多个中断的 work 都由同一个 worker 线程来处理,在单 CPU 系统中也只能忍着 了。少数中断不能线程化,典型的例子是时钟中断,有些流氓进程不主动让出处理器,内核只能依靠周期性的时钟中断夺回处理器的控制权,时钟中断是调度器的脉搏。中断处理线程是优先级为50、调度策略是SCHED_FIFO的实时内核线程,名称是“irq/”后面跟着Linux中断号,线程处理函数是。,说明是线程化的中断,那么唤醒中断处理线程。
2024-12-20 09:30:00
71
原创 RK3568平台开发系列讲解(中断及异常篇)按键中断实验
📢GPIO3_C5 引脚来模拟按键,不过我们采用中断的方式,并且采用定时器来实现按键消抖,应用程序读取按键值并且通过终端打印出来。IRQ_TYPE_EDGE_BOTH 表示上升沿和下降沿同时有效,相当于按下和释放都会触发中断。沉淀、分享、成长,让自己和他人都能有所收获!
2024-12-19 20:56:48
139
1
原创 RK3568平台开发系列讲解(中断及异常篇)并发管理工作队列实验
我们认识到传统的工作队列无论是单核系统还是多核系统上都是有缺陷的。比如无法充分利用多核处理器的计算能力以及对于不同优先级的工作项无法提供公平的调度。为了解决这些问题, Con Kolivas 提出了 CMWQ 调度算法。CMWQ 全称是 concurrency Managed Workqueue, 意为并发管理工作队列。并发管理工作队列是一种并发编程模式, 用于有效地管理和调度待执行的任务或工作项。它通常用于多线程或多进程环境中, 以实现并发执行和提高系统的性能。CMWQ 工作实现如下图。
2024-12-19 10:00:00
806
原创 RK3568平台开发系列讲解(中断及异常篇)中断下半部:延迟工作实验
延迟工作是一种将工作的执行延迟到稍后时间点进行处理的技术。通常情况下, 当某个任务需要花费较长时间, 不需要立即执行或需要按时执行时, 延迟工作就会派上用场。延迟工作的基本思想是将任务放入一个队列中, 然后由后台的工作进程会任务调度程序来处理队列中的任务。任务可以在指定的延迟时间后执行, 也可以根据优先级, 任务类型或者其他条件进行排序和处理。延迟工作在许多应用场景中都非常有用, 尤其是在需要处理大量任务, 提供系统性能和可靠性的情况下。
2024-12-18 08:45:00
479
原创 RK3568平台开发系列讲解(中断及异常篇)中断下半部:自定义工作队列的使用
在 Linux 内核中,结构体描述的是要延迟执行的工作项,定义在当中,如下所示:这些工作组织成工作队列,内核使用结构体描述一个工作队列,定义在export ARCH=arm64#设置平台架构export CROSS_COMPILE=aarch64-linux-gnu-#交叉编译器前缀KDIR :=/home/Linux/linux_sdk/kernel #这里是你的内核目录PWD?
2024-12-18 08:30:00
159
RK3399 Android7.1-Box 软件开发指南 V1.01-20170401.rar
2021-06-04
ioremap_gpio_demo.c
2021-02-26
rkisp的驱动代码
2020-10-21
MLX90640红外开发资料包.zip
2020-02-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人