riscv-tools-chain源码安装比较曲折,github连接不顺畅是一个原因,整个项目源码文件都有大于8G!
git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
我这边的环境是wsl,装了ubuntu24,按照文档所说,先复制源码下来,整个下载过程花费了几个小时,完成后提示有不少是无法下载的,错误提示都是无法连接github,由于链接不稳定,这个错误在下载时候肯定会出现:
克隆代码库的时候,部分成功部分不成功,fatal: unable to access 'https://github.com/riscv-software-src/riscv-pk.git/': Failed to connect to github.com port 443 after 131038 ms: Connection timed out
Unable to fetch in submodule path 'pk'; trying to directly fetch abadfdc507d5a75b6272dc360e70a80a510c758a:
fatal: unable to access 'https://github.com/riscv-software-src/riscv-pk.git/': Failed to connect to github.com port 443 after 133000 ms: Connection timed out
fatal: Fetched in submodule path 'pk', but it did not contain abadfdc507d5a75b6272dc360e70a80a510c758a. Direct fetching of that commit failed.
使用git命令重新更新不完整部分:
git submodule update --init --recursive
如果出现无法连接,一直执行下去直到完成!
下载qemu时候还是会出现错误:
fatal: It seems that there is already a rebase-merge directory, and
I wonder if you are in the middle of another rebase. If that is the
case, please try
git rebase (--continue | --abort | --skip)
If that is not the case, please
rm -fr "/mnt/d/riscv-gnu-toolchain/.git/modules/qemu/modules/roms/edk2/modules/SecurityPkg/DeviceSecurity/SpdmLib/libspdm/modules/os_stub/openssllib/openssl/modules/gost-engine/rebase-merge"
and run me again. I am stopping in case you still have something
valuable there.
fatal: Unable to rebase 'b2b4d629f100eaee9f5942a106b1ccefe85b8808' in submodule path 'qemu/roms/edk2/SecurityPkg/DeviceSecurity/SpdmLib/libspdm/os_stub/openssllib/openssl/gost-engine'
fatal: Failed to recurse into submodule path 'qemu/roms/edk2/SecurityPkg/DeviceSecurity/SpdmLib/libspdm/os_stub/openssllib/openssl'
fatal: Failed to recurse into submodule path 'qemu/roms/edk2/SecurityPkg/DeviceSecurity/SpdmLib/libspdm'
fatal: Failed to recurse into submodule path 'qemu/roms/edk2'
fatal: Failed to recurse into submodule path 'qemu'
此时再执行git submodule update --init --recursive也没有意义,删除qemu目录重试,
下载完成,安装编译所需要的工具:
$ sudo apt-get install autoconf automake autotools-dev curl python3 python3-pip python3-tomli libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build git cmake libglib2.0-dev libslirp-dev
其他系统需要按官方README指令安装
创建/opt/riscv目录,并且设定用户权限:
cd /opt
sudo mkdir riscv
sudo chown -R $(whoami) /opt/riscv
在源码目录下:
./configure --prefix=/opt/riscv
make
编译构建花费3个多小时!编译结果放在了/opt/riscv目录下,设置目录路径到环境变量:
vim ~/.bashrc
添加新行:
export PATH=$PATH:/opt/riscv/bin
环境变量生效:
source ~/.bashrc
做一个测试程序:
#include
int main(){
int arr[100];
int n = 0;
for(int i = 0; i < 100; i++){
arr[i] = i + 1;
}
for(int i =0; i < 100; i++){
if(arr[i] % 3 == 0 || arr[i] % 5 == 0){
n += arr[i];
}
}
printf("%d", n);
return 0;
}
执行编译命令:
riscv64-unknown-elf-gcc main.c
结果返回成功编译!