Crosstool-NG 编译 riscv64-unknown-elf-gcc-程序员宅基地

技术标签: ubuntu  riscv  

How to build toolchain

env setup

主机环境: ubuntu-20.04.3-desktop-amd64.iso
安装包 : sudo apt-get install net-tools openssh-server git vim make gcc gawk  bison flex  texinfo automake  libtool-bin cvs libncurses5-dev ninja-build libglib2.0-dev libpixman-1-dev help2man python3-dev

Clone the Crosstool-NG and build.

$ git clone https://github.com/crosstool-ng/crosstool-ng
$ git checkout crosstool-ng-1.24.0
	// 注意 : 1.24.0 中 RV32I 包括 40条I指令 和  6条csr指令 和 1条 fence指令
	// 注意 : 1.25.0 中 RV32I 包括 40条I指令 // 不包括  6条csr指令 和 1条 fence指令
	// 请查看 https://blog.csdn.net/u011011827/article/details/124197544
	// 请查看 https://blog.csdn.net/u011011827/article/details/121371305 中的 "RV32I指令集"
	 // 所以 1.24.0 编译器 中的 -march=rv32ima 等价于 1.25.0 编译器 中的 -march=rv32ima_zicsr_zifencei 
	
$ ./bootstrap
$ ./configure --enable-local
$ make

$ ./ct-ng menuconfig

Change the following configs:

CT_EXPERIMENTAL=y
CT_ARCH_RISCV=y
CT_ARCH_64=y
CT_ARCH_ARCH=rv32ima
CT_ARCH_ABI=ilp32
CT_MULTILIB=y
CT_DEBUG_GDB=y
CT_PREFIX_DIR=/opt/riscv # 安装目录
	https://github.com/riscv-collab/riscv-gnu-toolchain/issues/457
	https://github.com/riscv-collab/riscv-gnu-toolchain/issues/457
	注意: 两个链接说的是 rv64-cc 编译 库的时候 ,没有用 -mcmodel=medany ,
	默认为 your libraries were compiled with the default -mcmodel=medlow , which won't work with a load address of 0x80000000 on a 64-bit target.
	解决方案:加上 -mcmodel=medany 就可以了 . 即 CT_LIBC_NEWLIB_TARGET_CFLAGS="-mcmodel=medany"

Build the GNU toolchain for RISC-V.

$ ./ct-ng build // 这个过程需要下载软件包 // 这个过程总耗时大概 2小时

A toolchain is installed at ~/x-tools/riscv64-unknown-elf directory.

How to build

Add path of toolchain that is described above section.

$ export PATH=~/x-tools/riscv64-unknown-elf:$PATH
~/x-tools/riscv64-unknown-elf/bin $ ./riscv64-unknown-elf-gcc  --version 
riscv64-unknown-elf-gcc (crosstool-NG UNKNOWN) 8.3.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ riscv64-unknown-elf-gcc --print-multi-lib 
.;
rv32i/ilp32;@march=rv32i@mabi=ilp32
rv32im/ilp32;@march=rv32im@mabi=ilp32
rv32iac/ilp32;@march=rv32iac@mabi=ilp32
rv32imac/ilp32;@march=rv32imac@mabi=ilp32
rv32imafc/ilp32f;@march=rv32imafc@mabi=ilp32f
rv64imac/lp64;@march=rv64imac@mabi=lp64
rv64imafdc/lp64d;@march=rv64imafdc@mabi=lp64d

$ riscv64-unknown-elf-gcc -Q --help=target
The following options are target specific:
  -mabi=                                ilp32
  -march=                               rv32ima
  -mbranch-cost=N                       3
  -mcmodel=                             [default]
  -mdiv                                 [enabled]
  -mexplicit-relocs                     [disabled]
  -mfdiv                                [disabled]
  -mplt                                 [enabled]
  -mpreferred-stack-boundary=           0
  -mrelax                               [enabled]
  -msave-restore                        [disabled]
  -msmall-data-limit=N                  0
  -mstrict-align                        [enabled]
  -mtune=PROCESSOR            

  Supported ABIs (for use with the -mabi= option):
    ilp32 ilp32d ilp32f lp64 lp64d lp64f

  Known code models (for use with the -mcmodel= option):
    medany medlow
使用中的问题
编译会生成gdb
但是该gdb 不能打印 sstatus 和其他一些列 csr
具体请查看
https://blog.csdn.net/u011011827/article/details/124197544
其他
// all
./configure --prefix=$PREFIX --enable-multilib --with-cmodel=medany
//some
./configure --prefix=$PREFIX --with-arch=rv32gc  --with-abi=ilp32d --disable-gdb

// default
https://five-embeddev.com/toolchain/2019/06/26/gcc-targets/
we pass --with-abi= to gcc to set the default ABI for compiler
  • ./ct-ng build 过程日志
$ ./ct-ng build
[INFO ]  Performing some trivial sanity checks
[WARN ]  Number of open files 1024 may not be sufficient to build the toolchain; increasing to 2048
[INFO ]  Build started 20220706.140504
[INFO ]  Building environment variables
[WARN ]  Directory '/home/pop/src' does not exist.
[WARN ]  Will not save downloaded tarballs to local storage.
[EXTRA]  Preparing working directories
[EXTRA]  Installing user-supplied crosstool-NG configuration
[EXTRA]  =================================================================
[EXTRA]  Dumping internal crosstool-NG configuration
[EXTRA]    Building a toolchain for:
[EXTRA]      build  = x86_64-pc-linux-gnu
[EXTRA]      host   = x86_64-pc-linux-gnu
[EXTRA]      target = riscv64-unknown-elf
[EXTRA]  Dumping internal crosstool-NG configuration: done in 0.15s (at 00:05)
[INFO ]  =================================================================
[INFO ]  Retrieving needed toolchain components' tarballs
[INFO ]  Retrieving needed toolchain components' tarballs: done in 0.75s (at 00:06)
[INFO ]  =================================================================
[INFO ]  Extracting and patching toolchain components
[INFO ]  Extracting and patching toolchain components: done in 0.70s (at 00:07)
[INFO ]  =================================================================
[INFO ]  Installing ncurses for build
[EXTRA]    Configuring ncurses
[EXTRA]    Building ncurses
[EXTRA]    Installing ncurses
[INFO ]  Installing ncurses for build: done in 31.82s (at 00:39)
[INFO ]  =================================================================
[INFO ]  Installing zlib for host
[EXTRA]    Configuring zlib
[EXTRA]    Building zlib
[EXTRA]    Installing zlib
[INFO ]  Installing zlib for host: done in 1.92s (at 00:41)
[INFO ]  =================================================================
[INFO ]  Installing GMP for host
[EXTRA]    Configuring GMP
[EXTRA]    Building GMP
[EXTRA]    Installing GMP
[INFO ]  Installing GMP for host: done in 42.93s (at 01:24)
[INFO ]  =================================================================
[INFO ]  Installing MPFR for host
[EXTRA]    Configuring MPFR
[EXTRA]    Building MPFR
[EXTRA]    Installing MPFR
[INFO ]  Installing MPFR for host: done in 25.71s (at 01:49)
[INFO ]  =================================================================
[INFO ]  Installing ISL for host
[EXTRA]    Configuring ISL
[EXTRA]    Building ISL
[EXTRA]    Installing ISL
[INFO ]  Installing ISL for host: done in 32.03s (at 02:21)
[INFO ]  =================================================================
[INFO ]  Installing MPC for host
[EXTRA]    Configuring MPC
[EXTRA]    Building MPC
[EXTRA]    Installing MPC
[INFO ]  Installing MPC for host: done in 7.66s (at 02:29)
[INFO ]  =================================================================
[INFO ]  Installing expat for host
[EXTRA]    Configuring expat
[EXTRA]    Building expat
[EXTRA]    Installing expat
[INFO ]  Installing expat for host: done in 8.99s (at 02:38)
[INFO ]  =================================================================
[INFO ]  Installing ncurses for host
[EXTRA]    Configuring ncurses
[EXTRA]    Building ncurses
[EXTRA]    Installing ncurses
[INFO ]  Installing ncurses for host: done in 25.38s (at 03:03)
[INFO ]  =================================================================
[INFO ]  Installing binutils for host
[EXTRA]    Configuring binutils
[EXTRA]    Building binutils
[EXTRA]    Installing binutils
[INFO ]  Installing binutils for host: done in 71.68s (at 04:15)
[INFO ]  =================================================================
[INFO ]  Installing C library headers
[INFO ]  Installing C library headers: done in 0.11s (at 04:15)
[INFO ]  =================================================================
[INFO ]  Installing core C gcc compiler
[EXTRA]    Configuring core C gcc compiler
[EXTRA]    Building gcc
[EXTRA]    Installing gcc
[EXTRA]    Housekeeping for core gcc compiler
[EXTRA]       '' --> lib (gcc)   lib (os)
[INFO ]  Installing core C gcc compiler: done in 733.36s (at 16:29)
[INFO ]  =================================================================
[INFO ]  Installing C library
[EXTRA]    Configuring C library
[EXTRA]    Building C library
[EXTRA]    Installing C library
[INFO ]  Installing C library: done in 49.64s (at 17:18)
[INFO ]  =================================================================
[INFO ]  Installing final gcc compiler
[EXTRA]    Configuring final gcc compiler
[EXTRA]    Building final gcc compiler
[EXTRA]    Installing final gcc compiler
[EXTRA]    Housekeeping for core gcc compiler
[EXTRA]       '' --> lib (gcc)   lib (os)
[INFO ]  Installing final gcc compiler: done in 676.29s (at 28:35)
[INFO ]  =================================================================
[INFO ]  Installing cross-gdb
[EXTRA]    Configuring cross gdb
[EXTRA]    Building cross gdb
[EXTRA]    Installing cross gdb
[EXTRA]    Installing '.gdbinit' template
[INFO ]  Installing cross-gdb: done in 343.00s (at 34:18)
[INFO ]  =================================================================
[INFO ]  Finalizing the toolchain's directory
[INFO ]    Stripping all toolchain executables
[EXTRA]    Creating toolchain aliases
[EXTRA]    Removing installed documentation
[EXTRA]    Collect license information from: /opt/source/crosstool-ng/.build/riscv64-unknown-elf/src
[EXTRA]    Put the license information to: /opt/toolchain/riscv/riscv64-unknown-elf/crosstool-ng-rv64/share/licenses
[INFO ]  Finalizing the toolchain's directory: done in 24.77s (at 34:44)
[INFO ]  Build completed at 20220706.143947
[INFO ]  (elapsed: 34:42.97)
[INFO ]  Finishing installation (may take a few seconds)...

可能出现的错误及解决方案

  • Installing ISL for host
[ERROR]  >>  Build failed in step 'Installing ISL for host'
[ERROR]  >>        called in step '(top-level)'

look build.log
aclocal-1.15: command not found
https://blog.csdn.net/hejinjing_tom_com/article/details/128470711
  • gdb coredump with python-3.10
change to python-3.8 
1. install python 3.8
	// https://blog.csdn.net/u011011827/article/details/131153576
2.
	in low version 
		./configure add --with-python=/usr/bin/python3
	in high version
		modify configure
			origin : for python in python3.12 python3.11 python3.10 python3.9 python3.8
			modify : for python in python3.8
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011011827/article/details/120086961

智能推荐

linux系统python截图不显示中文_LINUX系统python通过matplotlib绘图中文字体乱码-程序员宅基地

文章浏览阅读152次。LINUX系统python通过matplotlib绘图中文字体乱码,解决服务器里面没有字体的问题:查看环境input: 终端cat /etc/redhat-releaseoutput:CentOS Linux release 7.4.1708 (Core)服务器里面的字体路径,后续会更改该文件内容中的参数配置:input: pythonimport matplotlibmatplotlib.mat..._linux python 中文不显示

H3C交换机收集诊断信息的方法_华三交换机诊断日志怎么收集-程序员宅基地

文章浏览阅读1.5k次。(2)如选择N,会将诊断信息全部打印输出到屏幕中,建议开启终端软件的打印会话功能,记录会话功能,等待信息输出完全后,再关闭记录会话功能,输出的诊断信息都将记录在之前保存的文件中。示例:将诊断信息通过TFTP方式传给IP地址为192.168.1.100的PC上(PC上需要开启TFTP server,)(1)此时如果选择Y,则诊断信息会以文件的形式保存在设备的存储介质上,需要通过FTP或者TFTP方式下载到本地PC上。_华三交换机诊断日志怎么收集

基于Python的Climate Indices库计算SPEI(标准化降水蒸散发指数)01—Climate Indices库的下载和安装_climate-indices包-程序员宅基地

文章浏览阅读4.6k次,点赞4次,收藏45次。SPEI, Python, Climate_Indices库下载安装_climate-indices包

d3.js 旋转图形_《几何画板》画阴影图形-程序员宅基地

文章浏览阅读318次。《几何画板》画阴影图形 《几何画板》功能强大,但究其作图本质,其原理不过是提供了尺规作图的工具,当然其它的浮点运算的强大的功能另说,那个与尺规作图无关.精确的作图一是为了美观,比如电子文档或试卷的建立,二是有些平几性质的探究,本文只说一下阴影部分如何建立.比如下面的图形题:是个小奥题,虽然没有文字说明,想必大家也知道就是求其阴影部分的面积,但在电子文档中如何绘出这个图形呢?下面在《几何画板》中给出..._几何画板旋转区域阴影

Foxmail 邮件内链接无法打开问题_foxmail点击链接地址打不开-程序员宅基地

文章浏览阅读5.5k次。这两天新装了系统,然后Foxmail邮箱的邮件链接就打不开了。以前很方便就直接自动跳转到谷歌游览器上。在网上扒了半天也没解决,发现很多人都在问,今天突然折腾出来了。是我们把电脑设置里的默认游览器改了但是第三方管家里边 的默认游览器还没有改。第一种:把电脑默认游览器改为IE 游览器,就可以直接跳转到IE游览器了。但是我想大家都不愿意。第二种就是去管家(我的是腾讯电脑管家)里把默认游览器改..._foxmail点击链接地址打不开

Flutter控件——布局控件:层叠_flutter 绝对定位 在不同手机上-程序员宅基地

文章浏览阅读335次。Stack 层叠布局_flutter 绝对定位 在不同手机上

随便推点

Linux内核堆栈实现分析 save_stack_trace_save_stack_trace_tsk-程序员宅基地

文章浏览阅读8.3k次。1 内核线程Linux 内核为每个线程分配THREAD_SIZE(16k)的栈空间, 在每个堆栈的顶部放着struct thread_info 结构体,用来保存线程相关信息.其中有几个重要变量:Preempt_count :此变量分为四部分 0-7bit :当前进程是否能抢占的标志8-15bit:softirq 使能标志16-23bit :hardirq 使能标志..._save_stack_trace_tsk

深入MyBatis源码,理解Java设计模式之适配器模式-程序员宅基地

文章浏览阅读215次。2019独角兽企业重金招聘Python工程师标准>>> ..._mybatis源码中运用到的适配器模式

终止端口进程命令_停止端口进程命令-程序员宅基地

文章浏览阅读590次。【代码】终止端口进程命令。_停止端口进程命令

51单片机c语言俩个按键启停,51单片机跑步机启停速度控制模块仿真+源程序+电路原理图...-程序员宅基地

文章浏览阅读1.8k次。#include unsigned char code SEGtable[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //字符编码sbit SEKey =P1 ^ 0; //启动、暂停和停止按键sbit INCKey = P1 ^ 4; //速度增加键sbit DE..._顺启逆停c语言程序图

关于tomcat成功启动但访问不了欢迎界面的问题_tomcat部署成功以后服务起来了,访问不到-程序员宅基地

文章浏览阅读4.6w次,点赞16次,收藏59次。eclipse中安装tomcat的时候出现了问题。JDK已经按照网上的说法配好了,然后tomcat也成功启动。点击tomcat安装目录bin下的startup.bat后并没有出现闪退的现象。可是我在地址栏输入http://localhost:8080/却出现404错误。确认了端口号并没有被占用。百度网上一大堆也没啥用。后来发现有个帖子说是因为Root文件夹里没有index.html和index.j..._tomcat部署成功以后服务起来了,访问不到

android命令截屏_screencap /mnt/card/test.png-程序员宅基地

文章浏览阅读406次。adb shell screencap /mnt/card/test.png_screencap /mnt/card/test.png