基础知识
编程语言
-
C
- 掌握基本语法
- 掌握标准库的使用
-
C++
- 掌握基本语法
- 掌握基于 C++ 的面向对象开发方法
-
Python
- 掌握基本语法
- 掌握与 Linux 系统的交互
-
Shell(bash)
- 掌握基本语法
- 掌握与 Linux 命令的结合使用
Linux 文件系统
-
启动流程
-
sysvinit
- 服务的管理与裁剪
-
systemd
- 服务的管理与裁剪
-
-
了解 qt4、qt5 的移植
-
了解 yocto
- 构建文件系统
常规 Linux 应用开发
- 文件操作
- 内存操作
- socket 通信
- 多线程
- 进程间通信
- select IO
- sqlite 数据库使用
嵌入式 Linux 外设
- LED 操作
- KEY 操作
- GPIO 操作
- LCD 显示与触控
- ADC 读取
- I2C 通信
- SPI 通信
- CAN 通信
- UART 通信
- ……
高级知识
uboot 与内核
-
uboot
- 启动流程
- 环境变量配置
-
Linux 内核
- 启动流程
- 内存管理
- 进程调度
- IO调度
- 驱动模型
- 设备树配置
框架
-
Qt4、Qt5
- 信号槽机制
- 事件循环
- 常用控件的使用方法
-
音视频处理
-
V4L2
-
GStreamer
- pipeline的控制
- 自定义插件的实现
-
live555
-
ffmpeg
-
-
TI 框架
-
IPC、SysLink
- 多核初始化流程
- 各通信组件的特点和使用场合
-
SYSBIOS
- 多任务编程
-
CMEM
-
EDMA
-
-
其他
- OpenCL
协议
-
TCP/IP
- 协议栈理解
-
HTTP
- 了解基于 cgi 的 web 应用的实现
- 了解 RESTful API 设计
-
MQTT
-
FTP
库
- OpenCV
- OpenGL
- H264 编解码
- RTSP 流媒体协议
- FFT 等信号处理库
了解 SoC 平台
-
TI
- DaVinci 系列
- Sitara 系列
- C674x
- C66x
-
Xilinx
- Spartan6
- 7 系列
- MPSoc
-
NXP
- IMX6
- IMX8
软件工程
常规软件开发流程
- 定义问题(problem definition)
- 需求分析(requirements development)
- 规划构建(construction planning)
- 软件架构(software architecture)
- 详细设计(detailed design)
- 编码与调试(coding and debugging)
- 单元测试(unit testing)
- 集成测试(integration testing)
- 集成(integration)
- 系统测试(system testing)
- 保障维护(correcting maintenance)
嵌入式 Linux 应用开发流程
-
了解硬件功能设计
-
熟悉驱动接口
-
细化、梳理需求
-
确立概要设计
-
规划开发里程碑
-
确认开发环境、运行环境
-
分配工作任务
-
协同开发
-
测试发布里程碑
-
测试发现硬件、驱动问题?
- 是。联合硬件、驱动排查
- 否。进入下一步
-
是否最终里程碑版本?
- 是。进入下一步
- 否。回到“协同开发”
-
是否需要与客户联调?
- 是。进行联合调试
- 否。进入下一步
-
整理运行环境
-
整理做卡工具
-
在最终环境整体测试
-
测试发现 bug?
- 是。修复 bug
- 否。进入下一步。
-
发布源码、程序包
-
维护
嵌入式 Linux 应用开发级别
-
D 级:硬件功能展示 demo 开发
- 做出一个即用型的工具小程序,运行程序即可展示硬件模块的基本功能。可作为较低要求的硬件功能测试程序。比如 4G 模块的通信功能 demo 程序。
-
C 级:核心功能 demo 开发
- 这一级别适用于比较复杂的硬件架构、软件框架功能。比如基于 OMAPL138 双核架构的 syslink 通信功能,demo 演示其基本使用。客户可基于 demo 扩展自己的应用程序。
-
B 级:产品级核心功能开发
- 这一级别着眼于产品的核心功能,涉及业务逻辑的设计实现。由于是产品级功能而非 demo,需求梳理、架构设计必须充分考虑,为后续交付后客户的产品开发打下坚实基础。比如,在良好设计的基础上,把 90E36、AD7606、syslink 的数据采集、分析处理、传输统一组织起来,并留下易于扩展开发的接口。并做好充分的测试验证。
-
A 级:产品级功能开发
- 完整功能的开发以及测试验证。在 B 级的基础上,完善网络传输、数据存储、故障恢复、长时稳定运行、升级维护等配套的功能的开发。软件满足在实际应用环境运行工作的要求。
-
S 级:解决方案开发(公司内部)
- 在 A 级的基础上扩展,补充更完善的配套设施,如单元测试、功能模块封装、程序流程拆解优化等。以达到快速修改就可以满足同样应用场景、功能需求有细微差别的不同产品级软件开发。
例程开发流程
- 了解硬件接口
- 了解处理器架构与硬件框图
- 了解、安装软件开发环境
- 进行例程编码开发
- 测试例程
- 整理说明文档并发布
样机开发流程
- 硬件设计
- 结构设计
- 软件设计
- 样机生产
- 样机调试
- 样机测试
- 样机验收
- 样机开发结束决策
工具使用
vi、vim
Git
- 熟悉 Git 基本操作
- 了解 Git 实现原理
- 了解 GitFlow 流程
gcc、make、Makefile
Ubuntu、tmux、Samba
Qt Creator
- Qt 工具链的配置以及远程调试
VirtualBox、VMware
SVN、RDM、GitLab
Putty、XShell、MobaXterm、SecureCRT
everything、wox
xmind
visio
Linux 常用命令
- find、gerp
- sed、awk
- tar、zip、unzip
- ssh、scp
- lsmod、insmod、rmmod
- mount、umount、df、fdisk
- md5sum、diff、vimdiff
补充了解
-
gdb
-
autotools
-
硬件仪器
- 万用表
- 数字电源
- 示波器
- 信号发生器
技术书籍
必读
-
《C 程序设计语言》
- 语法基础
-
《C++ Primer》
- 语法基础
-
《深入理解计算机系统》
- 程序开发基础概念
-
《UNIX 环境高级编程》
- 基于 UNIX(Linux)的接口编程
-
《代码大全》
- 软件开发方法论
推荐
-
《流畅的 Python》
- Python 开发高级技巧
-
《UNIX 网络编程》
- 基于 UNIX(Linux)接口的 TCP、UDP 通信编程
-
《计算机程序的构造和解释》
- 高级的、抽象的程序设计思维方法
-
《Linux 内核设计与实现》
- 精炼的 Linux 内核介绍
-
《重构》
- 代码优化
-
《软件测试的艺术》
- 测试思维修炼
-
《设计模式》
- 高层次软件设计套路
-
《算法导论》
- 各类算法介绍与算法评估、设计方法
-
《编码》
- 计算机系统通俗介绍