【基础知识】嵌入式底层软件开发学习系列之三开发与就业方向

162 0

本节首先按开发的层次划分大类, 对于每一层将分析其主要工作内容。

本节的第2部分将从产品的领域来介绍嵌入式的热门应用领域。


1. 开发层次

(1) 体系结构层(CPU层)

  对于普通的嵌入式产品开发公司, 该层的主要工作目的是选择哪种CPU(Arm, mips, 等) 或 Soc来满足自己的产品需求(成本, 性能,和维护成本). 当芯片一旦选定,可以从芯片公司获得BSP 包,因而只需少量工作人员从事整合与调试工作即可。  其招聘要求一般是了解某种cpu体系结构, 如 "熟悉ARM体系结构;熟悉高通芯片".

  对于芯片公司也分为分为两类,一类是如Intel, ARM. 要负责新的芯片产品和功能开发, 因此配套的软件工作包含新产品的验证, 实现这些新功能对应的体系结构代码(如Linux kernel/Arch/ 目录下的代码).一个简单的例子就是增加cpu64位支持.  另一种较小规模芯片公司则通过购买Arm IP或采用开源cpu来定制自己的嵌入式处理器,当有自己的定义的特性或功能时,也许要修改OS体系结构相关代码; 但工作量与前一类比较起来较少。这类公司往往更加注重基础能力,如:

a. Familiarity with one or more CPU instruction sets. 需要熟悉一种或多种CPU指令集 

b.Detailed understanding of computer architecture. 需要较深入了解计算机体系结构

c. Familiarity with ARM architectures. 熟悉ARM体系结构

有些甚至要求软件工程师了解 Verilog and RTL verification flows, 这样才能更好的和硬件design工程师协同工作。



(2) 板级

  光有了芯片,系统也是无法运行的。需要通过各种电子元器件芯片连接起来。 为此就涉及到电路板的设计与制作等, 但某些规模较小的公司可能需要既懂电路制作又懂软件开发的工程师(但这样的岗位往往软件部分复杂度较低, 笔者认为更适合懂一些软件开发的电子工程师),较大一些的公司会有专门的部分负责电路板设计 。  因此笔者认为作为嵌入式软件工程师的基本要求是能读懂原理图, 能使用常见的示波器就可以了, 因为软件工程师的精力应放在复杂的软件系统上,

   对于软件人员而言,工作主要包含如下几部分:

  (1) Boot Loader的实现或定制, UBOOT是使用较广的一种boot loader

  (2) 协助硬件工程师调试板级硬件, 如通过测试程序测试板上个模块是否能正常工作。 如测试手机各个模块(camera, flash, wifi)等模块是否能正常工作(需要设计测试程序与测试用例)。

        当出现问题时需要具备定位是哪个模块有问题, 是由于电路板的问题, 还是芯片或驱动本身存在问题; 并与相关其他开发人员沟通。


(3) 驱动层

其主要任务是编写与调试驱动程序, 驱动层包含四个部分: 

a. 驱动模型: 对于不同操作系统有不同的驱动框架结构,为此对于驱动的编写者这是必须熟悉的。 对操作系统理解得越深刻,学习与掌握这一部分就越容易。某些简单的嵌入式产品可能连操作系统都没使用,这时驱动模型的设计就完全依赖与开发者了;好的设计有助于软件重用与维护。


b. 硬件spec与datasheet, 这对于开发驱动是最为重要的,他是编写代码与调试的依据。 驱动代码本身往往由芯片公司给出示例实现或直接提供代码, 对一些做应用的公司而言只需要移植这些代码到不同操作系统和平台就可以了, 发现问题可以从芯片公司获得帮助, 因此对规范的掌握要求相对较低。 对于芯片公司的驱动开发者,则需完全理解规范(或直接参与spec指定)。


c.  驱动的验证: 包含验证软件平台的搭建, 测试程序的实现部署等工作。


另外, 对于某些嵌入式产品,光有驱动还是不够的, 还需要算法, 如扫地机器人。 本节第二部分将分析相关领域知识。

          

(4) 内核层

目前国内这方面相对落后(缺乏直接内核开发岗位),但相关工作还是有一些的,主要工作在:

a. 针对自身嵌入式特点: 优化内核参数, 或优化部分代码 (如linux bootup 提速, IO 优化等)

b.  某些公司拥有自己的(或深度定制的) 嵌入式系统, 需要维护与升级它们。

c. 参与开源操作系统内核的维护

下面是一个高级内核职位的要求:

深入理解Linux内核,精通内存、调度、网络、文件系统、调试调测等模块之一
有内核社区补丁提交经验


(5) 硬件抽象层

不同厂商的硬件,有时接口各异, 硬件抽象层为系统层提供了访问硬件的统一接口。 为此不同设备(芯片)厂商针对自身硬件需要设计硬件抽象层到驱动层的接口(某些已经标准化的硬件,厂商不需要实现). 


(6) 系统(框架)层

a.  开发Linux操作系统发行版, Linux 发行版本很多, 国内也有一些发行版本, 如中标麒麟。

b. 为增加自身应用,需要突破原有框架的限制或直接增强原有框架; Andorid的定制中会有一些这样的岗位。


(7) 应用层: 该层不在本系列文章讨论范围之内


下面将从嵌入式领域的角度来分析

2.嵌入式领域 

(1) 网络与通讯类

网卡, 路由器, 光纤通讯, wifi  4G 设备等. 从事该领域需要比较深入了解计算机网络和通讯相关知识。

 下面是一个WIFI芯片公司的招聘要求:

a. 熟悉WIFI相关协议标准和性能指标(802.11a/b/g/n/ac无线网络协议等)  (需要掌握相关协议)

b. 具有WIFI(hostapd /wpa_supplicant)开发经验             (需要掌握上层框架软件的开发与调试方法)

c.熟悉以下技术中的一种或多种:DHCP, HTTP, UDP, ETHERNET, VLAN, TCP/IP  (熟悉常用的网络协议)


(2) 智能传感器与人机交互设备

鼠标,键盘;触摸屏,陀螺仪等等。 复杂的一些设备需要数字信号处理相关知识;  


(3) 音视频与图像处理类

一类为基本设备:如声卡,显卡(GPU), 编解码器等;另一类 产品, 如安防监控类;

 需要掌握多媒体相关知识(如多媒体编解码, 计算机2D/3D图形学), 了解openCV, OpenGL框架等。 


(4) 存储设备类

Flash, 机械硬盘,固态硬盘, 磁盘阵列等。 对于存储设备, 缓存的设计与使用十分重要, 其次就是文件系统, 备份与容灾相关知识。


(5) 总线与控制器类

各种总线控制器, 如USB Host controller(master), 比较简单的有I2C, SPI等总线。 


通过上面分析我们发现, 无论哪一领域学习基本规律是:

(1) 相关协议 (2) 目前已有的框架或软件  (3) 最好对相关算法有一定了解





0

上一篇: 嵌入式软件工程师杂谈之一 ----- BSP工程师 下一篇: 智能车的转弯部分_10个极品智能车方案合辑,夏日避暑进阶两不误

教程资料来源于网络,如有侵权,请及时联系平台进行删除

其他

课程目录
搜索
基础知识
乔布斯《遗失的访谈》全文:尘封16年的预见
stm32使用HAL库快速编写智能寻迹避障小车(附代码)
计算机科学技术发展史的缩影
嵌入式软件工程师杂谈之一 ----- BSP工程师
嵌入式底层软件开发学习系列之三开发与就业方向
智能车的转弯部分_10个极品智能车方案合辑,夏日避暑进阶两不误
到底什么是嵌入式?
乔布斯-遗失的访谈中英双文版-尘封十余年的伟大遇见!
转:乔布斯《遗失的访谈》全文:尘封16年的预见
正在崛起的高薪岗位—嵌入式开发工程师
无人驾驶硬件平台
【无人驾驶系列十】无人驾驶硬件平台设计
无人驾驶之硬件平台详解
VR的理想与现实
从iPad Pro的ToF摄像头说起,ToF前途未卜还是一片光明?
全球及中国机器视觉产业十四五投资动态及未来竞争态势研究报告2021-2027年
全球及中国增强现实产业战略布局及运营前景决策分析报告2021-2027年
搜索算法案例分析
前辈们的话--大疆技术总监的金玉良言
激光雷达与毫米波雷达对比, 
传感器小结
一线工程师告诉你嵌入式真实现状与发展前景
优劣几何?三角法和TOF激光雷达大解析!
10个激光、超声波测距方案带你玩转测距传感器
SLAM刚刚开始的未来之“工程细节”(张哲的ICRA 2017 的一些整理
101 从一个错误开始讲场效应管的应用
2017嵌入式软件行业现状及概述
人工智能概述
电子信息工程专业/单片机毕设题目推荐
SLAM刚刚开始的未来之“工程细节”
为什么别人可以这么牛
第879期机器学习日报(2017-02-13)
推箱子自动寻路的实现(未完)
人工智能技术与现代应用
二 树莓派3+ROS-kinetic+mbed-二轮差分模型
自动驾驶中激光雷达和高精度地图的关系
平台采用小米1代扫地机源码,stm32f103真实项目程序源码,代码注释清晰、代码规范好、每个函数必有输入输出范围参数解释。
无人驾驶硬件平台
激光雷达—无人驾驶汽车的眼睛
最适合男生的十大高薪工科类专业!
(三)LiDAR的测距原理(师弟师妹)简单科普
VIO_FUSION
3D视觉传感技术:时间飞行法 (ToF) 技术分析
设计一个AOA蓝牙精准室内定位系统
嵌入式软件岗位就业指导建议!!!
激光雷达类型分类,知名激光雷达公司介绍,三角测距激光雷达与TOF激光雷达原理
《人工智能狂潮》读后感——什么是人工智能?(一)
STM32(10):超声波模块的使用
计算机控制技术课程解释与问题答疑
相位式激光测距法中相位产生原理
【 學習心得 笔记 1】大疆技术总监:如何用六年成为一个全能的机器人工程师
机器人工程师学习计划(新工科自学方案)------杨硕
机器人工程师之路——从大一到研究生,YY硕经验谈
激光雷达类型分类,知名激光雷达公司介绍,三角测距激光雷达与TOF激光雷达原理
单线激光雷达在自动驾驶中的原理?
卷王指南,大学计算机专业,面临分专业,计科,软工,大数据,物联网,网络工程,该选什么?
一家非典型机器人公司的27年成长史丨独家探访 iRobot
STM32项目设计:基于stm32f4的智能门锁(附项目视频全套教程、源码资料)
大疆技术总监:如何用六年成为一个全能的机器人工程师(转载)
大疆工程师《机器人工程师学习计划》
如何成为一名很酷的机器人工程师?
ROS机器人开发概述,需要掌握的知识
SLAM中的EKF,UKF,PF原理简介 [转高博]
物联网定位技术超全解析!定位正在从室外走向室内
【概述】基于SLAM的机器人的自主定位导航
服务机器人是如何实现自主定位导航的?
收藏 | 基于深度学习SLAM的机器人的自主定位导航解析
物联网定位技术超全解析!定位正在从室外走向室内~
移动机器人技术(6)-- 机器人控制策略
ROS的优势与不足(除了ROS 机器人自主定位导航还能怎么做?)
SLAM技术大解析:它是如何帮助机器人实现智能行走的?
美国服务机器人技术路线图
服务型移动机器人如何实现室内路径全覆盖清扫给你一个清爽干净的家,tianbot_mini机器人上手ROS/SLAM/Navigation究竟有多简单???
实现机器人自主定位导航必解决的三大问题
室内定位技术方案---Wifi、RFID、bluetooth、Zigbee
常用室内定位技术总结
让机器人告别乱碰乱撞,激光导航让扫地机“睁开双眼”
机器人
SLAM技术是什么?它是如何帮助机器人实现智能行走?
服务机器人其最大的问题:定位导航
基于优化方法的机器人同步定位与地图创建(SLAM)后端(Back-end)设计技术收集
基于SLAM的机器人的自主定位导航
物联网定位技术超全解析
从理论到实践,机器人SLAM技术详解
360扫地机原理大揭秘,竟还有无人驾驶技术?——浅析家用机器人SLAM方案
SLAM导航技术赋能机器人智能行走
浅析服务机器人自主定位导航技术(三)
SLAM≠机器人自主定位导航
除了ROS, 机器人定位导航还有其他方案吗?
浅析服务机器人自主定位导航技术(一)
服务机器人常用的定位导航技术及优缺点分析
移动机器人定位导航方式的演进
服务机器人技术 —— 自主定位导航
机器人学习--移动机器人定位导航性能评估规范
自主移动机器人常用的导航定位技术及原理
扫地机器人如何聪明地干活? | iRobot解读智慧家庭的正确打开方式
寿命长性价比高的室内扫地机器人SLAM导航方案
扫地机器人能有多硬核?好家伙自动驾驶、激光扫描、NLP这些硬科技全上了,科沃斯:技术创新才能打破行业内卷...
扫地机器人有这些路径规划方法
智能扫地机器人软硬件开发笔记(1)-规格需求书
智能扫地机器人陀螺仪导航
【Robot】扫地机器人实现方案
自研扫地机器人激光雷达,Camsense有何胜算?
自动集尘系统会成为扫地机器人标配吗
干货|自动驾驶 vs 机器人定位技术
扫地机器人会否抛弃激光雷达这位原配?
智能扫地机器人陀螺仪导航模块
革了激光的命?双目视觉能否推动扫地机器人再次迭代
扫地机器人系统,主要划分为哪几个模块?
什么是激光导航扫地机器人?
扫地机器人是如何实现路径规划的 揭秘扫地机的定位导航原理
扫地机器人有这些路径规划方法
扫地机器人导航原理解读
机器视觉在扫地机器人领域的应用
深度解读扫地机器人的导航原理
扫地机器人智能化升级之路 智能决策成为关键
扫地机器人的回充方法实现
扫地机器人自动回冲工作原理
智能扫地机器人 陀螺仪导航系统
扫地机器人的路径规划方法
【室内定位】常用的机器人定位导航技术及优缺点
服务机器人常用的定位导航技术及优缺点分析