编译龙芯BIOS记录
记录一下这两天编译龙芯BIOS折腾的那么点事。
说一下龙芯的代码,其实就是基于UDK2018进行定制的,定制的量比较小,加了几个龙芯的Package,大多数无用的Package都没有去掉,如Nt32Pkg,OvmfPkg等。
编译环境环境方面,需要使用到Linux系统,经过折腾,deepin,ubuntu,centos都可以编译。以下是编译步骤:
〇、准备
确保当前系统已经安装基础的编译软件,如make,python,uuid-dev,iasl,未安装的执行:
sudo apt install make python uuid-dev iasl
一、安装编译器
安装编译器
- 在X86 Linux机器上,编译器下载gcc-4.4.0,交叉编译器 gcc-4.9.3,交叉编译器 gcc-4.4.7
- 下载完后,右键解压到当前目录
- 下面示例将安装到/opt目录下,使用cp命令将解压的pmon及交叉编译器复制到/opt目录
sudo cp -fr gcc-4.4.0-pmon /opt sudo cp -fr cross-gcc-4.9.3-n64-loongson-rc6.1 /opt sudo cp -fr gcc-4.4.7-7215-n64-loongson /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/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.7-7215-n64-loongson/usr/bin:/opt/gcc-4.4.0-pmon/bin/:$PATH export LD_LIBRARY_PATH=/opt/gcc-4.4.7-7215-n64-loongson/usr/x86_64-unknown-linux-gnu/mips64el-redhat-linux/lib/:$LD_LIBRARY_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 dpkg --add-architecture i386 sudo apt update sudo apt install lib32ncurses5 lib32z1
其它发行版Linux安装直接百度即可。
三、Build BaseTools
进入BaseTools目录,执行以下命令:
make clean make
注意本地GCC&G++版本保持在5或以下,高版本需要安装低版本,参考-> Ubuntu最新版本快速安装GCC5、GCC4+
四、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
安装 uuid-dev
sudo apt install uuid-dev
- Build过程出现BaseTools C Tool binary was not found
出现这个问题是BaseTools未重新编译导致的,进入BaseTools目录后执行make即可
- mipsel-linux-gcc: not found
在已经配置好pmon环境变量的情况下还出现这个问题,那便是没有安装32位兼容库的原因导致的,因为32位的可执行文件在64位是无法被识别的
*在虚拟机编译的注意一定要把代码复制到虚拟机,直接共享文件编译会报错!
2020.11.26更新
版权声明:
作者:bin
链接:https://ay123.net/mystudy/654/
来源:爱影博客
文章版权归作者所有,未经允许请勿转载。

共有 0 条评论