嵌入式软件开发进阶
这几年来,伴随着朋友们和网友们的指导、交流,逐渐地学习、提升和拓展。决定抽时间去分享一些心得和资源给初学者,少走弯路,和大家交流,也作为自己的总结和记录,共同成长。
首先,知识爆炸,迭代更新快,即便是不停地学习或许都是不够的。而最需要学习的是:点-线-面,整合,从上到下的开发思路;分解需求、分析问题、解决问题的思路;核心设计思想;基本原理、基础理论、基本方法。这些才是长期有用的利器。此外呢,工欲善其事,必先利其器,要学会正确地寻找优质的书籍、资源,学会运用好的工具。比如:习惯常用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系统篇
九、数据结构与算法篇
十、开源项目移植篇
十一、架构设计与设计思想篇
十二、多媒体音视频篇
十三、程序优化与性能优化篇
十四、工具篇
十五、算法移植及优化篇
十六 、嵌入式硬件及调试篇