**开发机系统:**以Ubuntu17.10为例进行操作步骤。
编译器构建
将编译器解压到/opt目录。
# tar xf loongarch64-linux-gnu-2021-08-09-vector.tar.gz -C /opt/
设置环境变量
设置环境变量有两种方式:临时设置和永久设置。
如何临时设置
1.创建脚本文件env.sh
文件内容如下:
#!/bin/bash
set -x
CC_PREFIX=/opt/loongarch64-linux-gnu-2021-08-09-vector
export PATH=$CC_PREFIX/bin/:$PATH
export LD_LIBRARY_PATH=$CC_PREFIX/lib:$LD_LIBRARY_PATH
set +x
2.给env.sh添加可执行权限
#chmod +x env.sh
3.执行脚本并使环境变量生效
#source env.sh
4.检查是否生效
在命令行输入loongarch,按Tab键,查看是否出现loongarch64-linux-gnu的信息。 如果出现以下信息,则说明交叉编译器的环境配置成功。 要连接它,只需在当前终端命令行编译UEFI源代码即可。
# loongarch
loongarch64-linux-gnu-cpp loongarch64-linux-gnu-gcc-nm loongarch64-linux-gnu-gprof loongarch64-linux-gnu-ranlib
loongarch64-linux-gnu-addr2line loongarch64-linux-gnu-elfedit loongarch64-linux-gnu-gcc-ranlib loongarch64-linux-gnu-ld loongarch64-linux-gnu-readelf
loongarch64-linux-gnu-ar loongarch64-linux-gnu-g++ loongarch64-linux-gnu-gcov loongarch64-linux-gnu-ld.bfd loongarch64-linux-gnu-size
loongarch64-linux-gnu-as loongarch64-linux-gnu-gcc loongarch64-linux-gnu-gcov-dump loongarch64-linux-gnu-nm loongarch64-linux-gnu-strings
loongarch64-linux-gnu-c++ loongarch64-linux-gnu-gcc-8.3.0 loongarch64-linux-gnu-gcov-tool loongarch64-linux-gnu-objcopy loongarch64-linux-gnu-strip
loongarch64-linux-gnu-c++filt loongarch64-linux-gnu-gcc-ar loongarch64-linux-gnu-gfortran loongarch64-linux-gnu-objdump loongarch64-mips-gcc
永久凝固法
临时设置环境变量仅在当前终端窗口的命令行上有效源码编译efi文件,改变终端窗口需要重新配置。 永久配置就是将环境变量写入一些系统启动时手动生效的配置文件中,例如.bashrc配置文件。 这样就不需要每次编译前都执行env.sh脚本了。
1、打开文件,将设置内容写入.bashrc文件末尾
#vim ~/.bashrc
设置如下:
export PATH=/opt/loongarch64-linux-gnu-2021-08-09/bin:$PATH
export LD_LIBRARY_PATH=/opt/loongarch64-linux-gnu-2021-08-09/lib:/opt/loongarch64-linux-gnu-2021-08-09/loongarch64-linux-gnu/lib:$LD_LIBRARY_PATH
export CROSS_COMPILE=loongarch64-linux-gnu-
export ARCH=loongarch
保存并退出。
2. 有效的环境变量
有两种方法可以验证环境变量:
(1)可以在命令行使用如下命令生效
#source ./bashrc
(2) 重启系统生效。
#reboot
3.检查是否生效
在命令行中输入loongarch,然后按Tab键,如上所述。
编译方法
UDK2018龙芯版本的编译引入了配置文件,具体参见LsRefCodePkg/SampleCode/Desktop/Script/Desktop.cfg文件中的配置选项。
1.解压源码
# tar xf uefi-loongarch.tgz
2.进入编译目录
#cd uefi-loongarch/LsRefCodePkg/SampleCode/Desktop/Script
3.修改配置文件
#vim Desktop.cfg
要打开配置,请删除配置项上方的“#”。 要删除对应的配置项,请在配置项后添加“#”,并根据自己的需要进行修改。 如果不更改,则按照默认配置进行编译。
4.编译源码
#./build.sh
编译完成后,会在LsRefCodePkg/SampleCode/Desktop/Script目录下生成LS3A50007A.fd文件。
5.编译方式切换
编译出来的文件分为两个版本,一种是DEBUG版本,方便您调试和使用。 另一种是RELEASE版本,去除了大量调试信息,可以快速启动,并且可以在即将推出的产品中使用。 源码包中的Desktop.cfg配置文件默认为DEBUG版本。 如果修改为RELEASE版本,直接修改Desktop.cfg文件中的配置如下:
#########################################
#
# Compile Type: DEBUG, RELEASE ...
#
#########################################
# DEFINE COMP_TYPE = DEBUG
DEFINE COMP_TYPE = RELEASE
还会在 LsRefCodePkg/SampleCode/Desktop/Script 目录下生成 LS3A50007A.fd 文件。 同时生成一个目录Build,不同模式下编译生成的二补代码文件存放在不同的目录下。
调试模式:
Build/Ls3a50007a/DEBUG_GCC83/FV/LS3A50007A.fd
释放模式:
Build/Ls3a50007a/RELEASE_GCC83/FV/LS3A50007A.fd
6. 编译过程中可能出现的问题
(1)编译时出现如下错误。
Building ... /uefi-loongarch/MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf [LOONGARCH64]
Building ... /uefi-loongarch/MdePkg/Library/BaseLib/BaseLib.inf [LOONGARCH64]
/bin/sh: 1: /loongarch64-linux-gnu-gcc: not found
make: *** [/uefi-loongarch/Build/Ls3a50007a/DEBUG_GCC83/LOONGARCH64/MdePkg/Library/BasePcdLibNull/BasePcdLibNull/OUTPUT/PcdLib.obj] Error 127
解决方案:
A。 确认编译后的环境变量是否有效,并保证环境变量有效的话编译器能够找到。
b. 编译代码前执行./build.shclean,清除之前编译代码的中间文件。
C。 再次编译。
(2)编译时出现如下错误:
bin/sh: 1: iasl: not found
GNUmakefile:302: recipe for target '/uefi-loongarch/Build/Ls3a50007a/DEBUG_GCC83/LOONGARCH64/LsRefCodePkg/SampleCode/Desktop/Acpi/AcpiTables/AcpiTables/OUTPUT/Dsdt.aml' failed
make: *** [/uefi-loongarch/Build/Ls3a50007a/DEBUG_GCC83/LOONGARCH64/LsRefCodePkg/SampleCode/Desktop/Acpi/AcpiTables/AcpiTables/OUTPUT/Dsdt.aml] Error 127
解决方案:
安装iasl
#apt install iasl
重新编译一下就可以了。
燃烧法
LoongArch平台UEFI固件的烧录方式与MIPS平台UEFI的烧录方式一致。 主要通过JTAG烧录、编程器烧录和UEFI在线烧录以及更新PMON下的UEFI和更新UEFI下的PMON。
注意:LS3A50007A.fd 文件大小为 4MB,因此烧录固件的 Flash 大小不能大于 4MB。 龙芯3A5000-7A1000单通道开发板存储UEFI固件SPIflash型号:Wb2525QQ3232(flash是低压1.8V芯片,不是3.3V)。
程序员烧写方法
从板上取出Flash芯片并将其插入编程器的插座中。 在编程器中选择对应的Flash型号,导出需要烧录的补码文件LS3A50007A.fd。 单击刻录并等待刻录完成。 由于燃烧器的类型不同,这里不做详细介绍。 只需按照燃烧器的说明进行操作即可。
UEFI在线编程方法
1. 将烧录好的UEFI二进制补码文件LS3A50007A.fd加载到U盘中。
2. 在启动开发板之前,将 USB 闪存驱动器插入 USB 端口。
3. 启动开发板,等待“LOONGSON”图标出现,按“F12”键。
进入如下界面:
4、选择“UEFIShell”,进入UEFI shell界面。
5、根据显示屏顶部的设备列表,输入“FS1:”进入U盘设备,执行烧录命令“spi-uLS3A50007A.fd”,如右图:
6. 输入“reset”命令重新启动后,将显示更新的UEFI固件。
在 PMON 下更新到 UEFI
1. 将烧录好的UEFI二进制补码文件LS3A50007A.fd加载到U盘中。
2. 在启动开发板之前,将 USB 闪存驱动器插入 USB 端口。
3、启动开发板,进入PMONshell命令行,执行以下烧录命令。
4. 输入重新启动命令以启动更新的 UEFI。
PMON>reboot
UEFI 下更新 PMON
1、将烧录好的PMON二进制补码文件gzrom.bin加载到U盘中。
2、与UEFI在线烧录方法步骤2-4相同。
3、根据显示屏顶部的设备列表,输入“FS1:”进入U盘设备,执行烧录命令“spi-ugzrom.bin”
4. 输入“reset”命令重启后源码编译efi文件,即为更新后的PMON固件。
-结尾-