嵌入式软件开发进阶

这几年来,伴随着朋友们和网友们的指导、交流,逐渐地学习、提升和拓展。决定抽时间去分享一些心得和资源给初学者,少走弯路,和大家交流,也作为自己的总结和记录,共同成长。

首先,知识爆炸,迭代更新快,即便是不停地学习或许都是不够的。而最需要学习的是:点-线-面,整合,从上到下的开发思路;分解需求、分析问题、解决问题的思路;核心设计思想;基本原理、基础理论、基本方法。这些才是长期有用的利器。此外呢,工欲善其事,必先利其器,要学会正确地寻找优质的书籍、资源,学会运用好的工具。比如:习惯常用help,man,?,查阅官网,查阅官方原版资源,习惯并爱上英文。多阅读开源的优秀代码工程,多体会其设计思想及架构框架,结合各种debug工具链,开源工具,IDE工具来调试分析,梳理打通来龙去脉,深入去尝试理解底层原理,并时常去做总结。

接下来,从大方向和几个维度上分享下,嵌入式软件开发进阶中的几个板块。后续会整理和分享一些好的资源作为参考,并会保持不断补充。下面的每块都会成为一个分类,不断地细分。

一、用户态

1、文件及I/O操作:流式、底层文件,目录操作,I/O操作

2、I/O模型:阻塞I/O、非阻塞I/O、I/O复用、事件(信号)驱动I/O、异步I/O

3、时间管理

4、进程及通信

5、线程及通信

6、同步/互斥, 信号

7、GUI等交互

8、数据库管理

9、网络编程

二、内核态

1、内存管理子系统

2、中断管理子系统

3、线程调度,进程管理子系统

4、内核网络子系统

5、虚拟文件系统

6、设备驱动架构模型

7、内核设计思想

8、内核中各个模块系统:alsa,v4l2,gpio....

三、用户态-内核态

下面的Linux kernel map最能表达了,此外从另一个维度,也有多种用户态与内核态的通信方式。

四、调试篇

1、Debug工具链:objdump,nm,readelf,gdb,addr2line,trace32、反汇编.....

2、开源工具:如tcpdump...

3、IDE工具

4、kernel panic、Oops、段错误...

五、语言篇

六、编译链接篇

七、网络篇

八、Android系统篇

九、数据结构与算法篇

十、开源项目移植篇

十一、架构设计与设计思想篇

十二、多媒体音视频篇

十三、程序优化与性能优化篇

十四、工具篇

十五、算法移植及优化篇

十六 、嵌入式硬件及调试篇