RK3568平台开发入门到实战项目专栏
文章平均质量分 86
本专栏以RK3568 Android11 为平台,从基础入门到实战项目开发
优惠券已抵扣
余额抵扣
还需支付
¥129.90
¥299.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
内核笔记
一直从业于半导体行业,曾为Linux内核开源文档社区提交过若干文档。
主要从事Linux、Android相关系统软件开发工作,负责Soc芯片BringUp及系统软件开发,喜欢阅读内核源代码,在不断的学习和工作中深入理解内存管理,进程调度,文件系统,设备驱动等内核子系统。
展开
-
RK3568 从入门到实战项目专栏目录及介绍
本专栏采用AIO-3568J四核高性能人工智能主板。是四核处理器,集成双核心架构GPU以及高效能NPU;支持8G大内存;板载M.2与SATA3.0接口;支持POE+供电;支持WiFi 6,5G/4G无线网络通讯;拥有丰富的扩展接口,可应用于智能NVR、云终端、物联网网关、工业控制等场景。原创 2018-01-30 20:05:13 · 29116 阅读 · 52 评论 -
RK3568平台开发系列讲解(LCD篇)Framebuffer开发
它的作用是更新帧缓冲区中的屏幕信息, 例如分辨率、 颜色位深、 像素格式等, 以及修改显存中的图像数据, 从而在显示器上呈现新的图像。应用程序对/dev/fbX 设备节点的读写就相当于对显示设备的显示缓冲区( 显存) 的读写, 以 7 寸 mipi 屏幕为例, 分辨率是 800*1280, 每一个像素点的颜色用 32 位来表示, 那么这个显示缓冲区的大小就是 1280 x 800x 32 / 8 = 4,096,000 个字节(一个字节等于 8 位所以除以 8)。该缓冲区存储了每个像素点的颜色信息。原创 2024-09-12 23:13:08 · 372 阅读 · 0 评论 -
RK3568平台开发系列讲解(UART篇)串口应用编程
串口(Serial Port) 也叫串行通信接口, 通常也叫做 COM 接口, 是一种计算机与外部设备(如串口通信设备)进行数据通信的异步全双工接口。它通过串行传输方式, 即一次只发送一个比特位(bit) 来进行数据传输。具体来说, 典型的串口通信只需要 3 根线, 分别是地线(GND),发送线(TX) , 接收线(RX) , 如下图所示,发送和接收各用一条线, 没有时钟线。串口在实际工作中会经常使用, 比如在嵌入式 Linux 下使用调试串口, 它用来登录 Linux系统, 输出日志。原创 2024-09-12 22:33:26 · 226 阅读 · 0 评论 -
RK3568平台开发系列讲解(PWM篇)PWM的使用
PWM 全称是 Pulse Width Modulation,也就是脉冲宽度调制,PWM 信号如图:PWM 信号有两个关键的术语:频率和占空比,频率就是开关速度,把一次开关算作一个周期,那么频率就是 1 秒内进行了多少次开关。占空比就是一个周期内高电平时间和低电平时间的比例,一个周期内高电平时间越长占空比就越大,反之占空比就越小。占空比用百分之表示,如果一个周期内全是低电平那么占空比就是 0%,如果一个周期内全是高电平那么占空比就是 100%。原创 2024-08-20 20:38:55 · 305 阅读 · 0 评论 -
RK3568平台开发系列讲解(文件系统篇)FLASH 均衡擦写(UBI)
Ubi擦写均衡在ubi驱动中c 处理,ubi驱动中开启两个线程,ubi_work→func指向erase_work函数(处理擦除操作),(wear_leveling_worker)与损益均衡。上层应用通过逻辑地址来访问存储设备,FTL把不同的逻辑地址映射到Nand Flash中的不同位置。最后我们看一下:ensure_wear_leveling。打印位置:ubi_eba_write_leb。打印位置:__erase_worker。我们重点看下:erase_worker。原创 2024-08-07 21:25:46 · 212 阅读 · 0 评论 -
RK3568平台开发系列讲解(文件系统篇)什么是 inode?
为了存储一个文件,除了本身的文件内容块,还需要一个地方来存储文件相关的元信息信息。承载这些文件元数据的数据结构就是 inode(index node),inode 包含了文件元信息,比如文件的所有者、权限、修改时间戳等。可以使用 ls -i 查看一个文件的 inode 号,也使用 stat 命令可以查看文件的 inode 信息。原创 2024-08-07 20:26:08 · 93 阅读 · 0 评论 -
RK3568平台开发系列讲解(SPI篇)SPI device设备树处理过程
在SPI Master对应的设备树节点下,每一个子节点都对应一个SPI设备,这个SPI设备连接在该SPI Master下面。沉淀、分享、成长,让自己和他人都能有所收获!原创 2024-07-13 15:55:37 · 3087 阅读 · 1 评论 -
RK3568平台开发系列讲解(网络篇)netfilter框架
Linux内核自2.4版本开始引入了Netfilter框架,这是一项重要的网络功能增强。Netfilter框架由Linux内核防火墙和网络维护者 Rusty Russell 所提出和实现。这个作者还基于 netfilter 开发了大名鼎鼎的 iptables,用于在用户空间管理这些复杂的 netfilter 规则。Netfilter的核心理念是在网络协议栈的关键路径上设置了一系列钩子(hook)点。这些钩子点允许开发者注册自定义的回调函数,使得网络数据包在流经这些点时,可以被相应的函数拦截并进行处理。原创 2024-07-10 19:11:59 · 3363 阅读 · 1 评论 -
RK3568平台开发系列讲解(调试篇)性能分析:火焰图(flame graph)
火焰图 (Flame Graph) 是性能优化大师 Bredan Gregg 创建的一种性能分析图标,因为它的样子近似火焰而得名。使用火焰图能够非常快速的定位到代码中的瓶颈,它就像一个在代码之海中航行的程序员的地图,指引着性能优化的方向。下图是clickhouse的一张火焰图。原创 2024-06-27 23:16:04 · 3127 阅读 · 1 评论 -
RK3568平台开发系列讲解(调试篇)分析内核调用的利器 ftrace
Ftrace 是一个自 Linux 内核 2.6 版本起就支持的内核调试工具。最初,Ftrace 主要用于函数级别的跟踪(function trace),但经过不断发展,Ftrace 现已成为一个通用的调试框架,能够实现多种跟踪目的。原创 2024-06-26 22:13:38 · 249 阅读 · 2 评论 -
RK3568平台开发系列讲解(SPI篇)SPI数据的传输
RK3568平台开发系列讲解(SPI篇)SPI数据的传输原创 2024-05-15 00:18:55 · 375 阅读 · 1 评论 -
RK3568平台开发系列讲解(SPI篇)spi_dev 驱动分析
RK3568平台开发系列讲解(SPI篇)spi_dev 驱动分析原创 2024-05-15 00:14:42 · 857 阅读 · 2 评论 -
RK3568平台开发系列讲解(Linux系统篇)menuconfig的使用
📢 Linux 内核可以通过输入“make menuconfig”来打开图形化配置界面,menuconfig 是一套图形化的配置工具,本篇我们一起来学习使用menuconfig 配置内核。原创 2024-04-27 22:11:35 · 391 阅读 · 3 评论 -
RK3568平台开发系列讲解(Linux系统篇)中断下半部 tasklet 原理
bit0 表示 TASKLET_STATE_SCHED等于 1 时表示已经执行了 tasklet_schedule 把该 tasklet 放入队列了;tasklet_schedule 会判断该位,如果已经等于 1 那么它就不会再次把tasklet 放入队列。bit1 表示 TASKLET_STATE_RUN等于 1 时,表示正在运行 tasklet 中的 func 函数;函数执行完后内核会把该位清 0。原创 2024-04-10 01:12:26 · 296 阅读 · 2 评论 -
RK3568平台开发系列讲解(pinctrl篇)引脚的复用关系的设置
引脚的复用关系是在什么时候被设置的。原创 2024-03-21 00:47:00 · 520 阅读 · 3 评论 -
RK3568平台开发系列讲解(pinctrl篇)pinctrl 子系统函数操作集
在 pinctrl_desc 结构体中总共有三个函数操作集原创 2024-03-21 00:12:45 · 280 阅读 · 0 评论 -
RK3568平台开发系列讲解(pinctrl篇)什么是 pinctrl子系统
Linux 中的 pinctrl 子系统(Pin Control Subsystem) 是一个用于管理和配置通用输入/输出(GPIO) 引脚的框架。 它提供了一种标准化的方法, 以在 Linux 内核中对 GPIO 引脚进行配置、分配和控制, 从而适应不同的硬件平台和设备。原创 2024-03-16 01:07:54 · 303 阅读 · 2 评论 -
RK3568平台开发系列讲解(基础篇)自旋锁的实现
上述__raw_tickets结构体中有owner、next两个成员,这是在SMP系统中实现spinlock的关键。原创 2024-03-08 00:29:10 · 266 阅读 · 0 评论 -
RK3568平台开发系列讲解(基础篇)设备号的分配和释放
字符设备在/dev目录下,不能简单地把它们当作普通文件。字符设备文件的类型是可以识别的,用ls -l命令能够查看。主设备号和次设备号标识设备,并将其与驱动程序进行绑定。下面列出/dev目录(ls -l /dev)的内容,让我们看一看其工作原理:原创 2024-03-06 23:52:35 · 507 阅读 · 3 评论 -
RK3568平台开发系列讲解(基础篇)文件私有数据
Linux 中并没有明确规定要使用文件私有数据,但是在 linux 驱动源码中,广泛使用了文件私有数据,这是 Linux 驱动遵循的“潜规则”,实际上也体现了 Linux 面向对象的思想。struct file 结构体中专门为用户留了一个域用于定义私有数据。原创 2024-03-01 04:00:00 · 179 阅读 · 0 评论 -
RK3568平台开发系列讲解(Linux系统篇)内核设备与驱动程序的匹配
内核中负责平台设备和驱动程序匹配功能的函数在 /drivers/base/platform.c 中原创 2024-02-25 23:24:43 · 213 阅读 · 1 评论 -
RK3568平台开发系列讲解(Linux系统篇)字符设备驱动:分配和注册字符设备
字符设备在内核中表示为struct cdev的实例。在编写字符设备驱动程序时,目标是最终创建并注册与struct file_operations关联的结构实例,为用户空间提供一组可以在该设备上执行的操作(函数)。原创 2024-02-25 22:59:01 · 164 阅读 · 1 评论 -
RK3568平台开发系列讲解(Linux系统篇)字符设备驱动:主设备和次设备
字符设备通过字符(一个接一个的字符)以流方式向用户程序传递数据,就像串行端口那样。字符设备驱动通过/dev目录下的特殊文件公开设备的属性和功能,通过这个文件可以在设备和用户应用程序之间交换数据,也可以通过它来控制实际的物理设备。这也是Linux的基本概念,一切皆文件。字符设备驱动程序是内核源码中最基本的设备驱动程序。原创 2024-02-25 22:51:59 · 167 阅读 · 1 评论 -
RK3568平台开发系列讲解(Linux系统篇)SPI 客户端通信
SPI I/O模型由一组队列消息组成。我们提交一个或多个struct spi_message结构时,这些结构以同步或异步方式处理完成。单个消息由一个或多个struct spi_transfer对象组成,每个对象代表全双工SPI传输。这是驱动程序和设备之间交换数据的两个主要结构。它们都定义在include/linux/spi/spi.h中原创 2024-02-24 00:08:50 · 531 阅读 · 1 评论 -
RK3568平台开发系列讲解(Linux系统篇)通过I2C总线访问客户端方法
串行总线事务只是访问寄存器来设置/获取其内容。I2C遵循该规则。I2C内核提供两种API,一种用于普通I2C通信,另一种用于兼容SMBUS的设备,它也适用于I2C设备,反之则不然。原创 2024-02-22 19:22:48 · 158 阅读 · 1 评论 -
RK3568平台开发系列讲解(存储篇)文件描述符相关系统调用实现
open()系统调用会分配新的文件句柄(file description),用来维护与打开文件相关的元信息(如偏移量、路径、操作方法等),并会给进程返回一个文件描述符(其实就是个小整数)原创 2024-02-17 01:25:03 · 243 阅读 · 1 评论 -
RK3568平台开发系列讲解(实验篇)杂项设备驱动实验
在 Linux 中,把无法归类的五花八门的设备定义成杂项设备。原创 2024-02-15 03:46:14 · 409 阅读 · 1 评论 -
RK3568平台开发系列讲解(实验篇)用户空间和内核空间数据交换
内核空间和用户空间的内存是不能互相访问的。但是很多应用程序都需要和内核进行数据的交换,例如应用程序使用 read 函数从驱动中读取数据,使用 write 函数向驱动中写数据,上述功能就需要使用 copy_from_user 和 copy_to_user 俩个函数来完成。copy_from_user 函数是将用户空间的数据拷贝到内核空间。copy_to_user 函数是将内核空间的数据拷贝到用户空间。原创 2024-02-15 03:08:03 · 298 阅读 · 0 评论 -
RK3568平台开发系列讲解(Linux系统篇)device 资源的获取
RK3568平台开发系列讲解(Linux系统篇)device 资源的获取原创 2024-01-30 04:00:00 · 306 阅读 · 0 评论 -
RK3568平台开发系列讲解(Linux系统篇)platform 设备的注册
platform_device_register 函数用于将 platform_device 结构体描述的平台设备注册到内核中。原创 2024-01-30 04:00:00 · 156 阅读 · 2 评论 -
RK3568平台开发系列讲解(Linux系统篇)中断线程化
在Linux中,中断线程化(Interrupt Thread)是一种处理中断的方式,它允许将中断处理程序执行的部分移动到一个单独的线程中,而不是在中断上下文中直接执行。这种方式可以提高系统的可维护性、可扩展性和可靠性。原创 2024-01-29 04:00:00 · 354 阅读 · 1 评论 -
RK3568平台开发系列讲解(Linux系统篇)设备树中 GPIO 相关属性
我们以ft5x06设备树中的gpio使用为例原创 2024-01-18 23:56:56 · 290 阅读 · 0 评论 -
RK3568平台开发系列讲解(驱动篇)pinctrl 函数操作集结构体讲解
pinctrl_ops:提供有关属于引脚组的引脚的信息。pinmux_ops:选择连接到该引脚的功能。pinconf_ops:设置引脚属性(上拉,下拉,开漏,强度等)。原创 2024-01-10 00:07:12 · 714 阅读 · 2 评论 -
RK3568平台开发系列讲解(Linux系统篇)Linux 内核打印
在终端使用 dmseg 命令可以获取内核打印信息,该命令的具体使用方法如下所示:原创 2024-01-07 18:27:46 · 1304 阅读 · 0 评论 -
RK3568平台开发系列讲解(Linux系统篇)PWM系统编程
📢本篇将介绍 PWM 的系统编程。原创 2023-12-28 23:26:07 · 1271 阅读 · 0 评论 -
RK3568平台开发系列讲解(Linux系统篇)Linux 热拔插机制 mdev的使能
📢本篇将介绍 Linux 热拔插。原创 2023-12-24 20:21:48 · 1236 阅读 · 0 评论 -
RK3568平台开发系列讲解(Linux系统篇)如何优化Linux驱动的稳定性和效率
📢在 Linux 中应用程序运行在用户空间,应用程序错误之后,并不会影响其他程序的运行,而驱动工作在内核层,是内核代码的一部分,当驱动出现问题之后,可能会导致整个系统的崩溃。所以在驱动中,需要对各种判断、预处理等进行排查等原创 2023-12-16 21:28:43 · 397 阅读 · 0 评论 -
RK3568平台开发系列讲解(Linux系统篇)中断属性解析
📢本篇将介绍通过设备树中的解析。原创 2023-12-10 01:39:43 · 157 阅读 · 0 评论 -
RK3568平台开发系列讲解(Linux系统篇)device_node 转换成 platform_device
📢本篇将介绍通过设备树 device_node 转换成 platform_device原创 2023-12-05 00:25:42 · 215 阅读 · 1 评论 -
RK3568平台开发系列讲解(Linux系统篇) dtb 到 device_node 的转化
📢本篇将介绍通过设备树 dtb 如何展开成 device_node原创 2023-12-03 23:28:54 · 224 阅读 · 2 评论