欢迎光临
我们一直在努力

Linux应用开发必备技能

============================================================
一、工程开发基础
============================================================

[ ] 01. CMake 与工程构建
    学习内容:
    – 多文件工程组织:.h、.cpp、模块划分
    – CMakeLists.txt、子目录和目标管理
    – target_include_directories()、target_link_libraries()
    – 静态库 .a、动态库 .so
    – GCC/G++ 编译和链接过程
    – 头文件搜索路径、库文件搜索路径
    – Makefile 基础与第三方库集成

    验收标准:
    – 从零创建一个多模块工程
    – 链接第三方库
    – 能独立排查编译错误和链接错误

[ ] 02. Git 版本管理
    学习内容:
    – git init、add、commit、log、diff
    – branch、merge、rebase 的基本使用
    – .gitignore、冲突处理、回退与恢复
    – 合理的提交记录与分支管理

    验收标准:
    – 能管理项目分支
    – 能解决一次合并冲突
    – 能恢复误修改的文件

[ ] 03. Linux 命令行与系统排错
    学习内容:
    – 文件与文本处理:find、grep、sed、awk
    – 进程管理:ps、top、kill
    – 磁盘与内存:df、du、free
    – 日志:dmesg、journalctl(取决于系统)
    – 程序检查:file、readelf、ldd
    – 权限、环境变量、软链接、信号

    验收标准:
    – 能排查程序无法启动、动态库缺失、权限错误
    – 能检查进程和系统资源占用

============================================================
二、C/C++ 工程质量与系统编程
============================================================

[ ] 04. RAII 与资源生命周期管理
    学习内容:
    – 栈、堆、指针和对象生命周期
    – 构造、析构、拷贝和移动语义
    – std::unique_ptr、std::shared_ptr
    – 文件描述符、锁、内存和媒体资源的自动释放
    – 异常安全与资源所有权

    验收标准:
    – 封装一个文件描述符类
    – 保证正常返回或异常退出时资源都能正确释放

[ ] 05. 调试与内存错误检测
    学习内容:
    – GDB:断点、单步、调用栈、变量检查、线程调试
    – AddressSanitizer:越界、释放后使用等问题
    – UndefinedBehaviorSanitizer:未定义行为
    – Valgrind:适用环境下的内存错误检查
    – core dump、崩溃堆栈和日志定位

    验收标准:
    – 复现、定位并修复段错误
    – 定位内存错误并解释原因

[ ] 06. Linux 系统调用与设备访问
    学习内容:
    – open、read、write、close
    – 文件描述符、fcntl、ioctl、mmap
    – 信号处理、错误码与系统调用返回值
    – 串口、设备节点、/proc、/sys
    – 应用程序、设备驱动与内核之间的关系

    验收标准:
    – 编写串口收发程序
    – 理解应用层通过设备节点访问硬件的基本过程

[ ] 07. 进程管理与进程间通信(IPC)
    学习内容:
    – fork、exec、waitpid
    – 管道、FIFO、共享内存、消息队列
    – Unix Domain Socket
    – 僵尸进程、孤儿进程
    – 多进程与多线程的适用场景

    验收标准:
    – 编写两个独立进程之间的通信程序
    – 正确处理进程退出和通信异常

============================================================
三、并发、网络与工程运行
============================================================

[ ] 08. 多线程与并发编程
    学习内容:
    – pthread_create、pthread_join
    – 互斥锁、条件变量、读写锁、信号量
    – 生产者—消费者模型
    – 线程安全、竞态条件、死锁
    – 有界队列、线程池、线程退出和资源回收

    验收标准:
    – 实现线程安全的有界任务队列
    – 支持多个生产者和消费者
    – 能正确停止线程并释放资源

[ ] 09. TCP/UDP 网络编程
    学习内容:
    – Socket 的创建、连接、收发和关闭
    – TCP 字节流、部分读写、应用层消息边界
    – UDP 数据报与丢包处理
    – select、poll、epoll
    – 非阻塞 I/O、超时、心跳、断线重连
    – 缓冲区、背压与异常处理

    验收标准:
    – 独立实现多客户端 TCP 服务端
    – 处理客户端异常断开
    – 处理粘包、拆包和连接恢复

[ ] 10. 日志与配置管理
    学习内容:
    – 日志级别、时间戳、线程信息
    – 配置文件解析与参数校验
    – 错误码、异常信息与日志轮转
    – 避免日志阻塞业务线程
    – 配置、业务逻辑与硬编码参数分离

    验收标准:
    – 通过配置文件设置端口、线程数、超时时间
    – 输出便于定位问题的日志

[ ] 11. 性能分析与稳定性测试
    学习内容:
    – perf、strace、pidstat、vmstat
    – CPU、内存、线程数、文件描述符监控
    – 吞吐量、延迟、队列长度
    – 长时间运行、异常输入、故障注入
    – 性能瓶颈分析与优化前后对比

    验收标准:
    – 能设计测试并记录数据
    – 能解释一个真实的性能瓶颈或稳定性问题

============================================================
四、嵌入式 Linux 平台与部署
============================================================

[ ] 12. ARM 交叉编译与依赖管理
    学习内容:
    – 交叉编译工具链与目标架构
    – sysroot、头文件和库文件
    – ABI、动态链接器与运行时依赖
    – CMake Toolchain File
    – 静态库、动态库和第三方依赖的目标平台适配

    验收标准:
    – 将包含第三方库的 C++ 工程交叉编译到目标板
    – 排查架构、链接和 ABI 问题

[ ] 13. 开发板部署与进程运行管理
    学习内容:
    – SSH、scp、rsync
    – 环境变量与动态库路径
    – systemd 或 BusyBox init
    – 开机启动、进程守护和日志保存
    – 程序升级、配置管理和版本回退

    验收标准:
    – 应用能在目标板上按要求自动启动
    – 能记录日志,并按设计进行故障恢复

============================================================
五、RK3568/RK3588 音视频方向
============================================================

[ ] 14. FFmpeg 与音视频基础
    学习内容:
    – 容器、编码格式、压缩码流
    – AVFormatContext、AVPacket、AVFrame
    – 解封装、解码、像素格式
    – PTS、DTS、时间基
    – 音视频数据的缓冲与资源管理

    验收标准:
    – 使用 FFmpeg API 编写文件解封装与解码程序

[ ] 15. RTSP 网络视频接入
    学习内容:
    – RTSP 会话与 RTP 媒体传输基础
    – 使用 FFmpeg 拉流
    – TCP/UDP 传输方式
    – 超时、断流检测和自动重连
    – 多路流管理、有界队列与帧率统计

    验收标准:
    – 实现至少两路 RTSP 拉流
    – 支持断线恢复
    – 记录延迟和帧率

[ ] 16. Rockchip MPP 硬件编解码
    学习内容:
    – MPP API 与官方 Demo
    – 硬件解码输入输出流程
    – 解码帧、stride、像素格式
    – 缓冲区生命周期与内存拷贝
    – 软件解码和硬件解码的性能比较

    验收标准:
    – 在 RK 开发板上运行硬件解码程序
    – 输出可信的性能测试数据

[ ] 17. Rockchip RGA 图像处理加速
    学习内容:
    – 图像缩放、裁剪、旋转
    – RGB、NV12 等像素格式转换
    – 输入输出缓冲区与对齐
    – CPU 图像处理与 RGA 对比
    – 与 MPP 解码输出的衔接

    验收标准:
    – 完成图像处理 Demo
    – 验证输出正确性
    – 测量处理耗时和 CPU 占用

============================================================
六、建议学习顺序(10~12 周参考计划)
============================================================

第 1~2 周:工程基础
– CMake、Git、Linux 命令行
– RAII、GDB、ASan
– 产出:规范的多文件 C++ 工程,具备调试和内存排错能力

第 3~4 周:系统编程
– 系统调用、进程管理、IPC、多线程与同步
– 产出:线程安全任务队列和进程间通信程序

第 5~6 周:网络与工程运行
– TCP/UDP、epoll、日志配置、性能分析、交叉编译
– 产出:多客户端网络服务端,能够部署到 ARM 板上

第 7~8 周:FFmpeg 与 RTSP
– 文件解码、多路网络拉流、重连和统计
– 产出:可以独立运行的多路视频流管理程序

第 9~12 周:MPP、RGA 与综合项目
– 硬件解码、图像加速、性能测试和稳定性验证
– 产出:可展示、可测试的 RK 音视频项目

说明:这是参考计划。如果某个阶段没有达到验收标准,先补齐再进入下一个阶段。

============================================================
七、最终综合项目建议
============================================================

项目名称(暂定):基于 RK3568/RK3588 的多路 RTSP 视频接入与硬件加速处理系统

建议模块:
– StreamManager:管理多路视频流与连接状态
– RtspClient:使用 FFmpeg API 接入 RTSP
– PacketQueue:管理压缩数据、有界缓冲与背压
– Decoder:抽象解码接口,支持软件与 MPP 后端
– ImageProcessor:CPU/RGA 图像处理
– MetricsCollector:统计 FPS、延迟、CPU、内存与重连耗时
– Logger:输出连接、解码与异常处理日志

项目验收:
[ ] 至少接入 2 路 RTSP 视频流
[ ] 支持软件解码与 MPP 硬件解码对比
[ ] 支持 RGA 图像处理与 CPU 对照实现
[ ] 单路流故障不会导致其他流退出
[ ] 服务端恢复后能够自动重连
[ ] 队列有固定容量上限
[ ] 记录 FPS、CPU、内存、队列长度
[ ] 记录重连耗时和丢帧数量
[ ] 明确区分处理耗时与端到端延迟
[ ] 连续运行至少 2 小时并记录异常与资源变化
[ ] 提供构建、部署、测试说明和性能报告

性能测试建议:
– 软件解码与硬件解码使用相同输入、分辨率、帧率、运行时间和输出条件
– 记录软件版本、驱动版本与环境配置
– 不预先承诺固定路数或性能数字,以实测数据为准
– 解释性能瓶颈,以及优化前后数据变化

============================================================
八、官方资料入口
============================================================

FFmpeg 文档:
https://ffmpeg.org/documentation.html

FFmpeg 协议文档:
https://www.ffmpeg.org/ffmpeg-protocols.html

Rockchip MPP GitHub:
https://github.com/rockchip-linux/mpp

MPP 中文开发指南:
https://github.com/rockchip-linux/mpp/blob/develop/doc/Rockchip_Developer_Guide_MPP_CN.md

Rockchip RGA GitHub:
https://github.com/airockchip/librga

RGA 文档目录:
https://github.com/airockchip/librga/tree/main/docs

============================================================
学习原则
============================================================

1. 前 13 项构成通用嵌入式 Linux 应用开发能力,后 4 项是 RK 音视频方向。
2. 不要只背技术名词;每项尽量完成一个可运行的小项目。
3. 遇到错误时,练习复现、定位、修复并记录原因。
4. 项目性能必须通过测试数据证明,不要凭感觉声称优化有效。
5. 优先把通用基础练扎实,再集成 FFmpeg、RTSP、MPP、RGA。
 

赞(0)
未经允许不得转载:171主机测评 » Linux应用开发必备技能
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址