如何成为一个优秀的嵌入式BSP工程师?(嵌入式bsp开发)

文章下方附学习资源,自助领取

如何成为一个优秀的嵌入式BSP工程师?(嵌入式bsp开发)

摘要BSP,全称Board Support Package,汉语意思即板级支持包BSP工程师,顾名思义就是负责板级支持包的开发、调试和维护工作。那么什么是板级支持包呢?什么是BSP工程师呢?如何才能成为一个优秀的的嵌入式BSP?

一、嵌入式系统

要明白什么是嵌入式软件工程师,我们先从嵌入式系统(嵌入式设备)说起。维基百科上对嵌入式系统的定义如下:

嵌入式系统(Embedded System),是一种嵌入机械或电气系统内部、具有专一功能和实时计算性能的计算机系统。

通俗的讲,嵌入式系统就是一种具有专一功能的计算机系统。我们身边就有好多嵌入式设备,常见的比如智能手机,数码相机等消费类的电子设备,再比如最近几年兴起的诸如智能音箱、智能电视、扫地机器人智能家居设备。当然还包括汽车防抱死系统、各种医疗成像系统等设备。总之各行各业我们都有可能接触到它,尤其随着智能化时代的到来,很多非智能的设备也将逐步由嵌入式设备所替代,典型的如智能门锁。

二、嵌入式工程师

随着嵌入式设备应用越来越广泛,相关人才的需求也越来越大。那么相关的人才都有哪些呢?其中最主要的就是嵌入式工程师。嵌入式工程师分为两种:嵌入式硬件工程师和嵌入式软件工程师

  • 嵌入式硬件工程师主要职责是负责设计嵌入式系统的硬件原理图,使用相应的工具画出PCB图,后期配合嵌入式软件工程师调试系统。
  • 嵌入式软件工程师从系统软件上又可以分为两种:BSP工程师和嵌入式应用软件工程师嵌入式应用软件工程师主要是负责编写基于嵌入式系统的应用软件。类似于基于windows上的QQ, word。由于我本人是做BSP的,因此这里我们着重讨论BSP工程师。

如何成为一个优秀的嵌入式BSP工程师?(嵌入式bsp开发)

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。

点击这里找小助理0元领取:嵌入式物联网学习资料(头条)

如何成为一个优秀的嵌入式BSP工程师?(嵌入式bsp开发)如何成为一个优秀的嵌入式BSP工程师?(嵌入式bsp开发)

嵌入式工程师分类

三、BSP工程师

BSP,全称Board Support Package,汉语意思即板级支持包BSP工程师,顾名思义就是负责板级支持包的开发、调试和维护工作。那么什么是板级支持包呢?前面我们讲过,嵌入式硬件工程师负责设计硬件,画出PCB图,工厂会根据PCB图生产出对应的电路板。一个嵌入式系统光有电路板是不够的,还要有对应的软件支持,软件开发的前提是首先使板子正常稳定的工作,然后再在其上编写对应的应用软件以实现其特有的功能。其中使板子正常稳定的工作的代码就属于板级支持包

那么BSP工程师的具体工作有哪些呢

我们首先从嵌入式设备谈起,前面我们谈到了很多的嵌入式设备,从系统角度来讲这些设备有些是跑操作系统的,有些没有跑。对于不跑操作系统的设备来讲,其功能相对简单一点,使用的主控芯片一般也比较简单,比如风靡一时的51系列单片机、stm系列的单片机。对于这些简单系统来讲,它对软件开发人员要求相对比较低,当然也就没有我前面所说的分工那么详细,有时候甚至从画板、点亮、开发都是由一个人来完成的。对于跑操作系统来讲的设备,就不一样了。一般来讲,跑操作系统的设备其软件开发分三个阶段:

1. 点亮板子

第一批板子出厂时是不包含任何软件的。BSP工程师需要结合硬件原理图修改从芯片厂商拿到的参考代码,调试板子,使板子上的操作系统能够正常稳定工作,从而提供一个稳定的开发调试环境,这个过程叫做点亮板子,行话叫做Bringup。这属于BSP工程师最具有价值含量的工作之一,因为它对BSP工程师所掌握的知识的广度和深度都有一定要求。其中会涉及到计算机原理、操作系统,处理器架构等,还包括硬件方面的一些知识。综合起来其最核心的工作就是对内核的移植、裁剪。

2. 使能板子上所有设备

上个阶段中,板子的CPU和基本的器件已经能正常工作,这个阶段中将使能所有的外设,并为后面要开发的应用程序提供对应的软件控制接口。这个过程的实质是对应的操作系统下驱动开发的过程,需要掌握硬件工作的原理,操作系统的相关知识。

3. 为板子开发应用程序

如前文所述,嵌入式系统是一个具有专一功能的系统,其上所有的硬件,软件都应该为这一功能服务。第二个阶段结束的时候,板子上所有的设备都已经可以正常使用了。这个阶段的任务就是开发应用程序来实现某种特定的功能,应用程序中会使用第二阶段提供的软件接口控制板子上的设备来完成这一功能。

四、BSP工程师应具备的能力

上述前两个阶段属于BSP开发的内容,第三个阶段属于嵌入式应用软件开发的过程。综上所述,BSP工程师主要应该具备的能力主要有:

  • 掌握计算机原理方面的知识;
  • 掌握操作系统的相关知识,深入研究某种操作系统,目前来讲,研究linux操作系统应该是大部分人的选择;
  • 基本的linux(开发环境)操作
  • 精湛的C语言功底和一定的C /汇编的知识。
  • 掌握一定的硬件和电路原理方面的知识;
  • 熟悉常见的接口协议,如I2C, SPI, UART, USB等。

当然作为一个软件开发人员也必须掌握一些通用的软件,比如:

  • 代码管理软件,常见的如git等;
  • 代码阅读软件,这个就因个人喜好而不同了,比如:opengrok,source insight,vim下ctags/cscope插件组合等。

简单来讲,作为一名嵌入式BSP工程师,既要和懂硬件工作原理,还要能编写对应的软件使之正常工作。其学习和开发难度就不言而喻了。那么,究竟学习哪些知识,怎么学习才能成为一名合格的嵌入式BSP工程师呢?

简单来讲,作为一名嵌入式BSP工程师,既要和懂硬件工作原理,还要能编写对应的软件使之正常工作。其学习和开发难度就不言而喻了。那么,究竟学习哪些知识,怎么学习才能成为一名合格的嵌入式BSP工程师呢?

五、专业背景

我们首先从专业背景谈起。经过我的了解,从事嵌入式BSP开发的人员主要来源于计算机专业和电子信息专业。这两个专业是和嵌入式BSP最相关的专业了。当然也有一些同事是从其他专业转过来的(比如我,熟悉我的朋友知道我大学学的是物理专业,这相对来讲是比较偏的一个专业了)。

所以,如果你是计算机或者电子信息专业的,你的基础已经足够好了。因为结合上篇文章我们知道,对于BSP工程师来讲,主要的工作就是使硬件及其上的操作系统稳定的工作,所以理解硬件原理、计算机原理和操作系统是最基本的要求,而这两个专业都会学习到像模拟电路,数字电路之类的硬件原理基础,计算机原理和一门高级语言也是这两个专业的必修课,这些已经基本构成了BSP工程师的必需的知识面。当然,不是这两个专业的同学也不用灰心丧气,毕竟大学里学的课程大家能掌握到说明程度都懂的,所以即便没有经历过系统的学习,只要兴趣足够,再加上一定的自制力,完全自学也不是不可能的。

六、推荐书籍

言归正传,我们结合上篇文章里BSP工程师必备的知识来介绍一下如何学习。

1. 计算机原理

前面我们谈到过,跑操作系统的嵌入式系统也属于典型的计算机系统,既然我们要把操作系统移植到计算机上,那么了解计算机运行原理的细节对于开发来讲是必不可少的。在处理一些疑难杂症时,这些知识尤其能凸显其作用来。这里推荐一本计算机原理的经典书籍——《Computer Systems: A Programmer’s Perspective》(中文译作:《深入理解计算机系统》),本书从这本书从程序员的视角系统的讲述了计算机程序的存储,运行的基本原理,并结合实例分析了如何优化计算机程序,第二部分结合计算机原理引出了操作系统中一些重要的概念,并对这些概念从程序运行的角度做了详细的阐述和诠释。

从2010年至今,个人已经反复研读了几遍,每次重读依然感觉有很多收获。因此,在本博客中,我专门新建了一个主题,从一个“程序员编写出来的C文件到编译生成可执行文件,最终到程序运行的过程”的角度来总结我对本书部分知识的理解和收获。本书从出版至今已经推出了三版,我自己收藏了第二版英文版和最新版第三版高清扫描的中文电子书(文件大小501M)。

2. 基本的Linux操作

多数嵌入式开发都是在Linux操作环境进行开发的,因为在其上存在很多优秀的开源开发工具,可以方便快速的搭建编译环境,有很方便的debug工具可供使用。很多同学可能压根就没有接触过Linux系统,开机之后一片茫然,甚至连文件都找不知道。这并不是问题,毕竟它的设计思想和我们熟知的Windows完全不一样,对于程序员来讲,当你适应了Linux系统之后,你可能甚至都不愿意再用回Windows。关于学习Linux基础操作的书,我推荐《鸟哥的linux私房菜》,里面由浅入深的介绍了Linux系统,不仅涉及Linux的基础操作,还包括如何重装Linux系统,Linux的文件管理,shell脚本等知识,其实这本书主要是面向Linux系统管理员的,但是它前面13章的内容对于入门Linux系统来讲是一个绝佳之选。

3. C语言基础

前面我们说过BSP工程师主要是和底层硬件、系统打交道,所以C语言是最主要的编程语言。学习C语言,我强烈推荐“C语言之父”Dennis Ritchie的著作——《The C Programming Language》。这本书仅仅有200多页,去掉附录才100多页,但是字字珠玑,甚至连文中的示例程序都直接是libc库里面的函数,比国内某著名C教材里面的计算器例子不知要经典多少倍!

4. Linux操作系统

这里所说的Linux系统和上面的Linux操作完全不一回事。上面讲的Linux操作指的是你的工作电脑是linux系统,你需要在上面下载、修改、编译和调试代码,而这里的Linux系统指的是你的目标开发板上跑的Linux系统。如果是BSP工程师,你需要了解系统从硬件上电开始,到Linux系统初始化完成,init进程起来的整个流程,当然这个涉及的知识非常之多,所以我建议新手从Linux驱动程序开始入手。

所谓的驱动程序,简单来讲就是Linux系统中的一些模块,这些模块有统一的框架,开发人员只需要在其中填入控制对应硬件的C程序代码就可以了。通过学习Linux驱动,逐步了解驱动程序的框架,并发访问的原理,Linux分离分层的思想,这样在扩展到Linux系统的其他模块、甚至整个Linux系统的学习时就非常容易了。对于Linux设备驱动的修恶习,我首推《Linux device driver》(中文译做《Linux设备驱动》),这本书大部分例子是取一小段内存来模拟一个Linux设备,然后实现了对应的字符设备驱动,并以此为例阐述了设备驱动中常见的知识点。

在掌握了Linux设备驱动之后,这时对Linux操作系统应该有一个初步的认识和轮廓了,后面就应该要系统的认识一下Linux了。当然,这个时候如果你有强大的毅力,那么直接去读Linux源码也是一个选择。但是,我认为更重要的是结合之前我们从驱动程序中提取出来的Linux思想,从整体上认识一下Linux系统,这就不得不谈到又一本经典的书籍了——《Linux Kernel Development》(中文译做《Linux内核设计与实现》),这本书省略了大量的细节,通篇很少列举大段的代码,而是提纲挈领的阐述了linux设计和实现的原理。

从整体上掌握了原理之后,我们还缺少Linux实现的具体细节,《Professional Linux Kernel Architecture》(中文译做《深入Linux内核架构》)是一个不错的选择,单从页数上就能体现出来。原版1337页,中文版1055页。

七、阅读建议

  • 在阅读上述书籍的时候,建议务必坐在电脑前面,书上提到的任何操作,都照着做一遍,看看是否和书上的结果一致,这样不仅可以深化理解,还可以加深印象。
  • 上面的书籍除了《鸟哥的linux私房菜》之外,基本都是英文书籍,而且我也给出了中文版,如果有能力,建议大家阅读原版书籍,因为很多时候,中文版并没有准确的翻译出作者的意思。如果实在困难,可以阅读中文版,但建议在遇到疑问或者难以理解的时候,及时对照原版书籍,或许你会发现你理解不了并非你的问题,而是翻译的问题。
  • 上述给出的书籍都是经典的书籍,如果某些知识点理解不了,没有关系,先跳过去,过段时间重新再读,你会发现很多问题自然而然就明白了。学习的过程也是一个螺旋上升的过程,经典书籍需要反复阅读咀嚼,才能真正掌握其精髓。

本文来源于果果小师弟

本文转载自“果果小师弟”,如有侵权,请联系删除
原文链接:如何成为一个优秀的嵌入式BSP工程师?

版权声明:本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2024年5月20日 上午10:31
下一篇 2024年5月20日 上午10:43

相关推荐

  • 科研项目书多少字合适呢

    科研项目书多少字合适呢? 科研项目书是一份非常重要文档,记录了科研项目的详细信息,包括研究目的、研究方法、研究结果和结论等。在编写科研项目书时,需要根据项目的规模和复杂度来制定合适…

    科研百科 2025年5月6日
    0
  • 怎么进科研项目组

    怎么进科研项目组 想要进入科研项目组,需要具备一定的科学素养和科研能力。以下是一些可能有用的建议: 1. 阅读相关文献 要进入科研项目组,首先需要对相关研究感兴趣。阅读相关的文献是…

    科研百科 2025年3月22日
    1
  • 科研项目自聘人员

    科研项目自聘人员: 是指在科研项目中担任一定职位,并负责自己领域内工作的人员。他们通常具有相关专业知识和经验,并能够独立地完成一些复杂的工作。 自聘人员是在科研项目中非常重要的一部…

    科研百科 2025年3月27日
    1
  • 工程项目管理系统界面

    工程项目管理系统界面 工程项目管理系统是一种用于管理工程项目的软件系统,可以帮助项目经理和团队成员更好地协调工作,提高工作效率。一个好的工程项目管理系统界面应该具有清晰、简洁、易于…

    科研百科 2025年1月11日
    0
  • 系统集成项目管理题

    系统集成项目管理:高效项目推进的关键 系统集成项目管理是指将多个独立的系统整合起来,以实现某个特定目标的过程。随着信息技术的不断发展,系统集成项目管理已成为现代项目管理中的重要组成…

    科研百科 2024年7月25日
    53
  • 一文看懂怎样做好高校采购内控管理?(学校政府采购内控管理制度)

    随着高等教育事业的快速发展,高校采购规模不断扩大,采购内控管理面临着新的挑战。如何在严格遵守国家相关政策法规的前提下,进一步加强高校采购内控管理,提高资金使用效率,防范采购风险,是…

    科研百科 2024年7月12日
    72
  • 重庆工程管理系统

    重庆工程管理系统 重庆工程管理系统是一种用于管理和维护重庆工程项目的计算机系统。该系统旨在提高项目管理的效率和精度,并确保项目在预算、时间和质量方面取得成功。 重庆工程管理系统的优…

    科研百科 2024年10月3日
    32
  • 项目管理岗招聘系统

    项目管理岗招聘系统: 为职场注入新活力 随着职场的不断发展,项目管理岗的需求也越来越大。作为一个负责项目协调、计划、控制和评估的重要角色,项目管理岗需要具备出色的沟通能力、团队协作…

    科研百科 2024年12月18日
    0
  • 中美科技战对中国的影响

    中美科技战对中国的影响 近年来,中美之间的科技战成为了两国之间的一个热门话题。这场战争不仅对两国的科技产业产生了深远的影响,而且也对中国产生了重要的影响。本文将探讨中美科技战对中国…

    科研百科 2024年10月12日
    13
  • 国内信息系统项目管理师

    国内信息系统项目管理师: 掌握核心技能, 成就职业生涯 随着信息技术的快速发展,信息系统项目管理师这一职业也越来越受到人们的关注。作为一个负责管理信息系统项目的职业,掌握核心技能是…

    科研百科 2024年9月23日
    24