- 博客(32)
- 收藏
- 关注
原创 XV6操作系统:proc机制学习笔记
调度器scheduler()一直在寻找RUNNABLE的进程,通过上下文切换内存地址和寄存器的存储值(指的是struct context),现在子进程运行在某个CPU内,状态state变为RUNNING。进入内核态的第一件事,就是把子进程此刻用户态的所有寄存器(如 a0 存放的文件路径指针,a1 存放的打开模式等),一股脑地保存到 p->trapframe(陷入帧)中。单核CPU是不需要考虑多核的冲突问题的,实际上要是另外的CPU闲着就有很大概率会来插手,可能会导致proc槽位浪费亦或者程序冲突。
2026-04-09 16:13:09
395
原创 XV6操作系统:trap机制学习笔记
摘要:异常控制流(ECF)是操作系统实现I/O、进程和虚拟内存的核心机制,分为中断、陷阱、故障和终止四类。其中,陷阱(trap)是用户态到内核态的特权切换通道,系统调用(syscall)通过陷阱实现。RISC-V通过stvec、sepc等寄存器处理陷阱,trampoline机制确保用户/内核态切换时内存安全。ECF不仅是系统调用的基础,也是实现并发和错误处理的关键机制,理解ECF对操作系统开发和应用程序编写至关重要。
2026-04-07 17:29:14
424
原创 XV6操作系统:虚拟内存学习笔记
本文阐述了计算机内存管理的关键机制:1)单片机采用CPU直连内存的简单架构;2)具备MMU的SoC能运行Linux,通过虚拟地址转换实现内存隔离;3)三级页表结构优化地址转换效率;4)TLB作为MMU缓存加速地址转换;5)虚拟内存利用磁盘空间扩展内存容量;6)缺页异常的分类和处理机制;7)MMU为每个进程提供独立的虚拟地址空间。这些机制共同构成了现代操作系统的内存管理基础,实现了内存保护、隔离和高效利用。
2026-04-04 12:12:20
409
原创 正点原子RK3588 buildroot构建Linux系统全流程实战
本篇操作耗费时间大概在3个小时,其中配置buildroot和编译对半开,你也不想编译到一半中断吧🥴,虽然这个过程是断点续传的。提前准备好至少8g内存的ubuntu虚拟机,不然编译QT5类似组件Linux会爆内存卡死,我使用的是WSL2,形式不重要。首先去正点原子官方资料站下载资料,正点原子Linux开发板 — 正点原子资料下载中心 1.0.0 文档因为我做的是Linux音视频开发,所以下载第一个就行:下载完成之后解压缩,发现里面还有两个tgz文件我是使用的WSL2(Ubuntu)进行解压:解压
2026-03-24 19:42:46
952
原创 rkdevtool导出镜像失败 解决办法
具体怎么导出镜像,以我使用的Debian系统镜像为例,你需要在官方提供的文件中:\开发板光盘A盘-基础资料\09、系统镜像\02、Debian系统镜像 找到。根据parameter.txt中的内容是告诉rkdevtool,同个文件夹中不同镜像对应的硬盘扇区地址及占有大小,说白了就是怎么烧录。2.设置了扇区时,导出报错失败。扇区含义如下,注意userdata只有一个起始扇区,大小是不定的,根据具体硬盘大小自动撑满。1.没有设置扇区时,导出镜像成功,但是大小为0说明根本没有导出成功。
2026-03-23 14:26:50
809
1
原创 TCP包 wireshark抓包分析-RK3588
文章摘要:本文通过Wireshark抓包分析,详细解析了网络数据包在OSI七层模型中的传输过程。从物理层的比特流捕获开始,依次分析了数据链路层的MAC地址定位、网络层的IP路由选择、传输层的TCP端口控制和数据可靠性保障,以及表示层/会话层的TLS加密通信。特别针对TCP心跳机制和RTSP视频流传输进行了深入探讨,包括帧率差异分析、I/P帧识别方法(通过H.264 NAL单元类型判断)和关键帧优化建议(调整GOP参数)。通过实际案例展示了如何利用Wireshark进行网络协议分析和性能调优。
2026-03-20 14:22:51
604
1
原创 GStreamer RKNN 插件自制
项目地址:https://github.com/PT233/gst-rknn-filter在 Rockchip NPU(RK3588、RK3576、RK3568 等)上运行视觉模型(YOLO、RetinaFace、PPOCR 等)的 GStreamer 插件。支持实时视频推理,可与 、、 等源组合使用。只支持model文件夹下罗列出来的模型,模型全部出自于https://github.com/airockchip/rknn_model_zoo 下转出的rknn模型。[免责申明]该插件属于自己自娱自乐,大部
2026-03-13 15:29:21
619
原创 RK3588 IMX415摄像头画面偏绿偏红
先说结论,V4L2摄像头画面发绿,那是因为没有在另外一个中端启动3A算法服务。但是即使开启3A服务,你所收获的图像却是偏红的,原因是正点原子的3A算法没有做好。可以看见画面虽然明显有点红,但是还是好多了,除非自己去改/etc/iqfiles/下面的.json文件,但是改它难度太大,不如直接换一个开发板。关于video节点不清晰的,去查看官方资料《
2026-03-09 16:15:06
162
原创 海康相机MV-CS050-10UC帧率测试程序
文章摘要:本文介绍了在正点原子RK3588开发板(arm64架构,Debian系统)上测试海康相机USB2.0连接性能的方法。由于开发板缺乏USB3.0接口,需降低帧率或分辨率来适应带宽限制。文中提供了一个C语言测试程序,通过MVSSDK依次测试原生、1080p和720p三种分辨率各30秒的稳定帧率,并输出汇总结果。程序使用BayerRG8格式,自动获取相机最大分辨率,当帧率低于8fps时potplayer可能无法显示帧率信息。测试结果显示USB2.0连接下不同分辨率的实际性能表现。
2026-03-04 14:14:32
341
原创 MediaMTX在RK3588上的配置
本文介绍了在Linux ARM64系统上部署MediaMTX RTSP服务器的完整流程。首先下载最新版本并解压,然后配置为系统服务实现开机自启。通过创建systemd服务文件,设置服务类型、执行路径、工作目录等参数,使用systemctl命令管理服务状态(启动/停止/重启)。同时提供了查看运行日志、验证自启状态的方法,确保RTSP推流服务持续运行。整个过程包含详细的命令行操作,适用于音视频项目中的流媒体服务器部署需求。
2026-03-03 10:09:38
172
原创 Gstreamer安装plugins流程:rgaconvert
摘要:本文介绍了在RK3588开发板上通过VSCode远程SSH连接安装GStreamer插件rgaconvert的步骤。首先将GitHub仓库克隆到开发板,使用meson和ninja工具编译(需提前安装相关环境),通过ninja -C build install命令安装插件,并设置系统变量GST_PLUGIN_PATH。最后用gst-inspect-1.0 rgaconvert验证安装成功,该插件即可在GStreamer管道中使用。整个过程需在开发板本地完成编译安装。
2026-02-24 21:30:15
321
原创 工业相机内部如何处理图像
摘要:本文以MV-CS050-10UC工业相机为例,解析图像数据在相机内部的硬件处理流程。500万像素的SONY IMX264传感器采集Bayer格式图像后,数据在FPGA中经历四步处理:1)去马赛克通过邻域像素计算补全RGB三通道;2)白平衡使用硬件乘法器调整色彩增益;3)降噪采用空间域滤波算法消除噪声;4)颜色转换将RGB转为YUV格式以节省带宽。处理后的数据经USB3.0控制器打包传输至开发板。整个过程展示了工业相机如何通过硬件加速实现实时图像处理。
2026-02-10 15:25:16
385
原创 一键配置RK3588网络与SSH远程连接
本文介绍了在RK3588开发板上配置网络和SSH的一键解决方案。首先需要在Windows端开启网络共享(ICS),将Wi-Fi共享给开发板网口。然后通过组合命令完成开发板的四步配置:1)设置静态IP 192.168.137.20;2)配置网关指向Windows主机;3)设置DNS解析;4)启用SSH Root登录并重启服务。配置完成后可测试网络连通性和SSH连接。如需永久生效,需修改网络配置文件。最后还提供了配置SSH公钥认证实现免密登录的方法,通过生成密钥对并使用ssh-copy-id命令完成设置。该方案
2026-02-08 11:10:07
945
1
原创 Gstreamer playbin dot文件分析
本文详细介绍了在Windows11+WSL2环境下生成和分析GStreamer dot文件的全过程。首先说明了如何通过添加调试信息生成dot文件,并给出了具体的命令行操作步骤。随后对生成的dot文件进行了深入分析,重点解读了组件状态、Pad激活模式、Caps类型等关键信息。文章详细追踪了视频流从网络获取到最终渲染的完整处理流程,包括HTTP源组件、格式识别、解复用、硬件解码、音视频同步、GPU渲染等环节,特别分析了NVIDIA硬件解码器和OpenGL渲染链的工作机制。通过分析dot文件中的连接关系和状态信息
2026-02-06 10:46:49
726
原创 GStreamer pipeline概念解释
GStreamer是一个多媒体处理框架,其核心概念包括:pipeline(由element组成的数据处理流水线)、element(基础功能模块)、pad(模块间的数据接口)和caps(接口间的数据格式协商)。bin用于封装复杂逻辑,ghostpad使其对外表现如同普通element。系统通过bus进行线程间通信,events处理内部命令,queries获取状态信息。时间管理依赖全局时钟,状态切换包含NULL、READY、PAUSED和PLAYING四种模式,分别对应不同资源准备阶段。这些机制共同支持多媒体流
2026-02-05 12:40:28
620
原创 嵌入式Linux学习笔记一:C API接口
摘要:Linux系统C接口是用户程序与内核交互的关键桥梁,主要包括系统调用(如文件操作、进程控制)、标准C库(如I/O处理、字符串操作)、POSIX接口(如线程、信号处理)等。这些分层接口提供了硬件操作、网络通信、动态加载等功能,具有标准化程度高、可移植性强等特点。开发者可通过man命令查询不同章节(系统调用Section2、库函数Section3)的详细说明。掌握这些接口是Linux系统编程的基础。
2026-01-29 11:02:12
895
原创 Mini2440 qemu调试记录
本文详细介绍了在WSL环境下配置QEMU模拟器进行Mini2440开发板仿真的完整过程。首先通过安装依赖、编译QEMU源代码并解决编译错误来搭建环境,然后创建NAND闪存镜像并启动QEMU调试服务器。文章重点分析了调试过程中遇到的中断向量表映射问题,指出由于QEMU直接将代码加载到0x30000000地址导致0x00000000中断向量表缺失的问题,最终采用MMU虚拟内存映射方案解决。整个过程展示了嵌入式系统开发中硬件模拟、调试技巧和问题排查的典型方法,特别是对中断处理机制和内存映射问题的深入分析具有实践参
2026-01-21 15:14:55
999
原创 Mini2440移植uC/OS-II笔记(三).elf文件解读
预处理 (Pre-processing)main.c被处理,头文件展开。汇编 (Compilation): 编译器将其变成汇编,然后变成.o此时全是碎片,地址未定。链接 (Linking)ld将main.oos_core.ostartup.o等聚在一起。根据link.ld脚本,决定大家住哪(0x30000000解决所有的符号引用。生成 Program Headers,规划内存布局。此刻,mini2440_rtos.elf 诞生了。加载 (Loading)
2025-12-25 21:20:09
801
原创 Mini2440 Keil jlink烧录问题(一)Cannot Load Flash Programming Algorithnm
显示Cannot Load Flash Programming Algorithnm!之后显示Error: Flash Download failed -ARM920T。
2025-12-23 22:31:00
577
原创 Mini2440 启动流程分析
S3C2440 SOC芯片内部集成了一块容量极小的RAM,大小只有4KB。在官方数据手册中,这块 SRAM 被称为。它的作用正如其名——它是系统启动的一块垫脚石。因为 4KB 太小,跑不了操作系统,甚至跑不下完整的 u-boot,但它足够用来完成最基本的硬件初始化和代码搬运。排座位。通过链接脚本(.lds),start.s被安排在了最前面,main.c紧随其后。假如最终生成的.binstart.s的机器码(关看门狗、设栈、跳转)。main.c的机器码(配置寄存器、循环)。
2025-12-16 15:59:10
1060
原创 Mini2440移植uC/OS-II笔记(二)数据结构分析+
本文深入分析了uC/OS-II实时操作系统的核心数据结构体系。系统采用静态内存池管理方式,通过Tbl数组提供固定存储空间,利用FreeList和List分别管理空闲和活动任务资源。关键的位图索引(Grp/Tbl)实现了O(1)时间复杂度的任务调度,而等待列表则复用位图逻辑处理资源阻塞情况。文章详细阐述了各组件在任务生命周期中的协作机制,并举例说明了从任务创建到资源等待的完整数据流转过程。uC/OS-II的设计体现了嵌入式系统"静态规划、逻辑复用"的哲学,其紧凑高效的数据结构体系是保证实时
2025-12-11 15:24:03
622
原创 Mini2440移植uC/OS-II笔记(一)数据结构分析
uC/OS-II通过位图算法实现O(1)时间复杂度的任务调度,核心由5个表组成:静态查找表OSMapTbl和OSUnMapTbl用于加速位运算;动态状态表OSRdyGrp和OSRdyTbl记录就绪任务;OSTCBPrioTbl存储任务控制块指针。系统通过将优先级拆分为组和位索引来更新就绪表,并利用查找表快速定位最高优先级任务。例如优先级11的任务就绪时,会设置相应位标志,调度时通过两次查表即可确定最高优先级,最后通过索引获取任务控制块完成切换。这种设计确保了高效的任务调度。
2025-12-11 14:35:26
1092
原创 Mini2440 vscode wsl openocd调试细节
本文详细介绍了在WSL+VSCode环境下搭建Mini2440裸机调试环境的配置方法和实用技巧。关键点包括:必须使用gdb-multiarch和.elf文件,需手动初始化SDRAM控制器,并提供完整的launch.json配置示例。调试技巧涵盖寄存器操作、变量修改、程序暂停、汇编调试和高级监视功能,解决了嵌入式开发中的常见问题。这套方案结合了Linux命令行和Windows GUI优势,虽然初期配置复杂,但能提供强大的底层调试能力,帮助开发者高效进行裸机开发。
2025-12-06 17:16:03
797
原创 Mini2440 调试环境搭建(wsl + vscode + openOCD)
本文介绍了基于WSL2+OpenOCD搭建Mini2440开发板(S3C2440芯片)的调试环境。硬件连接需注意J-Link供电问题,必须外接电源。配置步骤包括:准备OpenOCD配置文件(mini2440.cfg等)、安装J-Link驱动、启动OpenOCD服务器。在VSCode中配置launch.json调试文件,通过GDB连接OpenOCD服务器进行调试。调试过程中需要两次F5操作,第一次初始化CPU环境,第二次进入main函数断点。该方法虽然比Keil复杂,但适用于小众芯片开发,具有更强的灵活性。
2025-12-06 01:08:26
1402
原创 Mini2440 流水灯实验(wsl+docker)
本文详细介绍了在Mini2440开发板上实现LED裸机开发的完整流程。项目使用Docker封装交叉编译环境,包含启动代码(startup.S)完成硬件初始化、主程序(main.c)控制LED流水灯效果。关键技术点包括:1) 通过启动代码完成看门狗关闭、时钟设置、内存控制器初始化等硬件配置;2) 实现代码从SRAM/NOR到SDRAM的搬运;3) 使用Makefile自动化构建系统;4) 通过dnw工具实现程序烧录。项目为后续RTOS开发奠定了基础,并提供了完整的开发环境配置、代码编写和烧录步骤说明。
2025-11-28 01:00:06
628
原创 .data .text .bss段都是什么意思
本文通过旅行团队的比喻解析了ELF可执行文件的五大核心段:.text(代码指令)、.data(已初始化变量)、.bss(未初始化变量)、.rodata(常量)和.comment(编译信息)。重点探讨了动态链接相关的段,如.interp(动态链接器路径)、.plt/.got(函数跳转表)等,解释了它们如何实现延迟绑定和共享库调用。文章还介绍了.init/.fini等程序初始化段的作用,并通过WSL环境下的编译验证展示了实际ELF文件结构。最后指出ELF文件通过精密的段划分实现了指令与数据分离、空间优化和动态链
2025-11-25 15:55:18
744
原创 Mini2440 开发环境搭建(WSL2 + VScode)
适用环境: Windows + WSL2 (Ubuntu)核心目标: 在 Windows 上通过串口控制板子,在 WSL 里编译代码并通过 USB 烧写。
2025-11-24 21:51:41
1027
原创 OMEN 笔记本 BIOS 更新失败排查指南:没U盘的情况,解决 “磁盘空间不足”
电脑重启后,保持电源适配器插入,再次运行 HP System BIOS Update Utility 程序。由于 EFI 分区中旧的备份已被清除,程序现在应有足够空间来暂存新文件,并会正常提示您重启以完成 BIOS 更新。
2025-11-15 18:15:10
1413
原创 STM32学习笔记#3-面向对象编程思维
对于LED所用的GPIO口,PIN引脚等等进行宏定义,注意宏定义需要放在程序头部,否则会报错。然后将之前程序中的代码用宏定义取代,更改接口或是编程出错,都能很快修改,具备基础的项目思维。假如需要控制100个LED呢,不可能把每一组宏定义都写出来,非常容易出错也不容易管理,这简直是宏定义地狱。不仅要定义结构体,后续的函数调用中也要加上函数指针指向结构体,不清楚这部分的可以看一下b站郝斌C语言【郝斌】-C语言自学入门教程(182集全 | 最新高清修复版)_哔哩哔哩_bilibili。
2025-02-04 15:59:55
607
原创 STM32学习笔记#2-Keil调试
解决方案应包括以下步骤:1. 在Keil中设置断点,单步执行代码。2. 使用外设查看器检查GPIO寄存器的状态。3. 观察led_on和led_off执行时的寄存器、电信号波形变化。4. 对比预期与实际值,发现GPIOC的设置错误。5. 检查代码中的GPIO_WriteBit参数,确认是否正确。同时,可能需要解释如何利用观察窗口或内存窗口直接查看变量和寄存器的值,以及如何利用逻辑分析仪查看引脚电平变化波形,从而辅助确认问题所在。
2025-02-04 01:05:17
1989
原创 STM32学习笔记#1-回调函数
既然你正在学习STM32标准库(Standard Peripheral Library),我会用标准库的架构设计三个回调函数的例子,由浅入深,帮助你理解回调函数在底层开发中的应用逻辑。通过这些例子,你可以看到回调函数在标准库中如何实现硬件事件与用户逻辑的解耦。:如果回调函数可能被多个中断同时触发,需考虑数据保护的机制(如关闭中断或使用互斥锁)。中断发生时自动调用回调函数,实现**硬件事件与业务逻辑解耦**。:串口接收数据时触发中断,通过回调函数处理接收到的数据。串口接收中断触发时,通过回调函数。
2025-02-03 18:17:37
2093
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅