1. 体会尝试芯片原厂的驱动开发与移植过程,完全应对 Linux 驱动工程师的工作内容和工作流程。
2. 学习驱动相关的 Debug 调试技巧,包括MIPI DSI、MIPI CSI、I2C、SPI、中断、USB、PCIE、动态 printk 等。
3. 高阶编程思想(分层架构、class、bus、device、platform,结合安卓 framework 层去理解)
4. Android 源码获取与编译环境搭建与编译,了解安卓/Linux 项目版本基线的管理,了解安卓固件的烧写。
5. 日志打印技巧,Uboot阶段日志、Kernel阶段日志、Framework阶段日志。
6. 开机电路 PMIC 芯片及相关电路详解
7. 深入理解MIPI LCD 屏幕的移植,开机 Logo 修改,了解 FrameBuffer 和 DRM的区别、Linux DRM框架分析、Linux Graphics学习,理解 RK display driver 的写法与构成,屏幕 Debug 手段。
8. 深入理解 TP 的移植,了解 TP 的构成,学习 Input 子系统、进阶多点触控协议,中断如何唤醒 CPU、中断的注册流程与中断唤醒系统,进阶 TP 性能优化。
9. 深入理解 MIPI Camera 驱动移植,Camera 硬件电路分析,MIPI CSI 基础,Camera 的调试手段,MIPI 摄像头驱动,RK Camera driver 写法与构成。
10. 深入理解 GPIO 和 Pinctrl 子系统, I2C子系统,I2C 传输优化,UART驱动(tty core、serial driver分析)、USB 驱动分析,headset 耳机检测,SD 卡驱动,PCIE 驱动、WIFI&蓝牙驱动、I2S 与Codec音频驱动,PCM与PDM,Linux ALSA,MMP多媒体。
11. 深入理解中断:中断子系统(GIC中断控制器),中断号映射,注册中断,中断处理流程,中断唤醒系统原理与过程。
12. 学习 RC522 NFC 驱动移植,并进行 SPI 传输优化
13. 学习 HC-SR501 红外传感器驱动从零撰写,并且结合双定时器加中断实现待机灭屏
14. 高阶知识:TF-A 与 TEE OS 讲解,SPL的设备树镜像,ATAGS 传参机制,嵌入式AI部署,RK Power,Low Power,Android OTA 升级, ARM Neno 加速。
项目二:车载中控屏项目
项目描述:开发了一套基于 rk3566 的车载中控屏系统,基于 Ubuntu20.04 + LVGL9.4 系统,支持 音乐播放器,视频播放器,相机拍照和录像,WiFi 联网,天气显示,雨刷控制,温湿度获取,AI 语音交互,OTA 远程升级,MQTT 远程控制和传感器数据上报等功能。
项目内容:Linux 应用开发
1. 基于瑞芯微 SDK 编译 Ubuntu20.04 系统,作为项目的底板系统,支持 MIPI 屏幕和 MIPI 摄像头等外设。
2. 从零移植最新的 LVGL 9.4 到 rk3566 Linux 系统,实现 UI 交互功能。
3. 实现企业级 SDK 架构,分为 app,component,platform,lvgl,bsp 五层,清晰项目架构,使得项目可以更好的维护和扩展功能。
4. 使用 CMake 自动化构建,支持 ARM64 平台,集成交叉编译工具链,方便项目后续管理和扩展。
5. 使用 SquareLine Studio 1.5.4 开发 LVGL UI 框架,再配合手写 LVGL9.4 的 APP UI,实现 框架性 + 效果 相结合的方式,最终移植到 RK3566 开发板,实现交互功能。
6. 基于 mplayer 和多线程开发,实现 mp3 音乐播放器和 mp4 视频播放器功能,管理多线程如 UI 线程和 mplayer 线程。
7. 使用 V4L2 应用开发逻辑,结合 Linux 多线程技术,开发相机 app,支持拍照和录像功能,支持相册查看照片、视频以及删除,涉及到 UI 线程,摄像头采集线程,视频回放线程,ffmpeg 子进程。
8. 移植 pwm 舵机,DHT11 温湿度传感器,空气质量检测,蜂鸣器,LED 灯等外设驱动。
9. 移植 AI 语音交互模块,通过 UART 和主控通信。上层创建独立的 uart thread 轮询串口数据,利用状态机解析串口数据,拿到数据后控制 pwm 舵机和操作 app,最终实现语音控制开发板的效果。
10. 移植 libcurl 和 openssl 库,开发天气显示 APP,获取未来一周的天气数据,并显示出 LVGL 折线图,天气数据来源于彩云。
11. 板载 RTL8822CE WIFI&BT 模块,基于 nmcli 开发 WIFI 连接功能,让开发板支持连接 WIFI 获取信息。
12. 基于 bluez 和 PluseAudio 开发蓝牙音箱功能,支持手机连接开发板,通过蓝牙播放音乐。
13. 使用 Linux coredump 机制,结合 gdb 查看程序崩溃调用栈,利用调用栈回溯问题现场,解决 camera 程序运行一段时间后崩溃的问题。
14. 针对 LVGL 非线程安全特性,在编程的架构设计中,保证只有 main 主线程 调用 lv_timer_handler 刷新 UI 界面,其他通过 pthread_create 创建的线程 或者 异步通知刷新 UI,保证屏幕绘制正常。
15. 利用 RK RGA 加速地图 app 的拖动效果,加速绘画 APP 绘画效果,优化绘画 APP 的跟手性。利用硬件加速点的绘制和图片的 放大、缩小、拖动操作,有效缓解 CPU 压力,实现更好的推动 UI 的跟手性
16. 基于 libcurl、cJSON、openssl 开发 OTA 远程升级功能,支持文件校验,自动备份,一键回滚功能,异步操作不阻塞 LVGL UI 刷新
17. 自实现 MQTT 协议,支持远程控制开发板灯光和后备箱等操作,支持通过 MQTT 上报车载传感器数据
18. 实现智能 AI 语音助手,后台接入阿里的通义千问平台,使用阿里 ASR 语音识别和 TTS 音频合成模型,实现优秀的语音对话功能。
19. 实现产品级 Log 框架,支持四种打印等级:LOG_INFO、LOG_DEBUG、LOG_WARN、LOG_ERROR,支持打印时间戳、文件名、函数名、行号等,支持不同的颜色显示
20. 移植轻量级 unity 测试框架,针对重要模块撰写单元测试,保证代码质量。
2、项目软件框架
3、技术栈一览