6

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

 3 years ago
source link: http://yiiyee.cn/blog/2019/10/16/uefi%e5%bc%80%e5%8f%91%e6%8e%a2%e7%b4%a244-%e9%be%99%e8%8a%af%e4%b8%8b%e7%9a%84uefi-app%e5%92%8coption-rom/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

请保留-> 【原文:  https://blog.csdn.net/luobing4365http://yiiyee.cn/blog/author/luobing/】

年初的时候,不少客户都在问,国产的电脑上是不是能用隔离方案?

工程师做了一番调查,大部分客户用的都是龙芯的电脑(3A3000)。硬件上来说,主要是看PCI/PCIE的支持情况;软件上,BIOS需要支持我们的Option ROM,操作系统上的应用程序也得重写。

总的来说,工作量不算大,也不算小,由此开始了我们几个月的产品适配过程。

图1 调试用的机器

图1为目前调试用的机器,CPU为龙芯3A3000,桥片是7A1000,AMD的独立显卡。搭载的操作系统为中标麒麟,界面和windows很像。

本想利用这次研究的机会,把龙芯上的UEFI各方面试一下(是的,龙芯有了UEFI的BIOS),发现不完善的地方太多,无法形成体系。因此,就当做记录这段时间的工作日志吧,方便未来的自己查询。

1 背景

我在刚接触UEFI的时候,大概2011年,就找到一份文档。是百敖和龙芯梦兰的工程师写的,讲述如何使得UEFI框架运行于龙芯上,当时针对的框架是2F。文档的名字是《龙芯UEFI项目技术文档》,其中的几位工程师其百敖拜访的时候我可能都见过,不过不熟悉。

那个时候我对这块不大熟悉,虽然有朋友在做龙芯的笔记本,也没把这个当回事,略微浏览下,就没去研究了。作者说这篇文档的目标读者,全世界范围内不会超过10个人,知音难觅啊。

扯远了。总之,龙芯支持UEFI的工作很久前就开始了。

我在国庆前又去了一次龙芯研究院,为了隔离卡的Option ROM适配问题。

图2 龙芯中科

内部不准拍照,只能Show一下外面的环境了。这里还是挺远的,最近的地铁有两公里多。我特别讨厌坐车,每次都是从地铁下来后走过了的。北京的空气很不好,很干,让呆惯了南方的我很不习惯。

据和我一起调试的工程师说,龙芯对UEFI的支持做了很多的工作了,不过因为人员等方面的原因,很多工作都还没做完。

确实,以我的感受来说,很多部分都不完善:

1) 调试机制不完善,只能使用龙芯自己做的类JTAG工具调试代码,这对不是开发BIOS的人来说,很不现实;

2) 模拟环境没有移植完,无法编译,日常开发时很不方便实验,只能在实际硬件环境中运行了;

3) 只支持UefiMain()为入口的编译,也就是说StdLib没有支持起来;

4) 龙芯的编译器,源代码是不开放的。(BaseTool目录下的各种编译和链接器)

其他在开发中,也遇到不少问题,就不一一列举了。

总觉得,如果推广龙芯的话,应该降低BIOS以及配套软件的开发难度,减少程序员的准入难度。后面还是有很长的道路要走。

2 编译环境搭建

实际上,能说的地方不多。龙芯的相关编译器不开放,很多的库也是直接替换的(Intel EDK针对X86和ARM适配过,龙芯是MIPS体系)。

我开发所使用的操作系统是CentOS 7。使用厂商提供的UDK2018-longson的压缩包,并替换BaseTool下的工具。所使用的编译器是gcc-4.4.0,遇到若干缺少库的情况,一个个解决了。

图3 搭建好的编译目录

Linux下的模拟环境使用的是EmulatorPkg,尝试了一下,无法编译。龙芯的工程师告诉我,这块一直没有去做,只得作罢。

我自己写了一个Package,把需要的程序在这个package下编译。编译情况如下:

图4 编译过程

其实与之前在Ubuntu下的编译过程差不多,程序中所遇到的问题其实也差不多。比如gcc对未使用的变量,比微软的编译要严格。修改后都能编译通过。

3 程序运行效果

我尝试着将第41篇博客的代码移植到了这个平台,它能随机生成颜色块,稍微调整了下代码,就编译通过了。

当然,因为没有EDK的模拟运行环境,只能编译为64位的app,在实际机器上运行。效果与之前是一样的,我就不贴出图了。

至此,所有开发所需要的东西都搭建好了。

我在龙芯研究院呆了一天,一直与工程师调试我们隔离卡的Option ROM问题。问题的原因当然是找到了,后续的工作可以继续开展。至于是什么问题,怎么解决的,那就是另外一个故事了。

后记:也许是因为龙芯上UEFI的开发环境有很多不完善的地方,龙芯方面不同意将编译环境共享出去。我能理解他们的慎重之处,毕竟出去之后就无法控制了。再加上这边工程师不是很多,如果再去维护开源,是一个沉重的负担。

所以,我也没法将编译环境共享。期望在国家越来越重视自主可控的形式下,能够有更多的工程师参与进来,也期望龙芯的生态链越来越好。

2,172 total views, 11 views today


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK