- 博客(1320)
- 资源 (33)
- 收藏
- 关注
原创 RK3399平台入门到精通系列讲解 - 总目录
欢迎大家来到内核笔记的《RK3399平台开发入门到精通系列讲解》,开始前博主先列出RK3399平台学习的大纲,同时这也可以作为大家学习RK3399内核与安卓框架的参考。下面蓝字都是传送门,点击进入即可:...
2020-11-17 23:20:48 93958 205
原创 RK3568 从入门到实战项目专栏目录及介绍
本专栏采用AIO-3568J四核高性能人工智能主板。是四核处理器,集成双核心架构GPU以及高效能NPU;支持8G大内存;板载M.2与SATA3.0接口;支持POE+供电;支持WiFi 6,5G/4G无线网络通讯;拥有丰富的扩展接口,可应用于智能NVR、云终端、物联网网关、工业控制等场景。
2018-01-30 20:05:13 29720 52
原创 RK3568平台开发系列讲解(中断篇)延迟工作实验
延迟工作是一种将工作的执行延迟到稍后时间点进行处理的技术。 通常情况下, 当某个任务需要花费较长时间, 不需要立即执行或需要按时执行时, 延迟工作就会派上用场。
2024-11-02 20:04:25 57
原创 RK3568平台开发系列讲解(SPI篇)SPI通信协议介绍
📢SPI是一种常见的设备通用通信协议。它有一个独特优势就是可以无中断传输数据,可以连续地发送或接收任意数量的位。而在I2C和UART中,数据以数据包的形式发送,有着限定位数。
2024-10-31 21:53:18 26
原创 RK3568平台开发系列讲解(SPI篇)GPIO模拟SPI
📢 SPI 通信协议分为硬件 SPI 和软件 SPI。芯片手册中主要描述硬件 SPI,但当硬件 SPI 不足以满足需求时,可以利用 GPIO 来模拟 SPI。与 I2C 协议相比,SPI 协议相对简单,不需要起始信号、应答信号和终止信号。因此,我们无需从零开始编写模拟 SPI 的驱动代码,可以直接使用 Linux 源码中已有的驱动程序。可以看到TX和RX收发的数据是一样,证明SPI回环成功,至此模拟SPI测试就完成了。首先将模拟 SPI 驱动编译进内核,在。首先对设备树进行修改,在根节点添加。
2024-10-31 21:38:40 49
原创 RK3568平台开发系列讲解(I2C篇)I2C 上拉电阻
当总线从低电平转为高电平时,需要通过上拉电阻为总线供电,充电总线电容,如果上拉电阻取值过大,充电时间过长,会导致上升沿过慢,可能影响通信,如果上拉电阻取值过小, 则无法产生低电平, 所以在 I2C 规范中要求总线电容不能超过 400PF,通常建议在 1k 至 10k 欧姆之间选择,能够既保证上升沿速度,又能够可靠拉低总线电平。如果不接上拉电阻,当总线空闲时电平不确定,一个设备拉低总线时其他设备无法感知到总线电平变化,无法实现线与功能。而这里的上拉电阻也并不能随意进行取值,需要考虑总线电容的影响。
2024-10-30 21:34:47 57
原创 RK3568平台开发系列讲解(I2C篇)I2C 应用编程
接口, 在打开 i2cdev 后, 使用ioctl设定要访问的i2c设备的地址, 然后调用read()即可完成读操作。接口, 在打开i2cdev后, 使用ioctl设定要访问的i2c设备的地址, 然后调用write()即可完成读操作。read()接口只能支持单一的方向, 因此, 不能够支持含有RepStart模式的时序, 因此, i2cdev的。接口只能支持单一的方向, 因此, 不能够支持含有RepStart模式的时序, 因此, i2cdev的。这一ioctl cmd用于发起连续的i2c传输操作,使用。
2024-10-30 21:34:28 52
原创 RK3568平台开发系列讲解(I2C篇)通用 I2C 驱动讲解i2c-dev.c
📢借助`i2c_transfer`、`i2c_smbus_xfer`、一个实例化的`i2c_adapter`类型的变量,我们可以与该实例化的`i2c_adapter`类型变量下所有i2c `client`的通信。若基于这种方式与`i2c client`进行通信,那就可以不对具体的`i2c client`开发具体的驱动程序,即可与该`i2c client`进行通信了。基于这种思想,i2c模块为每一个注册到i2c 总线的`adapter`,均创建了对应的字符设备文件,并为该设备文件提供了读写方法(供系统调用
2024-10-29 21:16:54 38
原创 RK3568平台开发系列讲解(I2C篇)通过I2C总线访问客户端方法
📢我们也知道cpu需要通过`i2c adapter`的方法与`i2c client`进行通信。而`i2c`模块也为此抽象出了`cpu`与`i2c client`通信的接口,分别为: - `i2c_transfer` - `i2c_smbus_xfer` 这两个接口分别对应了`i2c`、`smbus`的通信接口,而这两个接口也就是分别调用 - `i2c_adapter->master_xfer` - `i2c_adapter->smbus_xfer`。
2024-10-29 21:16:08 42
原创 RK3568平台开发系列讲解(I2C篇)I2C 总线实现 client 设备方法
📢Linux中的 I2C 也是按照平台总线模型设计的,既然也是按照平台总线模型设计的,是不是也分为一个device 和一个 driver 呢?但是 I2C 这里的 device 不叫 device,而是叫 client。在讲 platform 的时候就说过,platform 是虚拟出来的一条总线,目的是为了实现总线、设备、驱动框架。对于 I2C 而言,不需要虚拟出一条总线,直接使用 I2C 总线即可。
2024-10-28 22:40:04 337
原创 RK3568平台开发系列讲解(调试篇)i2c_bus 驱动总线说明
📢i2c 总线驱动由芯片厂商提供,如果我们使用 ST 官方提供的 Linux 内核, i2c 总线驱动已经保存在内核中,并且默认情况下已经编译进内核。
2024-10-28 22:38:18 70
原创 RK3568平台开发系列讲解(调试篇)CGroup(Control Group)之内存管控
CGroup 的全称是 Control Group,是容器实现环境隔离的两种关键技术之一,它对很多子系统提供精细化的控制的能力,比如下面这些:CPU内存IO网络
2024-10-16 21:30:39 168
原创 RK3568平台开发系列讲解(调试篇)嵌入式必备技能:万用表使用指南
万用表可以帮助你测量电压、电阻、电流、导通是否等等,可以说是作为底层开发必备的⼯具之⼀,可以说了解怎么使⽤万⽤表,是嵌⼊式底层开发最基本的技能点。
2024-10-15 22:02:30 383
原创 RK3568平台开发系列讲解(调试篇)如何在procfs创建一个文件与用户空间交互
在 Linux 的内核中,虚拟文件系统转换层(VFS)的存在,使得各种不同种类的文件都可以通过一组统一的系统调用来处理,其中不仅包括保存在不同格式的文件系统上的磁盘文件,还包括各种不同种类的外部设备,以及进程信息和多种内核参数,等等。特殊文件系统中的文件,其特殊之处在于,它们的信息并不是保存在外部物理存储设备上的,而是在收到读取请求的时候才由内核动态生成的。
2024-10-15 21:49:07 87
原创 RK3568平台开发系列讲解(基础篇)udv:内核是如何发送事件到用户空间
这些是一些常见的 udevadm 子命令, 它们提供了与 udev 设备管理器交互的便捷方式, 用于设备信息查询、 事件监控、 事件触发、 规则测试等操作。通过使用 udevadm 工具, 用户可以更好地理解和管理 Linux 系统中的设备和 udev 机制。udevadm 是一个用于与 udev 设备管理器进行交互的命令行工具。它提供了一系列的子命令, 用于查询和管理设备、 触发 uevent 事件以及执行其他与 udev 相关的操作。它是 udev 和其他设备管理工具与内核通信的一种方式。
2024-10-11 23:19:17 63
原创 RK3568平台开发系列讲解(调试篇)休眠唤醒standby调试指南
休眠状态指的是一种系统低功耗运行状态。在此状态下,各种支持休眠模式的外围设备也都全部进入休眠模式,CPU 挂起,所有用户态应用程序和内核态进程全部被冻结,内存处于自刷新模式。系统处于休眠状态会屏蔽所有除唤醒之外的所有命令,直到系统被某种原因唤醒才会解除此种状态。
2024-10-10 00:43:50 131
原创 RK3568平台开发系列讲解(I2C篇)I2C 总线实现 client 设备方法
📢 Linux 中的 I2C 也是按照平台总线模型设计的,既然也是按照平台总线模型设计的,是不是也分为一个device 和一个 driver 呢?在讲 platform 的时候就说过,platform 是虚拟出来的一条总线,目的是为了实现总线、设备、驱动框架。同样,我们也是先从非设备树开始,先来看一下,在没有设备树之前我们是怎么实现的 I2C 的 device 部分,也就是 client 部分。然后再学习有了设备树之后,我们的 client 是怎么编写的。沉淀、分享、成长,让自己和他人都能有所收获!
2024-10-09 00:41:05 301
原创 RK3568平台开发系列讲解(I2C篇)i2c 总线驱动介绍
i2c 总线维护着两个链表 (I2C 驱动、 I2C 设备),管理 I2C 设备和 I2C 驱动的匹配和删除等。
2024-10-09 00:29:37 135
原创 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 515
原创 RK3568平台开发系列讲解(UART篇)串口应用编程
串口(Serial Port) 也叫串行通信接口, 通常也叫做 COM 接口, 是一种计算机与外部设备(如串口通信设备)进行数据通信的异步全双工接口。它通过串行传输方式, 即一次只发送一个比特位(bit) 来进行数据传输。具体来说, 典型的串口通信只需要 3 根线, 分别是地线(GND),发送线(TX) , 接收线(RX) , 如下图所示,发送和接收各用一条线, 没有时钟线。串口在实际工作中会经常使用, 比如在嵌入式 Linux 下使用调试串口, 它用来登录 Linux系统, 输出日志。
2024-09-12 22:33:26 339
原创 RK3568平台开发系列讲解(PWM篇)使用 sysfs 接口操作 pwm
PWM 子系统被划分为了三个层次, 分别为用户空间、 内核空间和硬件层, 内核空间包括 PWM 设备驱动层、 PWM 核心层和 PWM 适配器驱动层
2024-09-11 00:01:39 384 1
原创 RK3568平台开发系列讲解(PWM篇)PWM 子系统框架
PWM 子系统被划分为了三个层次, 分别为用户空间、 内核空间和硬件层, 内核空间包括 PWM 设备驱动层、 PWM 核心层和 PWM 适配器驱动层
2024-09-10 23:57:29 255
原创 RK3588平台开发系列讲解(显示篇)图像的宽高和跨距
沉淀、分享、成长,让自己和他人都能有所收获!😄“图像的基本组成单元为像素,对视频图像的存储,实际上是对像素的存储”。基于图像位深,我们可以确定存储一个像素所需的字节数,下面,可以开始“指导”计算机如何定量读取图像数据了。像素在图像中是一行一行排列、并逐行存储在内存中的,计算机在读取图像时,就需要逐行地、正确地读取出每一行的像素。这里就引出两个问题:每一行究竟有多少个像素?计算机每获取一行数据需要读取多少个字节呢?
2024-09-04 23:16:51 238
原创 RK3568平台开发系列讲解(UART篇)line discipline
line discipline 介于 TTY 层和具体的串口驱动 ( 比如 serial8250 ) 之间。读和写可以视为消费者和生产者。两个过程操作时需要用到。沉淀、分享、成长,让自己和他人都能有所收获!,对输入和输出进行格式化。canonical 模式下。
2024-08-20 22:00:08 289
原创 RK3568平台开发系列讲解(PWM篇)PWM的使用
PWM 全称是 Pulse Width Modulation,也就是脉冲宽度调制,PWM 信号如图:PWM 信号有两个关键的术语:频率和占空比,频率就是开关速度,把一次开关算作一个周期,那么频率就是 1 秒内进行了多少次开关。占空比就是一个周期内高电平时间和低电平时间的比例,一个周期内高电平时间越长占空比就越大,反之占空比就越小。占空比用百分之表示,如果一个周期内全是低电平那么占空比就是 0%,如果一个周期内全是高电平那么占空比就是 100%。
2024-08-20 20:38:55 456
原创 RK3399平台开发系列讲解(内核入门篇)详解内联汇编
📢要深入理解Linux内核中的同步与互斥的实现,需要先了解一下内联汇编:在C函数中使用汇编代码。现代编译器已经足够优秀,大部分的C代码转成汇编码后,效率都很高。但是有些特殊的算法需要我们手工优化,这时就需要手写汇编代码;或是有时需要调用特殊的汇编指令(比如使用ldrex/strex实现互斥访问),这都涉及内联汇编。
2024-08-14 22:34:17 176
原创 Linux系统调试课:CPUFreq 中央处理器频率调节技术
📢中央处理器频率调节(Central Processing Unit frequency,CPUFreq)技术可以降低ARM芯片的功耗,例如在系统对任务压力较小时,通过调整处理器工作频率与输入电压的大小降低系统功耗。
2024-08-14 22:17:56 586
原创 RK3399平台开发系列讲解(内核入门篇)杂项设备
在 Linux 中,把无法归类的五花八门的设备定义成杂项设备。节省主设备号:杂项设备的主设备号固定为 10,而字符设备不管是动态分配还是静态分配设备号,都会消耗一个主设备号,进而造成了主设备号浪费。当系统中注册了多个 misc 设备驱动时,只需使用子设备号进行区分即可。使用简单:当使用普通的字符设备驱动时,如果开发人员需要导出操作接口给用户空间,就需要注册对应的字符驱动,并创建字符设备 class 从而自动在/dev 下生成设备节点,而 misc驱动只需要将基本信息通过结构体传递给相应处理函数即可。
2024-08-13 22:20:45 100
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关注的人