嵌入式底层软件开发学习系列之三开发与就业方向

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

本节的第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) 最好对相关算法有一定了解





  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 嵌入式软件开发是一个涉及到嵌入式系统的设计和实现的重要领域。嵌入式系统是指被嵌入在其它设备、产品或系统中的计算机系统,用于控制或实现特定功能。在嵌入式软件开发中,开发人员需要对硬件平台有深入的了解,掌握底层操作系统、驱动程序、中间件、应用程序等一系列技术,以保证嵌入式系统的稳定性、安全性和效率。 作为专业嵌入式软件开发人员,开发人员需要具备扎实的编程基础,熟悉各种嵌入式开发环境和开发工具。在软件开发过程中,需要充分理解客户需求,合理设计软件架构,考虑资源和性能的平衡,同时确保软件的可维护性和可扩展性,并在代码实现和测试阶段完成高质量的工作。 目前,嵌入式系统已经广泛应用于各行各业,如智能家居、汽车行业、医疗设备、工业控制等等。因此,嵌入式软件开发的市场需求十分巨大,为广大技术专家提供了广阔的就业发展空间。在这个领域,不断学习和自我提升是非常重要的,只有不断跟进行业发展,充分掌握新技术,才能在竞争中脱颖而出。 ### 回答2: 嵌入式软件开发是一种针对嵌入式系统制定软件的技术,这种系统通常用于控制设备、机器或其他实时应用。嵌入式软件开发需要对硬件的理解,涉及多种编程语言和开发工具。专业的嵌入式软件开发人员需要具备良好的计算机基础知识和编程技能,能够理解硬件功能和系统交互,同时具有与设备制造商和不同功能团队沟通交流的能力。 在进行嵌入式软件开发时,需要考虑设备体积、电池寿命、系统安全等多种因素。随着移动端设备的发展,嵌入式软件开发越来越重要。嵌入式软件开发覆盖的领域越来越广泛,包括智能家居、智能出行、工业自动化、医疗器械等。 在CSDN上,有许多嵌入式软件开发领域的专家,他们可以为初学者和有经验的开发人员提供丰富的经验和知识。CSDN还提供许多开发资源,包括开发工具、开发项目案例和开发论坛。这些资源可以为嵌入式软件开发人员提供更好的学习和交流平台。 总之,嵌入式软件开发是一项非常重要的技术,需要开发人员具备丰富的知识和经验。CSDN上的专家和资源可以为开发人员提供支持和帮助,使他们能够更好地进行嵌入式软件开发

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值