-
Notifications
You must be signed in to change notification settings - Fork 5.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Question] 有没有固定的下载地址可以得到最新的可用用于开发 riscv 的 musl gcc?感觉一直没有搞清楚 #9812
Comments
@aozima 有ci build推送的链接吗? |
我进行了一些尝试。 所用主要平台为qemu-virt64-riscv 首先是对于最新的musllibc,在它的bits/signal.h中没有SA_RESTORER的定义了,因此要进行编译,需要修改 ...
#ifdef RT_USING_MUSLLIBC
/* this is required for musl <signal.h> */
#ifndef _POSIX_SOURCE
#define _POSIX_SOURCE
#include <signal.h>
+#ifndef SA_RESTORER
+// 或者其他修改方法
+#define SA_RESTORER 0x04000000
+#endif
/* limiting influence of _POSIX_SOURCE */
#undef _POSIX_SOURCE
#else /* ndef _POSIX_SOURCE */
#include <signal.h>
#endif
#else
... 这样修改之后,能够完成编译过程。但链接部分依然有问题。 在当前ci的工具链中, # 新工具链
❯ $RTT_EXEC_PATH/riscv64-unknown-linux-musl-gcc -v
Using built-in specs.
COLLECT_GCC=/home/zhaocake/WorkSpace/temp/riscv/bin/riscv64-unknown-linux-musl-gcc
COLLECT_LTO_WRAPPER=/home/zhaocake/WorkSpace/temp/riscv/bin/../libexec/gcc/riscv64-unknown-linux-musl/14.2.0/lto-wrapper
Target: riscv64-unknown-linux-musl
Configured with: /home/runner/work/riscv-gnu-toolchain/riscv-gnu-toolchain/gcc/configure --target=riscv64-unknown-linux-musl --prefix=/mnt/riscv --with-sysroot=/mnt/riscv/sysroot --with-system-zlib --enable-shared --enable-tls --enable-languages=c,c++ --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libsanitizer --disable-nls --disable-bootstrap --src=.././gcc --disable-default-pie --disable-multilib --with-abi=lp64d --with-arch=rv64gc --with-tune=rocket --with-isa-spec=20191213 'CFLAGS_FOR_TARGET=-O2 -mcmodel=medlow' 'CXXFLAGS_FOR_TARGET=-O2 -mcmodel=medlow'
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 14.2.0 (GCC)
# 旧工具链
❯ ~/WorkSpace/Embeded/riscv64-linux-musl-for-rtt/bin/riscv64-unknown-linux-musl-gcc -v
Using built-in specs.
COLLECT_GCC=/home/zhaocake/WorkSpace/Embeded/riscv64-linux-musl-for-rtt/bin/riscv64-unknown-linux-musl-gcc
COLLECT_LTO_WRAPPER=/home/zhaocake/WorkSpace/Embeded/riscv64-linux-musl-for-rtt/bin/../libexec/gcc/riscv64-unknown-linux-musl/10.1.0/lto-wrapper
Target: riscv64-unknown-linux-musl
Configured with: /builds/alliance/risc-v-toolchain/riscv-gcc/configure --target=riscv64-unknown-linux-musl --prefix=/builds/alliance/risc-v-toolchain/install-native/ --with-sysroot=/builds/alliance/risc-v-toolchain/install-native//riscv64-unknown-linux-musl --with-system-zlib --enable-shared --enable-tls --enable-languages=c,c++ --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libsanitizer --disable-nls --disable-bootstrap --src=/builds/alliance/risc-v-toolchain/riscv-gcc --disable-multilib --with-abi=lp64 --with-arch=rv64imac --with-tune=rocket 'CFLAGS_FOR_TARGET=-O2 -mcmodel=medany -march=rv64imac -mabi=lp64 -D __riscv_soft_float' 'CXXFLAGS_FOR_TARGET=-O2 -mcmodel=medany -march=rv64imac -mabi=lp64 -D __riscv_soft_float'
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 10.1.0 (GCC) 可以看到现在所使用的这个工具链支持的架构应该是rv64imac,因此我疑惑于为什么在rtconfig.py中指定 回到如何支持新工具链的问题上。 删除‘components/libc/compilers/musl/SConscript’中的 最后关于下载最新工具链,汪老师要求一个保持lastest别名的工具链,没有找到现有的,我想在找到现在ci中工具链来源之前只能考虑维护一个编译配置或使用官方工具链。对于该ci中的工具链,如我前文所属,对于其是否真的使用了硬件浮点保持怀疑。 可以考虑在下载工具链时排序获取最新riscv linux musl gcc,提供一个下载脚本避免用户自己输入日期等信息。 #!/bin/bash
# 下载网页内容
wget -qO- https://mirror.nju.edu.cn/riscv-toolchains/release/riscv-collab/riscv-gnu-toolchain/LatestRelease/ |
# 使用 grep 提取符合正则表达式的文件名
grep -oP 'riscv64-musl-ubuntu-\d{2}\.\d{2}-gcc-nightly-\d{4}\.\d{2}\.\d{2}-nightly\.tar\.xz' |
# 获取最新的文件名
sort | tail -n 1 |
# 使用 wget 下载最新的文件
xargs -I {} wget https://mirror.nju.edu.cn/riscv-toolchains/release/riscv-collab/riscv-gnu-toolchain/LatestRelease/{} 工作尚未完成。进行comment的原因是怀疑之前的riscv64的qemu并没有成功使用FPU。包括在d1芯片、d1s芯片、cv18xx_risc-v中的rtconfig.py目标ABI都是lp64。 更新:
经过尝试,我认为想要在不更改项目代码的情况下改用新工具链可能是做不到的。由于该工具链缺少libc_kernel.a,因此在链接时会出现重定位截断错误的情况,造成这个问题的原因大可能由于使用了libc.a中的函数造成某些符号的地址超出了重定位的范围,在不知道老工具链中liibc_kernel.a的源码的情况下,无法搞出新的libc_kernel.a,那么就只可能尝试修改内存布局?(这方面不太了解)。 尝试libc_kernel.a加入到新的工具链的sysroot/lib下也是不可行的,如前文所述,这两个目标ABI是不一样的。 因此,即使找到了当前ci中工具链的新版本,如果没有对应的源码,依然不建议使用,毕竟如前文所述,对于ci中这个工具链是否真的启用了浮点数我保持合理的怀疑(实际上持否定态度),处理器带有fpu而不使用硬件浮点,这是不应该接受的。 |
我完全不能够理解,但是这个旧工具链竟然确实是编译出了带有浮点指令的程序,尽管它只能指定lp64的ABI而不能指定lp64f与lp64d。这实在是一个太出乎意料的工具链,我真是完全不能够理解。现在缺乏编译器知识的我是足够困惑的。有没有大佬能点拨一下为什么一个-mabi=lp64的工具链,在编译时接收的ABI参数也是lp64,却能够编译出带有浮点指令的程序。 话说回来,我是通过移植whetstone浮点计算基准测试确定了这一点。在QEMU中运行这种基准测试并不是好的做法,但以下结果应该仍然能够反映出结论。 rt smart:使用这个ci中的musl工具链,编译器信息如上条评论。 关闭fpu并设置rtconfig.py中-march=rv64imac, 保持-mabi=lp64
开启fpu,改回rtconfig.py的-march=rv64ima, 保持-mabi=lp64
rt-thread standard: 使用的工具链是一个挺正常的工具链,
可以看到它的 关闭fpu并修改rtconfig.py中-march=rv64imac, -mabi=lp64
开启fpu并修改rtconfig.py中-march=rv64imafdc, -mabi=lp64d。(如果不修改mabi理所当然地会报错,所以这个musl工具链令我头疼)
对比结果显然得出结论,该ci中的musl库工具链能够在lp64的目标ABI下编译出能够运行的带有浮点指令的程序。 我应该单独提一个issue关于这个问题。 |
@ZhaoCake 请问您是负责做工具链的吗?我提这个问题的原因是因为我发现用 所以我的本意是希望 RTT 那边是否可以发布一个统一的链接,或者把 https://github.com/RT-Thread/toolchains-ci/releases/download/v1.7/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2 这个链接更新到最新的版本就好。 我看您研究了很多,不知道是不是 RTT 那边已经解决了这些问题了吗? 其实我只是想要 RTT 公布一个统一的最新版本的链接给社区用。 |
您好,我是在试图使用gdb调试qemu启动的rt smart时遇到由于工具链版本过低导致无法使用gdb调试的情况。这可以通过开启一个docker或者降低我系统版本库的方式解决。不过我看到您提出的这个issue所以尝试使用新工具链,不过显然出现了问题。 请问您可以提供新版本工具链的获取方式吗?或者更新在ci utest中。十分感谢。 |
ci test 那个应该有专人维护我就不去随便动了。 |
看下来有些迷糊,首先对rt-smart用的musl gcc工具链做些澄清,免得混淆了:
|
所以建议最好还是把名称中的目标core 直接从 |
感谢提供的新工具链,刚刚尝试了,已经可以用新工具链的gdb启动调试。不过这个工具链构建的时候依赖于python2.7,这在版本较新的Linux系统中是没有的,通过动态库软链接的方式可以对原系统影响尽量小地引入python2.7的依赖。解决方法如下,后续的文档或许可以用得到。 报错内容:
考虑使用pyenv安装一个python2.7到虚拟环境中,然后把这个环境下的动态链接库链接到 pyenv install 2.7.18 # pyenv的安装各个系统可能不同故略去
ln -s ~/.pyenv/versions/2.7.18/lib/libpython2.7.so.1.0 /usr/local/lib 然后可以正常启动gdb进行调试。 此方法适用于本身不带python2.7的系统。 |
@ZhaoCake 请问你用的是 OR 目前看起来似乎应该用熊大提供的。 |
先前使用的是您提供的工具链,刚才使用了熊大提供的工具链,也同样需要 但从构建日期上来看,汪老师提供的 (https://download.rt-thread.org/download/rt-smart/toolchains/riscv64gc-linux-musleabi_for_x86_64-pc-linux-gnu_222725-8a397096c1.tar.bz2) 工具链更新,不知道是不是出于稳定性的考量没有定向到latest。
|
@BernardXiong 尝试了你说的 ci 推送的有固定地址的 riscv版本:https://download.rt-thread.org/download/rt-smart/toolchains/riscv64gc-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2。发现编译内核还行,但是编译 app 然后放到 ext4 文件系统下运行就会 crash 但是用 https://download.rt-thread.org/download/rt-smart/toolchains/riscv64gc-linux-musleabi_for_x86_64-pc-linux-gnu_222725-8a397096c1.tar.bz2 这个就可以编译 app。 正如 @ZhaoCake 分析的,
所以那个 latest 的版本是不是还不是最稳定的?要不要更新一下? |
原来都是这样啊,我去check下哈 |
RT-Thread Version
master
Hardware Type/Architectures
N/A
Develop Toolchain
Other
Describe the bug
以前都是参考的 .github/workflows/action_utest.yml 里写的链接。但是今天发现文件里的链接
https://github.com/RT-Thread/toolchains-ci/releases/download/v1.7/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2
并不能用来编译 app。所以想知道官方的 URL。可以得到同时可以用于编译 kernel 和 app 的 musl gcc for riscv
而且最好是保持一个 latest 的 alias,就像现在 .github/workflows/action_utest.yml 里写的
https://github.com/RT-Thread/toolchains-ci/releases/download/v1.7/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2
一样。这样用户只要记住这个名字就好了。Other additional context
No response
The text was updated successfully, but these errors were encountered: