爱影博客

记录生活 知识分享

编译龙芯BIOS记录

记录一下这两天编译龙芯BIOS折腾的那么点事。

说一下龙芯的代码,其实就是基于UDK2018进行定制的,定制的量比较小,加了几个龙芯的Package,大多数无用的Package都没有去掉,如Nt32Pkg,OvmfPkg等。

编译环境环境方面,需要使用到Linux系统,经过折腾,deepin,ubuntu,centos都可以编译。以下是编译步骤:

一、安装编译器

安装编译器

 sudo cp -fr gcc-4.4.0-pmon /opt
 sudo cp -fr cross-gcc-4.9.3-n64-loongson-rc6.1 /opt
  • 设置如下环境变量:
sudo gedit ~/.bashrc

在文件末尾添加下面几行:

CC_PREFIX=/opt/cross-gcc-4.9.3-n64-loongson-rc6.1

export LD_LIBRARY_PATH=/opt/gcc-4.4.0-pmon/lib:$LD_LIBRARY_PATH:
export LD_LIBRARY_PATH=$CC_PREFIX/usr/x86_64-unknown-linux-gnu/mips64el-loongson-linux/lib/:$LD_LIBRARY_PATH:
export CROSS_COMPILE=mipsel-linux-
export PATH=/opt/gcc-4.4.0-pmon/bin/:$PATH
  • 最后再执行一下
source ~/.bashrc

使修改的文件生效。

这部分引用自龙芯官网,略有修改:http://www.loongnix.org/index.php/PMON%E7%BC%96%E8%AF%91%E6%96%B9%E6%B3%95

二、安装32位系统兼容库

假如系统用的事32位的,就无需执行此步骤。

为什么要安装32位兼容库?因为上面所安装的GCC编译器(gcc-4.4.0-pmon)是32位的,这一点上面官网的链接也有说明,他们要求使用32位的系统,所以在64位的系统下只能安装兼容库了。

Ubuntu安装兼容库:

sudo apt-get install lib32ncurses5 
sudo apt-get install lib32z1

其它发行版Linux安装直接百度即可。

三、Build BaseTools

进入BaseTools目录,执行以下命令:

make clean
make

四、Build BIOS

做完上面几个步骤便可以进行编译了。编译前需根据CPU类型设置配置文件,配置文件位于LoongsonDemoBoardPkg/Script/Config,示例使用的是Ls3a40007a1000Single.cfg。

确定配置文件后执行如下命令:

cd LoongsonDemoBoardPkg/Script/
cp Config/Ls3a40007a1000Single.cfg ./config

最后执行:

./build.sh

注意:一定要把当前路径切换到Script再执行build.sh,不然会Build过程出现Error。

五、其它问题

记录一下环境搭建过程中出现的问题

  • error while loading shared libraries: libopcodes-2.24.so: cannot open shared object file: No such file or directory

经过搜索,是系统调用不到共享库导致的,而libopcodes-2.24.so这个库在龙芯的交叉编译器已经包含在里边了,需要将交叉编译器的共享库的路径加入系统变量即可。

CC_PREFIX=/opt/cross-gcc-4.9.3-n64-loongson-rc6.1
export LD_LIBRARY_PATH=$CC_PREFIX/usr/x86_64-unknown-linux-gnu/mips64el-loongson-linux/lib/:$LD_LIBRARY_PATH:
  • build BaseTools 出现找不到uuid.h

 《编译龙芯BIOS记录》

安装 uuid-dev

sudo apt-get install uuid-dev
  • Build过程出现BaseTools C Tool binary was not found

《编译龙芯BIOS记录》

出现这个问题是BaseTools未重新编译导致的,进入BaseTools目录后执行make即可

  • mipsel-linux-gcc: not found

《编译龙芯BIOS记录》

在已经配置好pmon环境变量的情况下还出现这个问题,那便是没有安装32位兼容库的原因导致的,因为32位的可执行文件在64位是无法被识别的

 

2019.9.23更新

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注