心之所向,素履以往,生如逆旅,一苇以航。
2020年六月离开学校开始第一份工作,作为一个涉世未深的少年,遇到了第一个主动询问的上司&hr,不亏待每一份热情,在一番闲聊之后,没投过几次简历的自己就成为了一名赛事数据工程师,正式成为了程序员。之后才了解到,我的简历中有参加过电子设计大赛这一经历,即便是志愿者,却也带来了机遇,不是么
风乍起,合当奋意向人生
第一次租房,第一次上下班,一切都发生的那么自然,但似乎身边的一切并不是那么糟,没有996,没有强制加班,甚至在初入公司时候还能暂住在上司家中,策策和藏藏是他两只宠物狗的名字,那时候想着在校时光感叹没有人不会走,也没有人会一直在,到站了就要下车,空的位置自然会有人代替。可真当联系的时候,还是会有那么一个人保持着当初的模样,能让自己忆起青葱岁月。青春本来就是马不停蹄的相遇和错过,但仍有重逢
所求皆如愿,所行化坦途,多喜乐,长安宁。
由于不可抗力的原因,我离开了公司,告别了第一个伯乐,这个30岁却已能独当一面的青年,对待后辈耐心仔细,房间两三点仍亮着的灯就是这能力最好的见证吧,我心曾经执剑的少年,怎能混迹在市井之间。短短三个月的功夫,体会着自己养活自己的新鲜感,学习着如何与同事们处理好关系,感受着独自拥抱社会的勇气,很感谢给我上了社会生活的第一课,希望安老师保重身体,心想事成
凡是过往,皆为序章。
缘分总是妙不可言,从高中自称Jerry到大学毕业,在同年九月份,我不得不改头换面成为Hubery,主管叫TOM,我何德何能敢以这个名字给代码署名,也许我的入职有jerry的很大功劳,毕竟面试三位就有主管,但以后总有再现的时候吧。
至于面试相关,询问了一些C语言的基础知识,完整的叙述了自己毕设的内容,针对毕设回答几个问题,毕设的亮点等等;关于硬件的只询问了是否学过单片机等专业课,回想起来这也许就是BIOS低门槛的原因吧,就这样,我放弃了C++,开始了嵌套嵌套的C语言中。
我们都在阴沟里,但仍有人仰望星空。
刚步入公司,就遇到了同事离职,比我来的早了些,呆了一个星期,我便顺理成章的继承了衣钵,虽然与同学Java的8K或是1W的大数据相比薪资并不怎么样,但对于佛系的自己而言,这个领域并没有什么不好,即便学习资源相对缺乏,更多的是英特尔的英文文档,但是没有内卷,只有独自作战或是合作两种模式,同事之间的关系永远是这么融洽,在后面的日子里,开始接受公司的培训,百度一些资料,完成公司的课题,与同期同事搞搞研究,直到,2021年三月新员工培训结束,开始看项目源码,而我顺手将培训学得写下,虽然言语凌乱,但还是希望给别人一些帮助,以至于有人以为这些都不是出自于一个入职半年的新人写的,谢谢捧场,帮到就好
我门没有坦途通向未来,但我们还是摸索着蹒跚前行。
由于公司培训的资料是内部的,但整体的旅程重要节点大致如下:
基本知识:在B站有一个老狼发布的视频,讲了一些,https://www.bilibili.com/video/BV1Nr4y1w7dP
练习课题:
- 1:Define PCD and Configure PCD 如何定义一个PCD以及使用PCD
- 2:TimeOut Variable 引入PCD 和 Protocol, 访问和修改 EfiVariable: L"Timeout", gEfiGlobalVariableGuid, UINT16
- 3:Add Sample Application to print the memory address
调用Allocatepool()/AllocatePage()申请内存,修改内容,在shell下读取。通过gBS->HandleProtocol()读取 gEfiLoadedImageProtocolGuid获得Image。 - 4: Source Level Debug on Emulator platform 学习Debug()和ASSERT()来代替Print()进行打印
- 5:Add setup option
在 VFR 修改VFR文件,在表单1中添加一个或多个Display TEXT、oneof、checkbox、numeric - 6:Add new DXE driver to set variable , install protocol 通过 gRT->SetVariable()设置变量;通过gBS->InstallProtocolInterface ()安装protocol
- 7:Add PEIM module to create HOB , install PPI 使用gEfiCallerIdGuid创建GUIDED HOB ;install PPI&LOCATE PPI 需要了解EFI_PEI_PPI_DESCRIPTOR PeiServicesInstallPpi () PeiServicesLocatePpi()
- 8:Add the public Guid/Ppi/Protocol header file for PEI and DXE 定义GUID并作用于FileInfo.h、DxeIpl.h、StatusCode.h
- 9:Add new library class and library instance to be used for new added PEI and DXE driver Library的学习使用,添加api function ,并结合 .h .inf .dsc文件进行使用
心怀浪漫,珍惜日常;风尘仆仆,终有归途。
- 10:Add NotifyPpi and Notify Event for Protocol and EventGroup
学习notify PPI,并在PEIM Driver ,DXE Driver 中使用 。gBS->CreateEventEx()用于创造notify PPI - 11:Use gBS->AllocatePages() service to allocate the different memory type
结束需要FreePages() and FreePool()来释放空间 - 12:Add UEFI Application to consume BaseLib & BaseMemoryLib StrLen ()、StrSize ()、StrCpyS ()、StrnCpyS ()、StrCmp ()、StrStr ()、CopyMem ()、SetMem ()、CompareMem ()
- 13:Add UEFI Application to display UEFI DevicePath
设备路径的学习使用,ConvertDevicePathToText()将设备路径转换为字符串
DevicePath,“PciRoot(0x0)/Pci(0x1F,0x0)/Serial(0x0)/Uart(115200,8,N,1)/VenPcAnsi()” - 14:Add Application to use BaseLib BitField APIs LShiftU64 ()、RShiftU64 ()、BitFieldRead32 ()、BitFieldWrite32 ()、BitFieldOr32 ()、BitFieldAnd32 () 、BitFieldAndThenOr32 ();逻辑位的使用,(TestValue >> 10) & 0x1f) + ‘A’ - 1,设定TestValue的值 观察结果
- 15:Add Application to consume macros in Base.h and string functions in BaseLib.h Base.h:MAX_INT32 MAX_UINT32、BIT0…BIT63、SIZE_1KB…SIZE_16GB、OFFSET_OF ()、SIGNATURE_32 () ‘BYO2’ ==> UINT32、BASE_CR ()、ALIGN_VALUE ()、ALIGN_POINTER ()
BaseLib.h: UnicodeStrToAsciiStrS () L"1234" => “1234”、AsciiStrToUnicodeStrS () “1234” => L"1234"、StrDecimalToUintnS () ‘1234’ => 1234、StrHexToUintnS () ‘0x1234’ => 0x1234 - 16:Add the application to print FV information 使用 GetSectionFromAnyFv ()在 MdePkg\Include\Library\DxeServicesLib.h get FV data.解析FV image (FvBuffer) EFI_FIRMWARE_VOLUME_HEADER 、 EFI_FFS_FILE_HEADER 、 EFI_COMMON_SECTION_HEADER
- 17:Add application to dump PCI device information
MdePkg\Include\Protocol\PciIo.h defines PciIo protocol.
MdePkg\Include\IndustryStandard\Pci22.h defines PCI definition.
gBS->LocateHandleBuffer () gBS->HandleProtocol() ;
PciIo->Pci.Read () to read Pci header (PCI_TYPE00)
PciIo->GetLocation() to get PCI device Segment, Bus, Device and Function.
Refer to MdeModulePkg\Library\UefiBootManagerLib\BmConsole.c. - 18:Add the application to use IoWrite8 and IoRead8 API In OVMF, write the ascii string to serial port (0x3F8) by IoLib IoWrite8().The example code is in Edk2\PcAtChipsetPkg\Library\SerialIoLib\SerialPortLib.c.
少年与爱永不老去,即便披荆斩棘,丢失怒马鲜衣。
在一系列培训结束后,开始了撰写博客,四处搜集材料,既然是个偏僻的圈子,希望这些博客能存在的久一点,毕竟都是网上的资料,指不定哪天就会被警告,到时自会删除。
我们终其一生都是为了选择的权利以及拒绝的底气。
我想去很远地方,去他乡 陌生方向,漫无目的地流浪,去疯狂 去飞翔,看看成群的牛羊,高原星空的模样,那曲天湖的流淌和海阔天茫。