嵌入式_笔记
!
展开
-
RK3568平台(基础篇)Android开机动画的制作
Android 开机 logo 是可以动态显示或者静态显示的。如果是静态显示,循环播放一章图片,直到系统启动。如果是动态显示,那么开机 logo 由多张图片组成,并且按照规定的帧率来播放。可以播放一轮或者循环播放。原创 2025-01-17 22:07:21 · 8 阅读 · 0 评论 -
自我介绍面试篇
其中,在 [项目名称一] 中,我负责设计和实现了基于 [具体嵌入式平台名称] 的智能车项目。在团队合作中,我善于倾听他人的意见,能够与不同背景的人有效地沟通和协作,共同完成项目目标。在校期间,我系统地学习了嵌入式系统的原理、架构和开发方法,包括C/C++语言,ARM处理器体系结构、LINUX操作系统、数字电路与逻辑设计等课程。我渴望加入大疆这个优秀的团队,与各位专业人士一起,为推动嵌入式技术的发展而努力。我对嵌入式技术充满热情,并且坚信自己的技能和经验能够为大疆在这个领域的发展贡献一份力量。原创 2024-12-06 21:52:33 · 391 阅读 · 0 评论 -
RK3568平台 阻塞IO和非阻塞IO
IO 模型根据实现的功能可以划分为为阻塞 IO、非阻塞 IO、信号驱动IO,IO多路复用和异步 IO。根据等待 IO 的执行结果进行划分,前四个 IO 模型又被称为同步IO.同步IO与异步IO:以现实生活去餐馆吃饭为例,根据菜单进行点餐之后,这时会存在两个选择,第一个选择是在餐馆等待饭菜制作完毕,这就是同步 IO 的具体表现。第二个选择是,离开餐馆去做其他的事情,工作人员会在饭菜制作完成之后提醒你回餐馆取餐,这就是异步IO的具体表现。原创 2024-02-25 20:39:14 · 476 阅读 · 0 评论 -
RK3568平台(设备模型篇)设备模型基本框架-kobject 和kset
字符设备驱动通常适用于相对简单的设备,对于一些更复杂的功能,比如说电源管理和热插拔事件管理,使用字符设备框架可能不够灵活和高效。为了应对更复杂的设备和功能,Linux内核提供了设备模型。设备模型允许开发人员以更高级的方式来描述硬件设备和它们之间的关系,并提供一组通用 API 和机制来处理设备的注册,热插拔事件,电源管理等。通过使用设备模型,驱动开发人员可以将更多的底层功能交给内核来处理,而不必重复实现这些基础功能。这使得驱动的编写更加高级和模块化,减少了重复工作和出错的可能性。原创 2024-02-05 00:12:04 · 787 阅读 · 0 评论 -
RK3568平台(并发篇)并发与竞争控制机制总结
原子”是化学世界中不可再分的最小微粒,一切物质都由原子组成。在Linux 内核中的原子操作可以理解为“不可被拆分的操作”,就是不能被更高等级中断抢夺优先的操作。在C语言中可以使用以下代码对一个整形变量赋值。原创 2023-12-22 00:26:07 · 1061 阅读 · 0 评论 -
RK3568平台(PCIE篇)PCIE基础知识
先认识CPU是如何访问内存进而引出CPU是如何访问PCIE内存的。CPU发出addr,可以用来方位EMMC控制器。但是CPU发出的addr,不能直接到达EMMC Flash。想访问EMMC Flash,必须用过EMMC控制器,编写EMMC控制器驱动程序。PCI/PCIe设备上有配置空间(配置寄存器),用来表明自己"需要多大的地址空间"。主机上的程序访问PCI/PCIe设备,读出配置信息,分配地址空间:注意,分配的是PCI/PCIe地址空间。原创 2024-04-06 16:24:13 · 3223 阅读 · 1 评论 -
RK3568平台(电源篇)RK806长按power键强制关机
本文适用于RK3588+RK806(电源管理芯片)的方案,power(电源)键是直接控制RK806来控制RK3588的上下电,可以实现短按开机、长按强制断电关机的功能,可以通过控制RK806的寄存器来设置长按的时间长短。原创 2025-01-16 22:38:34 · 46 阅读 · 0 评论 -
RK3568平台(电源篇)RK809电源管理
I2C 地址 7 位从机地址:0x20。PMIC 有 3 种工作模式:1. PMIC normal 模式 系统正常运行时 PMIC 处于 normal 模式,此时 pmic_sleep 为低电平。2. PMIC sleep 模式 系统休眠时需要待机功耗尽量低,PMIC 会切到 sleep 模式减低自身功耗,这时候一般会降低某些 路的输出电压,或者直接关闭输出,这可以根据实际产品需求进行配置。原创 2024-05-02 19:09:46 · 5013 阅读 · 0 评论 -
RK3568平台(电源篇)电源域IO配置
在kernel之前需要修改电源域,主控电源域的IO电平要与对接外设芯片的IO电平匹配,还要注意软件的电压配置要跟硬件的电压一致,否则,最坏的情况可能会导致IO的损坏。其实就是管理 IO 输出的电平;假如硬件上 IO 电源域配置为 3.3V,则 IO 输出最大电平为 3.3V;同理 IO 电源域硬件配置为 1.8V,则 IO 输出最大电平是 1.8V;这样有利于 IO 电平的灵活配置;原创 2023-08-08 21:27:28 · 2375 阅读 · 0 评论 -
RK3568平台(Kbuild篇)vmlinux 编译过程
vmlinux 是 Linux 操作系统的内核映像文件,它包含了 Linux 内核的所有功能代码和必要的数据结构。这个文件通常是没有经过压缩和符号表去除的原始可执行文件。具体来说,vmlinux 文件是编译后的 Linux 内核的最终产物,通常是 ELF(可执行和可链接格式)格式的文件,包含了内核的机器码、符号信息、调试信息等,主要用于调试和开发阶段。最终在启动时,这个内核映像文件会被压缩成 vmlinuz(即 "v" 表示压缩)文件,后者是 Linux 系统启动时加载的实际文件。原创 2024-12-19 23:19:49 · 139 阅读 · 0 评论 -
RK3568平台(KBuild篇)KBuild编译体系
从Linux内核2.6开始,Linux内核的编译采用Kbuild系统,这和过去的编译系统有很大的不同,尤其对于Linux内核模块的编译。在新的系统下,Linux编译系统会两次扫描Linux的Makefile:首先编译系统会读取Linux内核顶层的Makefile,然后根据读到的内容第二次读取Kbuild的Makefile来编译Linux内核。kbuild,即 kernel build,用于编译 Linux 内核文件。原创 2024-12-19 00:19:07 · 60 阅读 · 0 评论 -
RK3568平台(ADC篇)ADC调试
模数转换器(analog to Digital Converter,简称ADC)是一种数据转换器,它通过将模拟信号编码为二进制代码,使能够与现实世界进行接口。原创 2023-08-08 14:42:09 · 1930 阅读 · 0 评论 -
RK3568平台(ADC篇)获取ADC按键
两个按键接在adc通道的SARADC_IN2上,两个按键按下的电压会不一样: io-channels --> 引用使用哪一路ADCio-channels 属性 为 选择的通道号io-channel-names 属性 表示 为申请的通道起一个别名。keyup-threshold-microvolt 属性 表示按键抬起,saradc通道1的电压(单位微伏)。poll-interval 表示获取ADC值的轮询间隔配置press-threshold-microvolt 属性 表示按键按下,saradc通道1的原创 2024-11-26 22:51:12 · 186 阅读 · 0 评论 -
RK3568平台 (ADC篇)温度传感器芯片SD5075
SD5075 是一款高准确度温度传感器芯片内含高精度测温 ADC,在-40C ~+100°C 范围内典型误差小于+0.5°C,在-55C~+125°C 范围内典型误差小于士1.0°C。通过两线 IC/SMBus接口可以很方便与其他设备建立通信。设置 A2~A0 的地址线,可支持8 片芯片并联总线连接本芯片可选 3 种工作模式: 连续测温模式单次测温模式,关断模式。可根据速度或功耗的需求灵活选择和配置。原创 2024-01-13 12:43:12 · 1333 阅读 · 0 评论 -
RK3568平台(文件系统篇)挂载SD卡文件系统
SD卡进行数据传输时有两种接口协议:SDIO (即对SD卡进行IO读写操作);SPI(通过SPIO总线协议与外围接口通信)。原创 2023-08-09 21:20:43 · 2111 阅读 · 0 评论 -
RK3568平台(文件系统篇)热插拔机制
热插拔是指在设备运行的情况下,能够安全地插入或拔出硬件设备,而无需关闭或重启系统。这意味着你可以在计算机或其他电子设备上插入或拔出硬件组件(比如USB设备,扩展卡,硬件驱动器等),而无需关机或中断正在进行的操作。比如鼠标,键盘,打印机,存储设备等。原创 2024-01-30 23:54:04 · 1705 阅读 · 0 评论 -
RK3568平台(文件系统篇)自定义文件系统分区
首先在已经下载好了的Android目录下新建文件夹istoragefs。在文件夹istoragefs下面放入edid.bin文件。通过以上命令制作分区istoragefs.img。创建分区命令解析:mke2fs 是一个用于创建 ext2/ext3/ext4 文件系统的工具,是 mkfs.ext2, mkfs.ext3, mkfs.ext4 的底层工具。它提供了丰富的选项和参数,可以对文件系统进行详细的配置和优化。下面是 mke2fs 的详细讲解,包括其主要功能、常用选项及使用示例。原创 2024-07-24 23:32:48 · 720 阅读 · 0 评论 -
RK3568平台(文件系统篇)文件系统分区设置
TYPE: GPT单个分区说明:例如:0x00002000@0x00004000(uboot_a) @符号之前的数值是分区大小,@符号之后的数值是分区的起始位置,括号里面的字符是分区的名字。所有数值的单位是 sector ,1 个 sector 为 512Bytes。0x00002000@0x00004000(uboot_a) uboot_a分区起始位置为 0x00004000 sectors 位置,大小为0x00002000。原创 2024-07-13 12:53:17 · 1123 阅读 · 0 评论 -
RK3568平台(文件系统篇)proc文件系统
(1)proc是虚拟文件系统,虚拟的意思就是proc文件系统里的文件不对应硬盘上任何文件,我们用去查看proc目录下的文件大小都是零;(2)proc文件系统是开放给上层了解内核运行状态的窗口,通过读取proc系统里的文件,可以知道内核中一些重要数据结构的数值,从而知道内核的运行情况,也可以方便调试内核和应用程序;原创 2024-11-02 23:11:11 · 105 阅读 · 0 评论 -
RK3568平台(文件系统篇)sys虚拟文件系统添加节点
EXT2是最早的Linux文件系统之一,它被广泛应用于Linux操作系统中。它支持大小为16TB的分区和最大文件大小为2TB。由于其简单性和高可靠性,在很长一段时间内仍被许多用户所选择。2001年,Linux社区发布了EXT3作为EXT2的升级版。它添加了日志功能以提高数据完整性和可靠性,并且支持快速备份和恢复功能。这使得它更加适合生产环境中使用。2008年发布的EXT4是EXT系列中最新版本的文件系统。原创 2023-10-28 16:36:46 · 306 阅读 · 0 评论 -
RK3568平台(文件系统篇)设备模型sysfs文件系统
sysfs 文件系统是 Linux 内核提供的一种虚拟文件系统,用于向用户空间提供内核中设备,驱动程序和其他内核对象的信息。它以一种层次结构的方式组织数据,并将这些数据表示为文件和目录,使得用户空间可以通过文件系统接口访问和操作内核对象的属性。sysfs 提供了一种统一的接口,用于浏览和管理内核中的设备、总线、驱动程序和其他内核对象。它在 /sys 目录下挂载,用户可以通过查看和修改 /sys 目录下的文件和目录来获取和配置内核对象的信息。原创 2024-02-07 18:13:49 · 491 阅读 · 0 评论 -
RK3568平台(文件系统篇)VFS虚拟文件系统
为什么 Linux 内核的文件系统类型那么多,都能挂载上呢?为什么系统里可以直接 mount 其他文件系统呢?为什么 Linux 的虚拟文件系统这么强大?这得益于它的数据结构设计得十分精妙。为支持各种本机文件系统,且在同时允许访问其他操作系统的文件,Linux内核在用户进程(或C标准库)和文件系统实现之间引入了一个抽象层。该抽象层称之为虚拟文件系统(Virtual File System),简称VFS。VFS的任务并不简单。一方面,它用来提供一种操作文件、目录及其他对象的统一方法。原创 2024-09-17 23:39:37 · 203 阅读 · 0 评论 -
RK3568平台(文件系统篇)Buildroot文件系统
Buildroot 是Linux平台上一个开源的嵌入式Linux系统自动构建框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。可通过Buildroot配置,编译出一个完整的可以直接烧写到机器上运行的Linux系统软件。获取buildroot官方源码:使用浏览器打开以下网址下载 buildroot 最新的源码。原创 2024-07-17 22:27:23 · 1657 阅读 · 0 评论 -
RK3568平台(文件系统篇)文件系统常用操作
点击U盘右键格式化,弹出以下对话框可以查看U盘文件系统类型:点击文件系统下拉框可以选择文件系统类型,点击开始可以格式化文件系统。原创 2025-01-11 01:17:27 · 58 阅读 · 0 评论 -
RK3568平台(文件系统篇)文件系统基本概念
文件系统是操作系统用于组织和存储文件以及对文件进行管理的一种机制。它提供了一种结构化的方式,使得计算机系统能够有效地存储、检索和管理文件数据。常规认知中,文件系统包括以下重要的概念:根目录: 文件系统的最顶层目录,包含了所有其他目录和文件的起始点。在根目录下可以有多个子目录和文件。目录: 文件系统中的目录类似于文件夹,用于组织和存储文件。目录可以包含其他子目录和文件。文件: 文件是存储数据的基本单位。文件可以包含文本、图像、音频、视频等各种类型的数据。原创 2025-01-09 23:40:03 · 28 阅读 · 0 评论 -
RK3568平台(PWM篇)背光调试常见问题
背光就是屏幕的从里往照射的光。LCD 主要由液晶面板、背光、驱动电路等组成,液晶面板不会主动发光,需要背光源才能显示,液晶面板的作用就是通过电压改变某像素光的透过率来显示的,当然此光要求是偏振光,所以LCD面板上下都有偏振片的。现在的背光源主要是LED的白色面光源,发光都是非常均匀的。在电子工业中,背光是一种照明的形式,常被用于LCD显示上。背光式和前光式不同之处在于背光是从侧边或是背后照射,而前光顾名思义则从前方照射。原创 2024-08-13 22:16:50 · 812 阅读 · 0 评论 -
RK3568平台(PWM篇)背光驱动代码分析
LCD背光驱动,导出给应用层控制背光的brightness、bl_power、actual_brightness等节点。背光驱动部分代码路径:kernel-5.10\drivers\video\backlight\pwm_bl.c。以bl_power为例:最终调用backlight_update_status()来调节背光。pwm_backlight_power_on 函数通过去拉背光的gpio enable背光。下面的两种方式都可以使用backlight节点来控制背光。原创 2024-08-15 23:26:19 · 416 阅读 · 0 评论 -
RK3568平台(PWM篇)红外遥控适配
PWM 有三种工作模式, reference mode, one-shot mode 和 continuousmode. 红外遥 控器就采用 reference mode,这种模式下 PWM 可以捕获输入高低电平的宽度,并产生中断,CPU 接收到中断后去相应的寄存器读取。按下遥控的时候,红外接收头会产生一系列的高低电平,PWM 就会产生相应的中断,CPU 读 取相应的寄存器就知道这些高低电平的时间,根据协议就可以解码出红外的用户码和键值码出来。下图是 NEC 红外编码协议的简单示意图,详细的协议附在最后。原创 2024-10-30 23:06:09 · 345 阅读 · 0 评论 -
RK3568平台(PWM篇)PWM Backlight控制背光亮度
以单片机为例,我们知道,单片机的IO口输出的是数字信号,IO口只能输出高电平和低电平。假设高电平为5V 低电平则为0V 那么我们要输出不同的模拟电压,就要用到PWM,通过改变IO口输出的方波的占空比从而获得使用数字信号模拟成的模拟电压信号。我们知道,电压是以一种连接1或断开0的重复脉冲序列被夹到模拟负载上去的(例如LED灯,直流电机等),连接即是直流供电输出,断开即是直流供电断开。通过对连接和断开时间的控制,理论上来讲,可以输出任意不大于最大电压值(即0~5V之间任意大小)的模拟电压。原创 2023-12-21 00:13:02 · 3251 阅读 · 0 评论 -
RK3568平台(PWM篇)PWM应用编程
PWM,即脉冲宽度调制(Pulse Width Modulation),是一种通过改变信号的脉冲宽度来 控制电路的输出信号的方法。在 PWM 中,周期不变,但是脉冲宽度随时间改变,从而控制电 路的输出。原创 2024-06-16 15:15:28 · 1766 阅读 · 0 评论 -
RK3568平台(PWM篇)PWM控制器注册流程
其中第二行的 struct pwm_chip 结构体是 PWM 子系统中对 PWM 控制器的一种抽象和封 装。根据 PWM 节点的 compatible 属性进行查找,可以找到瑞芯微的 PWM 驱动路径为内核目 录下的 drivers/pwm/pwm-rockchip.c。这个函数的主要作用是初始化一个新的 PWM 控制器,并在第 62 行调用 list_add 函数将其添 加到 PWM 子系统的管理中。原创 2024-12-04 00:29:08 · 89 阅读 · 0 评论 -
RK3568平台(PWM篇)PWM驱动
PWM 全称为 Pulse Width Modulation,翻译成中文为脉冲宽度调制,它是一种数字信号控 制模拟电路的技术,可以通过改变高/低电平的占空比来控制平均电压或功率,从而达到对模拟 量的控制目的。周期(T):指一个完整的高低电平循环所需要的时间,而频率为周期的倒数,指在 1 秒钟有多 少个周期,单位为 Hz,例如一个周期是 20ms,那么一秒钟就有 50 次 PWM 周期。原创 2024-08-21 23:46:22 · 1270 阅读 · 0 评论 -
RK3568平台(内存篇)DDR定频修改
如果需要DDR定频,则还需要注释掉其他多余的DDR频率,保留一个即可,例如注释掉opp-528000000、opp-1068000000、opp-1560000000,保留opp-2750000000则是定频最大频率。如果回退必须将 dmc_opp_table节点 的其他频率打开,否则系统无法选择到其他频率运行。ddr频点不对,先把ddr变频关掉,关闭后系统就不会一直重启了,以下是修改DDR频点的。rk3588修改定频节点在rk3588s.dtsi 的 dmc: dmc。原创 2024-12-08 14:13:03 · 211 阅读 · 0 评论 -
RK3568平台(内存篇)EMMC介绍
看了很多文章,上来就开始列概念,例如上面一段,接着讲原理,自己看的很含糊,不清楚自己到底看了个啥玩意儿,也不知道它长什么样、用在哪、主要干嘛用的,就讲怎么开发设计,很散没有目的。它工作在应对快速的命令传输的推挽模式。使得EMMC能够自动调整主机与从机的工作方式,没有位数限制,不需要处理其他繁杂的NAND Flash兼容性和管理问题,同时,控制器是其卡的应用和多媒体总线之间的联系介质,它能在应用程序总线和标准多媒体总线之前完成协议转换。该分区的数据,在 eMMC 上电后,可以通过很简单的协议就可以读取出来。原创 2024-09-07 11:59:10 · 347 阅读 · 0 评论 -
RK3568平台(内存篇)查看内存的基本命令
free命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。将被忽略。Mem 行(第二行)是内存的使用情况。Swap 行(第三行)是交换空间的使用情况。total 列显示系统总的可用物理内存和交换空间大小。used 列显示已经被使用的物理内存和交换空间。free 列显示还有多少物理内存和交换空间可用使用。shared 列显示被共享使用的物理内存大小。buff/cache 列显示被 buffer 和 cache 使用的物理内存大小。原创 2023-11-11 22:46:30 · 1570 阅读 · 0 评论 -
RK3568平台(内存篇)mmap原理
既然mmap是实现内存映射的接口,那么内存映射是什么呢?如下图所示:每个进程都有独立的进程地址空间,通过页表和MMU,可以将虚拟地址转换为物理地址,每个进程都有独立的页表数据,这就可以解释为什么两个不同进程相同的虚拟地址却对应着不同的物理地址。原创 2024-12-24 00:19:28 · 44 阅读 · 0 评论 -
RK3568平台(内存篇)vmalloc虚拟内存管理
1.vmalloc()函数为了把物理上不连续的页面转换为虚拟地址空间上连续的页,必须专门建立页表项。还有,通过vmalloc()获得的页必须一个一个的进行映射(因为它们物理上不是连续的),这就会导致比直接内存映射大得多的缓冲区刷新。因为这些原因,vmalloc()仅在绝对必要时才会使用——典型的就是为了获得大块内存时,例如,当模块被动态插入到内核中时,就把模块装载到由vmalloc()分配的内存上。原创 2024-12-29 20:26:24 · 29 阅读 · 0 评论 -
RK3568平台(内存篇)内存管理架构
物理内存被分割成相同大小的组,内核用页来表示这个组,页是内核管理内存的基本单位,尽管处理器的最小可寻址单位通常是字, 但是, 内存管理单元MMU通常以页为单位进行处理. 因此,从虚拟内存的上来看,页就是最小单位.页帧代表了系统内存的最小单位, 对内存中的每个页都会创建struct page的一个实例. 内核必须要保证page结构体足够的小,否则仅struct page就要占用大量的内存.体系结构不同,支持的页大小也不尽相同,还有些体系结构甚至支持几种不同的页大小。原创 2024-12-17 00:06:51 · 101 阅读 · 0 评论 -
RK3568平台(内存篇)Linux内存管理
最直观的,我们买手机,电脑,,都会标明内存是多大,例如途中的8G,16G,128G都指的内存大小。我们应该都听说过 RAM 存储器,它是一种半导体存储器件。RAM 是英文单词 Random 的缩写,即“随机”的意思。所以 RAM 存储器也称为“随机存储器”。那么 RAM 存储器和内存有什么关系呢?内存就是许多 RAM 存储器的集合,就是将许多 RAM 存储器集成在一起的电路板。RAM 存储器的优点是存取速度快、读写方便,所以内存的速度当然也就快了。原创 2024-09-02 17:01:11 · 519 阅读 · 0 评论 -
RK3568平台(内存篇)内存的基本概念
page cache,又称pcache,其中文名称为页高速缓冲存储器,简称页高缓。page cache的大小为一页,通常为4K。在读写文件时,它用于文件的逻辑内容,从而加快对上映像和数据的访问。原创 2023-11-06 23:54:46 · 615 阅读 · 0 评论
分享