优秀的编程知识分享平台

网站首页 > 技术文章 正文

riscv-tools-chain安装笔记--002(riscv工具链编译安装)

nanyue 2025-03-14 19:32:09 技术文章 2 ℃

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

结果返回成功编译!

Tags:

最近发表
标签列表