bsp工程师学习路线(转载)

1 篇文章 0 订阅

最近工作中遇到BSP相关的知识,所以做了一些研究,

发现一篇博客,蛮不错的,就转载了,如果侵权请联系我删除。

 

转自:https://luomuxiaoxiao.com/?p=273

 

 

 

嵌入式软件工程师杂谈之二 —– BSP工程师学习路线

Contents [hide]

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

一、专业背景

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

二、推荐书籍

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

1. 计算机原理

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

从2010年至今,个人已经反复研读了几遍,每次重读依然感觉有很多收获。因此,在本博客中,我专门新建了一个主题,从一个“程序员编写出来的C文件到编译生成可执行文件,最终到程序运行的过程”的角度来总结我对本书部分知识的理解和收获。本书从出版至今已经推出了三版,我自己收藏了第二版英文版和最新版第三版高清扫描的中文电子书(文件大小501M),有需要的同学可以在我的微信公众号(请扫描右侧二维码或者打开微信搜索“落木萧萧技术论坛”)回复“csapp”获取下载地址

2. 基本的Linux操作

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

3. C语言基础

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

4. Linux操作系统

这里所说的Linux系统和上面的Linux操作完全不一回事。上面讲的Linux操作指的是你的工作电脑是linux系统,你需要在上面下载、修改、编译和调试代码,而这里的Linux系统指的是你的目标开发板上跑的Linux系统。如果是BSP工程师,你需要了解系统从硬件上电开始,到Linux系统初始化完成,init进程起来的整个流程,当然这个涉及的知识非常之多,所以我建议新手从Linux驱动程序开始入手。所谓的驱动程序,简单来讲就是Linux系统中的一些模块,这些模块有统一的框架,开发人员只需要在其中填入控制对应硬件的C程序代码就可以了。通过学习Linux驱动,逐步了解驱动程序的框架,并发访问的原理,Linux分离分层的思想,这样在扩展到Linux系统的其他模块、甚至整个Linux系统的学习时就非常容易了。对于Linux设备驱动的修恶习,我首推《Linux device driver》(中文译做《Linux设备驱动》),这本书大部分例子是取一小段内存来模拟一个Linux设备,然后实现了对应的字符设备驱动,并以此为例阐述了设备驱动中常见的知识点。获取电子书的方法:在我的微信公众号回复“ldd”。

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

从整体上掌握了原理之后,我们还缺少Linux实现的具体细节,《Professional Linux Kernel Architecture》(中文译做《深入Linux内核架构》)是一个不错的选择,单从页数上就能体现出来。原版1337页,中文版1055页。我目前也正在看这本书,所以更多的阅读体会,稍后我会以专栏的形式写出,大家也可以一起阅读参与讨论。获取电子书的方法:在我的微信公众号回复“plka”。

三、阅读建议

  1. 在阅读上述书籍的时候,建议务必坐在电脑前面,书上提到的任何操作,都照着做一遍,看看是否和书上的结果一致,这样不仅可以深化理解,还可以加深印象。

     

  2. 上面的书籍除了《鸟哥的linux私房菜》之外,基本都是英文书籍,而且我也给出了中文版,如果有能力,建议大家阅读原版书籍,因为很多时候,中文版并没有准确的翻译出作者的意思。如果实在困难,可以阅读中文版,但建议在遇到疑问或者难以理解的时候,及时对照原版书籍,或许你会发现你理解不了并非你的问题,而是翻译的问题。

  3. 上述给出的书籍都是经典的书籍,如果某些知识点理解不了,没有关系,先跳过去,过段时间重新再读,你会发现很多问题自然而然就明白了。学习的过程也是一个螺旋上升的过程,经典书籍需要反复阅读咀嚼,才能真正掌握其精髓。

注:以上书籍电子版仅供学习交流使用,请勿用于商业用途,如有侵权,请联系我,我会立刻删除。
另外,关于以上书籍我都购买正版,也推荐大家买正版来学习收藏,尤其是作为程序员,尊重比别人的劳动成果支持正版,也就是尊重自己。

转自:https://luomuxiaoxiao.com/?p=273 

  • 9
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值