16 luobing4365

尚未进行身份认证

十多年编程经历,前5年主要开发语言是x86汇编和C,开发各类OptionRom。后5年涉及一些驱动开发和App以及UEFI编程,从此更多的精力用在了团队和公司管理上。然不忘初心,仍孜孜不倦地在各技术领域钻研,其乐无穷。 近一年开始,对物联网相关产业以及AI极有兴趣,立志并着手进行中。

等级
TA的排名 11w+

UEFI开发探索50 – UEFI与网络2

(请保留-> 作者: 罗冰)3在VirtualBox中使用网络在UEFI开发探索系列博客的第48篇中,我介绍了如何在VirtualBox中搭建UEFI Shell。本节就在这篇博客的基础上,让VirtualBox下的UEFI Shell有访问网络的功能。1)安装网络驱动和网络协议驱动我使用的是VirtualBox6.1.4,其虚拟网卡为Intel Pro/1000MT D...

2020-03-26 21:12:47

UEFI开发探索49 – UEFI与网络1

(请保留-> 作者: 罗冰)UEFI提供了非常完整的TCP/IP网络协议栈,开发人员甚至可以在UEFI上开发自己的Web服务器。其网络协议栈如图1所示:图1 UEFI的网络协议栈1) 数据链路层:ARP(Address Resolution Protocol):地址转换协议,将IP地址转换为物理的MAC地址;MNP(Managed Network Protocol):提...

2020-03-22 21:47:04

UEFI开发探索48 – 搭建UEFI Shell环境

(请保留-> 作者: 罗冰)做UEFI的实验,32位的程序可以使用TianoCore的模拟环境进行测试。64位的程序,可以使用启动盘在实际的机器上测试,也可以使用虚拟机来测试。制作启动盘很简单,不过,我之前保存的启动文件丢失了,正好重新做一遍,把过程记录下来。1制作UEFI BIOS下的启动盘启动文件可以通过编译ShellPkg来得到。打开VS命令行,进入EDK的目录,执行...

2020-03-20 22:11:21

UEFI开发探索47 – UEFI上移植GUILite

(请保留-> 作者: 罗冰)上一篇的博客中,已经搭建了C++的编程框架,虽然不是所有C++特性都支持了,比如new和delete,以及虚析构函数等,但是用来移植GuiLite已经足够了。下面就开始着手这一工作。1 代码选择GuiLite的例子比较丰富,从控件到动画、甚至3D的实现,都可以找到。浏览了一圈后,我选择从HelloTimer开始动手。这是在STM32F103上运行的...

2020-03-14 16:14:49

UEFI开发探索46 – UEFI支持C++

(请保留-> 作者: 罗冰)由于GUILite是由C++开发的,将其移植到UEFI下,意味着代码必须用C++来编写。以下的内容,大部分来自于《UEFI原理与编程》第10章,将需要的代码整合到了我自己的框架中。有些书中没有遇到的小问题,博客中也给了解决办法。1 C与C++之于UEFIUEFI中的程序遵循的是C语言的规则,大部分时候应该用模块化的思维方式去理解代码。在日常开发的时...

2020-03-02 21:34:02

UEFI开发探索45 – GuiLite概览

(请保留-> 作者: 罗冰)在开始这个探索系列的时候,我就计划在UEFI上移植一个完整的GUI库。前面开发各种图形编程、特效实现的代码,其实有很大一部分来自于我之前另外一个项目-Foxdisk。在这个项目中,某种程度上实现了任务的切换,可以看做一个小型的、带有图形显示的shell界面。不过,Foxdisk中的键盘处理是完全脱离于图形的,而且也没有实现鼠标的处理。简而言之,这是一个...

2020-02-28 11:42:47

UEFI开发探索44 – 龙芯下的UEFI App和Option ROM

(请保留-> 作者: 罗冰)年初的时候,不少客户都在问,国产的电脑上是不是能用隔离方案?工程师做了一番调查,大部分客户用的都是龙芯的电脑(3A3000)。硬件上来说,主要是看PCI/PCIE的支持情况;软件上,BIOS需要支持我们的Option ROM,操作系统上的应用程序也得重写。总的来说,工作量不算大,也不算小,由此开始了我们几个月的产品适配过程。图1 调试用的机器...

2020-02-28 11:40:47

UEFI开发探索43 – Protocol的使用2

(请保留-> 作者: 罗冰)今天来探索上次提出的第三个问题:如何产生Protocol?在常看的书《UEFI原理与编程》中,实际上已经介绍了如何开发UEFI服务了。他以视频解码为例,提供了一个完整的解码库。目前对视频解码没有什么兴趣,因此,这篇内容对我来说,多余的枝节太多了。我准备构建一个比较简单的框架型代码,可以用来在屏幕上画几何图形,以熟悉如何开发Protocol。1 UE...

2020-02-28 11:33:02

UEFI开发探索42 – Protocol的使用1

(请保留-> 作者: 罗冰)虽然一直使用各种Protocol来实现需要的程序功能,但对其背后的原理、实现方法,一直都比较模糊。我奉行的是“先用再说”的实用主义,正好周末有点闲暇,探究一下对Protocol理解模糊的地方。图1 Protocol的构成如图为Protocol的结构图,摘自于UEFI Spec 2.8 page 45。我想弄清楚的问题如下:1) 如何使用Pr...

2020-02-28 11:28:41

UEFI开发探索41 – Event、Timer和任务优先级

(请保留-> 作者: 罗冰)作为一个底层的支持系统,UEFI没有支持中断。如果想支持异步操作,只能通过事件(Event)来实现。在开发Foxdisk的过程中,也遇到需要同时处理的事件。比如提示用户输入的闪烁光标、自动显示的系统时间等,我是采用了时钟中断(int 1Ch)的方式来实现的,是段很有意思的程序。不过,我只是简单地将需要的功能堆砌在int 1Ch中实现,并没有完整地实现多...

2020-02-28 11:22:41

UEFI开发探索40 – 构建自己的Package

(请保留-> 作者: 罗冰)前段时间在Linux下开发UEFI程序,发现以前写的AppPkg的32位程序没法编译,无法在模拟环境下测试执行程序。我当时就想脱离AppPkg,自己构建Package。当然,StdLib的库不能使用了,也不能以main()函数为入口。我觉得这都不是什么大事,毕竟平常构建的Option ROM代码也不能使用这些。说干就干,顺便把各种类型文件的知识点过一遍...

2019-12-08 19:53:07

Foxdisk12 – 图形显示1

(请保留 -> 作者:罗冰)最近在写UEFI博客的时候,遇到些阻碍。我想移植一款开源的GUI到UEFI下,目前还没有找到。不过,博客开天窗这么久,总是不像话,所以回来继续写Foxdisk的博客了。Foxdisk的博客更新较慢,主要是觉得这些都是Legacy BIOS下的东西,可能想了解的人不多,我也是随性而写,并不制定计划。使用Foxdisk3的代码,很难演示如何进行图形编程。...

2019-11-18 21:02:41

早起-西安的清晨

现在是早上七点整,听着音乐,在另外一个城市迎来新的一天。每天的日子都是在-赶快起床、孩子要上学了-这样的心态中迎来,一般都在六点半左右起床。难得今天没有这样的担忧,昨晚我十点多就上床睡觉了,却在凌晨五点多的时候醒了。难得可以多睡会,起来得反而比平时早,人真是种矛盾的生物。不过,也多亏如此,我见到了西安古城的清晨。黎明初启,城市的夜灯还在亮着。天气很好,聚集过来的云层,仿佛在准备着迎...

2019-11-11 07:06:07

Windows驱动稳定性测试

(请保留-> 作者: 罗冰)近期UEFI探索系列没有更新,忙着处理北京的案子以及帮忙朋友测试一个IO驱动。代码审查完,找不出什么问题。windows的驱动除了直接测试外,是否有其他好的测试方法,我不是很熟悉。问道于张佩,他建议用Verifier进行测试。正好去上海有事,周末拉着张佩来教我如何测试和调试。过程就不赘述了,我把使用Verifier的过程记录下来,以备未来查看。Driv...

2019-10-19 10:09:38

UEFI开发探索39 – Ubuntu 16.04下用gdb建立UEFI调试环境

(请保留-> 作者: 罗冰)准确地说,应该是在Ubuntu 16.04下,使用Qemu模拟UEFI启动环境,同时配合Intel UDK Debugger tool和gdb建立的X64调试环境。使用的是Qemu和OvmfPkg,类似于之前使用windbg在Windows下搭建调试环境,这次换为在Linux下搭建了。正是上一篇博客留下的题目。1 参考资料如何在Linux下搭建调试...

2019-10-19 09:59:25

UEFI开发探索38 – Ubuntu下编译AppPkg杂谈

(请保留-> 作者: 罗冰)上一篇博客中,在编译AppPkg的时候,遇到了问题,编译的时候出错。错误的提示在上一篇博客中贴出来了,这里不再贴出。针对此问题,我查找了一些资料,做了若干实验,姑且以杂谈的形式记录下来。1 EADK为了方便使用标准的C库,EDKII中提供了开发包:EDK II Application Development Kit,简称为EADK。它最早脱胎于EFI_...

2019-10-19 09:53:56

UEFI开发探索37 – Linux下环境搭建

(请保留-> 作者: 罗冰)Windows下搭建环境、编译、运行等一系列工作,都已经比较熟练了。不过,鉴于Intel提供的调试工具(之前博客中讲述过)Linux版本的都比windows新:图1 已经两年没更新的调试工具我觉得还是有必要在Linux下把开发环境建立起来。何况,我平常用来开发UEFI的Windows虚拟机实在太大了,动辄50G,装完必要软件后,只剩下10多个G。...

2019-10-18 19:50:07

UEFI开发探索Q&A – 问题辑录(持续更新)

最近正在尝试在Unbutu16上搭建开发和调试环境,其中过程一言难尽,到现在也没完成到符合我要求的程度。正是因为遇到障碍,我今天早上回到Win10+UDK2018的环境下,想重新编译下AppPkg,没想到遇到问题了,怎么编译都不通过。明明之前是没有问题的啊,看第26篇博客,当时我还非常雀跃于第一次编译通过。我一直都在使用AppPkg编译我自己的UEFI app,肯定是哪里的配置被我自己修改...

2019-10-16 23:54:59

UEFI开发探索36 – UEFI Option ROM

(请保留-> 作者: 罗冰)Option ROM的开发不是一门显学,相关的资料也少得可怜。如果是在ODM厂商工作,或者做BIOS相关的工作,可以接触到很多相关的材料。不过,对我这种必须开发Option ROM,公司又不是相关行业的,非常少见。这也导致在开发Legacy BIOS的Oprom时,只能一点点摸索,遇到的问题如山之多。UEFI下开发Option ROM相对好多了,一方面资料...

2019-10-16 23:46:03

UEFI开发探索35 – Option ROM前传2

(请保留-> 作者: 罗冰)在Legacy BIOS的Option ROM开发过程中,除了需要注意代码结构外,代码生成文件的大小也得小心,BIOS文件预留的空间不多。我一般将生成文件控制在12K左右。当然,在后期的产品开发中,我们开始与联想和方正合作,Option ROM文件是请BIOS工程师编译进BIOS的,上述的限制就不需要那么严格了。1校验和的问题Option ROM...

2019-10-15 23:25:40

查看更多

勋章 我的勋章
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    参与《原力计划【第二季】— 学习力挑战》获得推荐的原创文章的博主