请保留-> 【原文: https://blog.csdn.net/luobing4365 和 http://yiiyee.cn/blog/author/luobing/】
年初的时候,不少客户都在问,国产的电脑上是不是能用隔离方案?
工程师做了一番调查,大部分客户用的都是龙芯的电脑(3A3000)。硬件上来说,主要是看PCI/PCIE的支持情况;软件上,BIOS需要支持我们的Option ROM,操作系统上的应用程序也得重写。
总的来说,工作量不算大,也不算小,由此开始了我们几个月的产品适配过程。
图1为目前调试用的机器,CPU为龙芯3A3000,桥片是7A1000,AMD的独立显卡。搭载的操作系统为中标麒麟,界面和windows很像。
本想利用这次研究的机会,把龙芯上的UEFI各方面试一下(是的,龙芯有了UEFI的BIOS),发现不完善的地方太多,无法形成体系。因此,就当做记录这段时间的工作日志吧,方便未来的自己查询。
1 背景
我在刚接触UEFI的时候,大概2011年,就找到一份文档。是百敖和龙芯梦兰的工程师写的,讲述如何使得UEFI框架运行于龙芯上,当时针对的框架是2F。文档的名字是《龙芯UEFI项目技术文档》,其中的几位工程师其百敖拜访的时候我可能都见过,不过不熟悉。
那个时候我对这块不大熟悉,虽然有朋友在做龙芯的笔记本,也没把这个当回事,略微浏览下,就没去研究了。作者说这篇文档的目标读者,全世界范围内不会超过10个人,知音难觅啊。
扯远了。总之,龙芯支持UEFI的工作很久前就开始了。
我在国庆前又去了一次龙芯研究院,为了隔离卡的Option ROM适配问题。
内部不准拍照,只能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,遇到若干缺少库的情况,一个个解决了。
Linux下的模拟环境使用的是EmulatorPkg,尝试了一下,无法编译。龙芯的工程师告诉我,这块一直没有去做,只得作罢。
我自己写了一个Package,把需要的程序在这个package下编译。编译情况如下:
其实与之前在Ubuntu下的编译过程差不多,程序中所遇到的问题其实也差不多。比如gcc对未使用的变量,比微软的编译要严格。修改后都能编译通过。
3 程序运行效果
我尝试着将第41篇博客的代码移植到了这个平台,它能随机生成颜色块,稍微调整了下代码,就编译通过了。
当然,因为没有EDK的模拟运行环境,只能编译为64位的app,在实际机器上运行。效果与之前是一样的,我就不贴出图了。
至此,所有开发所需要的东西都搭建好了。
我在龙芯研究院呆了一天,一直与工程师调试我们隔离卡的Option ROM问题。问题的原因当然是找到了,后续的工作可以继续开展。至于是什么问题,怎么解决的,那就是另外一个故事了。
后记:也许是因为龙芯上UEFI的开发环境有很多不完善的地方,龙芯方面不同意将编译环境共享出去。我能理解他们的慎重之处,毕竟出去之后就无法控制了。再加上这边工程师不是很多,如果再去维护开源,是一个沉重的负担。
所以,我也没法将编译环境共享。期望在国家越来越重视自主可控的形式下,能够有更多的工程师参与进来,也期望龙芯的生态链越来越好。
5,979 total views, 6 views today
罗冰,你的文章很好地宣传了龙芯处理器。
当初在AppPkg写APP时就遇到无法调用Stdlib的问题 不过我搞定了 折腾了两三天
请问BaseTools下替换的文件都是哪些,有开源的实现吗?
正在和龙芯的人谈,过段时间去北京,看看能否获得许可
最近一个项目,客户使用最新的3A5000,需要在Loongarch64下编译UEFI驱动,一开始也是想着去协调弄一份软硬件环境,结果软件硬件都不能给我们,只好把我们自己测试通过的驱动全部源码发过去让他们整合编译,还好我们的产品是指纹模组,驱动比较简单,而且这种通用计算机允许指纹算法跑在下面的芯片里,否则要是保密机的话,指纹算法必须在UEFI Driver内实现,而指纹算法又是公司的机密…………
最近一个项目,客户使用最新的3A5000,需要在Loongarch64下编译UEFI驱动,一开始也是想着去协调弄一份软硬件环境,结果软件硬件都不能给我们,只好把我们自己测试通过的驱动全部源码发过去让他们整合编译,还好我们的产品是指纹模组,驱动比较简单,而且这种通用计算机允许指纹算法跑在下面的芯片里,否则要是保密机的话,指纹算法必须在UEFI Driver内实现,而指纹算法又是公司的机密…………