一个服务器BIOS开发工程师的一天
离上一次写博客,已经过去一年了,这期间并非是不想发,而是想不到有什么能真切去帮助到各位朋友的。
想写些就业相关的呢,随着离毕业时越来越长,工作也比较繁忙,我对就业市场的了解也没有跟进,产生了不少的偏差。想写些技术相关的呢,我觉得我在BIOS领域的积累又不够深入,怕写出来的东西误人子弟,毕竟BIOS的文档真的很少,写一篇烂文出来比较影响大数据。
做服务器的人本身不多,做BIOS的更是少之又少。很多同学在校招的时候遇到一个BIOS岗位也是一脸懵逼,就算是知道大概是做什么的,但对其中的分类、技术栈了解的也是少之又少。个人PC上的BIOS(类似华硕、联想电脑等)、服务器的BIOS(类似浪潮、超聚变服务器等)虽然都是BIOS开发,但工作的又有些许不同。
对于BIOS来说,部分人还是能知晓一二,多多少少在个人PC上有看到过BIOS界面,去调个风扇、调个超频等等。但你所看到的BIOS交互界面,仅仅只是BIOS里的一个模块,我们一般称为Setup,甚至对BIOS来说,没有这个Setup也能完成BIOS的使命。毕竟当你平常使用个人PC时,你也无需每次都进入到BIOS中去进行修改设置,你的电脑依然可能稳定的启动、运行。
当然,更详细的东西我们留着到以后去讲,毕竟说得细了,听得懂的人少,看起来也乏味。

一个服务器BIOS开发工程师的一天
一个服务器BIOS开发工程师的一天都在做什么呢?
早上9:30

坐下工位的那一刻,就跟电脑按下开机键开机一样,开始了上电自检。打开办公软件,逐个小红点点击查看消息,看有没有涉及自己相关的。当然,可以不看,但是我忍不住,有强迫症。
如果上电启动一切正常,那我们就能进入到大脑OS,开始这富有规划而美妙的一天。我们的计划是什么呢,我们一般有两个计划。一个是解决昨天没解决的问题单,另一个也是。
早上10:30
随着Vscode页签的跳动,代码的浏览,终于在EDK2百万行代码中找到了一点蛛丝马迹,决定加上DEBUG信息,再跑上一把,一探究竟。
作为一个BIOS工程师,要沉得住气。
BIOS不同于JAVA、Python等程序开发,可以加上修改之后直接就运行,一分钟可以跑好几遍。
可对于BIOS来说,庞大的EDK2项目编译完成就可能需要十分钟——这仅仅只是编译。在完成编译之后,你需要在BMC上去升级你的BIOS二进制,这又可能需要两三分钟。在完成固件的升级之后,你终于可以点击上电,去启动你的服务器环境了。
你是不是以为像个人PC一样,几十秒完成启动呢。对的,这是最理想的情况,但我得说点不理想的情况,那就是一般都不太理想,五分钟以内能从启动到进入到OS,我得称这个服务器一声哥,你真快。
所以作为一个BIOS工程师,要沉得住气,沉不住气砸坏了东西还得赔,目前服务器CPU价格普通一个几万++。
早上11:30
到了十一点半,你终于完成了这一切,你的服务器终于进入到了OS,完成了这一次的上电启动。于是你终于可以收集日志信息,查看你添加的打印信息,验证修改是否成功。
终于,打印的日志看起来有了你想要的东西。修改成功,算是完成了一半了。
剩下的一半:完善代码修改->代码上库->构建再验证->自验报告->检视代码->合入代码。
中午12:00
中午的东西有很多,但我总结来说就是:吃饭散步玩手机睡觉……

下午 1:30
如果一天没有新的问题,那就不是完整的一天。

结束午休,结果一杯水,重新坐回工位前,测试同学急促的消息已经来了。
"chen工chen工,为什么硬盘不识别啊”这是一个非常常见的问题,它涉及到的太多了。
对于一个硬盘来说,不识别的场景有很多。OS不识别、BIOS不识别、OS和BIOS都不识别、OS和BIOS一个识别一个不识别。
你的脑子里已经闪过些许可能,但查看过日志后,只能沉重的按下回车键,将消息发出去:“同学,请你把硬盘的线缆接好”
一番折腾过后,测试同学终于发来消息,“chen工,你真是神医啊,果然是线缆的问题。“
我不是神医,我只是久病成良医罢了……
BIOS经常是个很糟心的活,因为上接软件,下接硬件。你不仅要懂BIOS,你有时候还需要懂OS,还需要懂硬件。当然,你不需要很懂,但是如果在你需要懂的地方你不懂的话,你会因此走很多弯路。
下午3:00

例会开始了,例会又开始了,例会又又又开始了。
一个项目就有一个例会,那我问你,一个人可以负责几个项目?答:不太可能是0个,但可能是无数个。
进度、风险、阻塞点、拉通对齐里程碑……
这些常规项是重要,但有时让我觉得重要的地方在于,给各个领域的同学提供了一个群魔乱舞的机会,只有在这个时候,人才是齐全的,某些问题才能得以讨论,至于讨论会不会演变为争论,那就只能静观其变了。
当几个项目同步进行时,被一通会议给拉上去,别人讲述一堆现象及问题时,你可能还没有反应过来,只能先问一句:你在(叽里呱啦)说哪个项目?只待别人回复之后,你才能再继续转动你的大脑,去思考相关的问题。
下午4:00
当夕阳西沉的时候,终于从纷繁的会议与事务中抽身,在接下来这完整而仓促的时间,要开始为下一个需求做准备了。
程序员一般讨厌两种人,一种是不写详细设计文档的人,另一种是让他写详细设计文档的人。
写复杂点写,可以写,但是费时间。往简单一点写,别人看不懂,不知道你在写什么。
理解需求描述->思考设计方案->编写设计文档。这是一个良好的开始,就像一段旅行一样,要做好大致的规划,判断计划的可行性。你不能说你想去北极,但计划以游泳的方式,就算它真的可以实现,但它并不是一个适合的方案。
当终于构思好一个合适的设计方案后,编码、验证,又进入到一个新的轮回……
晚上7:00

当时间来到晚上七点,冬季的天空已经全部黑暗,楼外的霓虹灯已经点亮。
也许平常的日子并不能在此刻下班,但这篇文章中,BIOS工程师的一天要到此结束了,我希望你也可以,你也是。
当你走出大楼,看到繁华的市区,有璀璨闪烁的灯光,有飞驰而过的公交,有熙熙攘攘的人群。
属于工程师的一天结束了,但属于自己的一天才刚开始,关于自由、理想和生活,
注释
文中不得不提到一些专有的名词或术语,在此做一个简单的介绍方便大家理解。
EDK2:EDK2是 UEFI 开发工具包2 的缩写。它是一个开源项目,可以理解为是构建UEFI BIOS最核心、最基础的“源代码框架”或“代码库”。几乎所有的厂商(如AMI, Insyde, 华为,浪潮等)都会基于EDK2这个“地基”来进行二次开发,添加自己特定的硬件支持和功能模块。
Setup:指的是我们按F2/Del键进入的那个BIOS设置界面。它是一个交互式配置模块,允许用户或工程师修改硬件配置(如启动顺序、CPU频率、开启/关闭某些功能等)。但这些设置最终会以变量的形式保存在非易失性存储器中,BIOS在启动时读取这些配置来初始化系统。
BMC:BMC是基板管理控制器的缩写。这是服务器特有的一个概念。你可以把它想象成嵌入在服务器主板上的一个“小型独立计算机”,它通常有自己的处理器、内存和网络接口。即使服务器的CPU没有上电(即主机是关机状态),BMC也是运行的。管理员可以通过网络远程访问BMC,实现远程开关机、监控服务器健康状况(温度、电压、风扇转速)、查看日志、以及——就像文中提到的——远程升级BIOS固件。
固件:固件(Firmware)就是写入 ROM (只读存储器)中的程序,固件担任着一个系统最基础最底层工作,直接控制硬件
#秋招##后端开发##超聚变##BIOS##如果再来一次,你还会选择这个工作吗?#
查看22道真题和解析