最近有点空闲,总结下嵌入式工程师所需要掌握的技能,及成长方向。
主体知识:C语言、数据结构 + 算法、linux系统 + linux网络、数据库 、内核编译裁剪+驱动开发调试
一、常用数据结构:
平衡二叉树
链表
栈/队列
C方向数据结构
二、linux系统:
常用的系统命令及工具
linux系统的堆和栈、内存分配、进程 (IPC)+ 线程(同步)+文件锁(读写)、分片机制、五大组件、中断和系统调用 、同步和异步等等问题。
堆和栈、内存分配:
https://blog.csdn.net/alimingh/article/details/110931455
文件锁锁:
文件锁可以进行很多的分类,最常见的主要有读锁与写锁,前者也叫共享锁,后者也叫排斥锁,值得注意的是,多个读锁之间是不会相互干扰的,多个进程可以在同一时刻对同一个文件加读锁;但是,如果已经有一个进程对该文件加了写锁,那么其他进程则不能对该文件加读锁或者写锁,直到这个进程将写锁释放,因此可以总结为:对于同一个文件而言,它可以同时拥有多个读者,但是在某一时刻,他只能拥有一个写者。
常用在读写文件时互斥控制,进程间互斥跟同步。
三、linux 网络:
OSI 七层模型和 TCP/IP 四层体系结构,TCP 三次握手与四次挥手、常见的网络协议(网桥、ARP、IP、ICMP、TCP、UDP、DNS、DHCP)、TCP 粘包、流量控制 + 拥塞控制、数字签名原理、http + https,http 的状态码,https 的安全机制,网络安全
四、数据库:
数据库作为存储数据的地方,其不同的数据结构、与应用的场景不一样,采取不同的数据库,对于 mysql 基本操作、写 sql 的优化、表的设计、索引优化、如何更快的查询、底层数据结构的设计原理等等问题。
五、C 语言:
对于 C 语言中的数组、函数、指针、内存对其模式、大小端问题、野指针、内存泄露、static、register、define、typedef、struct、union 。
六、内核编译裁剪:
文件系统移植、配置内核、编译内核 熟悉内核配置的各个模块的功能,完成内核裁剪
七、驱动开发调试:
由进程调度、内存管理、虚拟文件系统、网络接口、进程通信、字符设备、块设备、网络设备等知识的掌握。
上面知识都能掌握,恭喜你就成为一个资深的嵌入式工程师了,对上面的知识能够归纳总结,那离砖家就不远了;
上面我们如果分开发方向也会有侧重点,我们可选择的工作方向,linux应用层工程师、linux系统工程师、linux驱动工程师等等。