RK3568平台(基础篇)Android开机动画的制作 Android 开机 logo 是可以动态显示或者静态显示的。如果是静态显示,循环播放一章图片,直到系统启动。如果是动态显示,那么开机 logo 由多张图片组成,并且按照规定的帧率来播放。可以播放一轮或者循环播放。
RK3568平台(电源篇)RK806长按power键强制关机 本文适用于RK3588+RK806(电源管理芯片)的方案,power(电源)键是直接控制RK806来控制RK3588的上下电,可以实现短按开机、长按强制断电关机的功能,可以通过控制RK806的寄存器来设置长按的时间长短。
RK3568平台(文件系统篇)文件系统基本概念 文件系统是操作系统用于组织和存储文件以及对文件进行管理的一种机制。它提供了一种结构化的方式,使得计算机系统能够有效地存储、检索和管理文件数据。常规认知中,文件系统包括以下重要的概念:根目录: 文件系统的最顶层目录,包含了所有其他目录和文件的起始点。在根目录下可以有多个子目录和文件。目录: 文件系统中的目录类似于文件夹,用于组织和存储文件。目录可以包含其他子目录和文件。文件: 文件是存储数据的基本单位。文件可以包含文本、图像、音频、视频等各种类型的数据。
RK3568平台(基础篇)系统调用 在 Linux 操作系统中,系统调用(System Call)是用户程序与内核交互的主要方式。操作系统内核负责管理硬件资源,而用户程序(如应用程序)只能访问用户空间中的资源。系统调用通过提供一个接口,使用户程序能够请求操作系统执行特权操作(例如文件操作、内存分配、进程管理等)。
RK3568平台(平台总线篇)I2C senser传感器 sensor_register_device 是一个在嵌入式 Linux 系统中常见的函数,通常用于将传感器设备(如温度传感器、加速度计、湿度传感器等)注册到系统的传感器框架中。通过这个注册过程,内核可以识别并与传感器设备进行交互,从而提供对硬件传感器的访问接口。这个函数的作用是将一个新的传感器设备加入到系统中,使得内核能够管理它、获取数据或提供配置。该函数通常会出现在设备驱动程序中,特别是针对特定硬件传感器的驱动程序中。
RK3568平台(USB篇)USB网络共享 RNDIS 是微软定义的一种协议,它允许通过 USB 接口实现网络连接。通过 RNDIS,USB 设备可以充当网络适配器,允许主机通过 USB 与设备进行网络通信。它通常用于嵌入式设备、智能手机或其他设备,通过 USB 接口向计算机提供网络连接。常见场景:Android 设备通过 USB 连接到电脑,启用“USB 网络共享”功能(USB tethering),就是使用了 RNDIS 协议。另一个常见例子是在嵌入式 Linux 系统中,将设备通过 USB 连接到主机,并作为一个网络接口进行数据交换。
RK3568平台(内存篇)vmalloc虚拟内存管理 1.vmalloc()函数为了把物理上不连续的页面转换为虚拟地址空间上连续的页,必须专门建立页表项。还有,通过vmalloc()获得的页必须一个一个的进行映射(因为它们物理上不是连续的),这就会导致比直接内存映射大得多的缓冲区刷新。因为这些原因,vmalloc()仅在绝对必要时才会使用——典型的就是为了获得大块内存时,例如,当模块被动态插入到内核中时,就把模块装载到由vmalloc()分配的内存上。
RK3568平台(内存篇)mmap原理 既然mmap是实现内存映射的接口,那么内存映射是什么呢?如下图所示:每个进程都有独立的进程地址空间,通过页表和MMU,可以将虚拟地址转换为物理地址,每个进程都有独立的页表数据,这就可以解释为什么两个不同进程相同的虚拟地址却对应着不同的物理地址。
RK3568平台(Kbuild篇)vmlinux 编译过程 vmlinux 是 Linux 操作系统的内核映像文件,它包含了 Linux 内核的所有功能代码和必要的数据结构。这个文件通常是没有经过压缩和符号表去除的原始可执行文件。具体来说,vmlinux 文件是编译后的 Linux 内核的最终产物,通常是 ELF(可执行和可链接格式)格式的文件,包含了内核的机器码、符号信息、调试信息等,主要用于调试和开发阶段。最终在启动时,这个内核映像文件会被压缩成 vmlinuz(即 "v" 表示压缩)文件,后者是 Linux 系统启动时加载的实际文件。
RK3568平台(KBuild篇)KBuild编译体系 从Linux内核2.6开始,Linux内核的编译采用Kbuild系统,这和过去的编译系统有很大的不同,尤其对于Linux内核模块的编译。在新的系统下,Linux编译系统会两次扫描Linux的Makefile:首先编译系统会读取Linux内核顶层的Makefile,然后根据读到的内容第二次读取Kbuild的Makefile来编译Linux内核。kbuild,即 kernel build,用于编译 Linux 内核文件。
RK3568平台(内存篇)内存管理架构 物理内存被分割成相同大小的组,内核用页来表示这个组,页是内核管理内存的基本单位,尽管处理器的最小可寻址单位通常是字, 但是, 内存管理单元MMU通常以页为单位进行处理. 因此,从虚拟内存的上来看,页就是最小单位.页帧代表了系统内存的最小单位, 对内存中的每个页都会创建struct page的一个实例. 内核必须要保证page结构体足够的小,否则仅struct page就要占用大量的内存.体系结构不同,支持的页大小也不尽相同,还有些体系结构甚至支持几种不同的页大小。
RK3568平台(基础篇)io命令支持 io” 命令通常用于显示 Linux 系统中的 I/O 统计信息。它提供了有关磁盘读写操作的详细信息,包括每个块设备的读写次数、读写扇区数、读写延迟等。io命令可以直接操作某个寄存器,用于查看设置某个GPIO 引脚配置了什么iomux。
RK3568平台(input篇)input子系统事件处理层代码分析 Linux 提供了一个通用的事件处理层代码,即 evdev.c。比如在设备驱动层的 input_dev 结构体由 input_register_device 函数所注册input_register_device函数里面会去遍历输入处理程序链表,将输入设备与每个处理程序建立关联。evdev_handler 结构体定义了处理输入设备事件的函数指针,在 Linux内核中, evdev_handler 结构体定义在kernel-5.10\drivers\input\evdev.c。
git diff 查看差异 git diff 命令,默认查看的就是 工作区 和 暂存区之间文件的差异1.git diff : 查看工作区和暂存区之间所有的文件差异2.git diff -- 文件名:查看具体某个文件 在工作区和暂存区之间的差异3.git diff -- 文件名1 文件名2 文件名3:查看多个文件在工作区和暂存区之间的差异【注意】:查看具体文件的时候 -- 和文件名 之间有一个 空格,文件名1 和 文件名2 和 文件名3之间也有空格。
git冲突解决 冲突的成因:Git冲突通常发生在合并分支时,如果两个分支都修改了同一个文件的同一部分,则Git无法自动合并这些更改,需要手动解决。vi两个有冲突的文件,可以找到里面有等字符,修改冲突文件,达到自己想要的结果。冲突的手动解决:识别Git的冲突标记(例如),以及如何选择或合并代码。这时候git reset 到冲突的前一个commitID,解决好的冲突顺利的会到工作区。git status可以看到两个冲突文件。
git查看文件提交信息 2.使用git show +commitID 显示出了上次提交的commit id、作者信息(邮箱和姓名)、提交日期、commit message、代码diff等。1.使用git show +前面的几个commitID号码,能查询是否有这个commitID号的提交。4.使用git log --grep "占空比" 搜索提交历史关键字。3.使用git log查看提交历史。