安装环境:
准备: binutils-2.37 源码包, gcc-11.1.0 源码包, newlib-4.1.0 源码包
设置安装环境目录
export RISCV=/usr/xx/
编译 binutils,准备: binutils-2.37 源码包
mkdir binutils-build
cd binutils-build
../binutils-2.37/configure --target=riscv32-unknown-elf --prefix=$RISCV/usr --disable-werr
make -j4 && make install
编译 GCC, 准备:gcc-11.1.0 源码包
mkdir gcc-build
cd gcc-build
../gcc-11.1.0/configure --target=riscv32-unknown-elf --prefix=$RISCV/usr --with-abi=ilp32 --with-arch=rv32ic --enable-languages=c,c++
或者
../gcc-11.1.0/configure --prefix=$RISCV/usr --target=riscv32-unknown-elf --with-sysroot=$RISCV/usr/riscv32-unknown-elf --with-abi=ilp32 --with-arch=rv32imac --with-newlib --enable-languages=c,c++ --with-system-zlib --disable-shared --disable-threads --disable-tls --disable-libmudflap --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libgomp --disable-nls --enable-checking=yes --disable-multilib CFLAGS_FOR_TARGET="-Os -ffunction-sections -fdata-sections" CXXFLAGS_FOR_TARGET="-Os -ffunction-sections -fdata-sections"
修改 Makefile 搜索 -O2 -g 修改成 -Os 去掉 -g
make all-gcc all-target-libgcc -j8
make install-gcc install-target-libgcc
(make all && make install)
架构选择:
# --with-abi=ilp32 --with-arch=rv32imc
# --with-abi=ilp32f --with-arch=rv32imfc
# --with-abi=ilp32d --with-arch=rv32imfdc
编译 newlib, 准备: newlib-4.1.0 源码包
mkdir newlib-build
cd newlib-build
../newlib-4.1.0/configure --target=riscv32-unknown-elf -disable-nls --enable-newlib-io-long-long --enable-newlib-io-long-double --enable-newlib-io-c99-formats --disable-libssp --prefix=$RISCV/usr
或者
../newlib-4.1.0/configure --target=riscv32-unknown-elf -disable-nls --enable-newlib-io-long-long --enable-newlib-io-long-double --enable-newlib-io-c99-formats --disable-libssp --prefix=$RISCV/usr CFLAGS_FOR_TARGET="-Os -ffunction-sections -fdata-sections" CXXFLAGS_FOR_TARGET="-Os -ffunction-sections -fdata-sections"
--enable-newlib-multithread
make -j4 && make install
可选
nano-build, nano 库编译, 一个轻量级的运行库,直接用 newlib-4.1.0 源码包编译
mkdir nano-build
cd nano-build
../newlib-4.1.0/configure --target=riscv32-unknown-elf --prefix=$RISCV/usr --disable-newlib-supplied-syscalls --enable-newlib-reent-check-verify --enable-newlib-reent-small --enable-newlib-retargetable-locking --disable-newlib-fvwrite-in-streamio --disable-newlib-fseek-optimization --disable-newlib-wide-orient --enable-newlib-nano-malloc --disable-newlib-unbuf-stream-opt --enable-lite-exit --enable-newlib-global-atexit --enable-newlib-nano-formatted-io --disable-nls CFLAGS_FOR_TARGET="-Os -ffunction-sections -fdata-sections" CXXFLAGS_FOR_TARGET="-Os -ffunction-sections -fdata-sections"
make -j4
注意:不需要make install
拷贝当前目录下的libc.a libg.a libgloss.a libm.a 到对应的安装目录并改名为libc_nano.a libg_nano.a libgloss_nano.a libm_nano.a
编译用户程序时 可以使用 选项 -specs=nano.specs --specs=nosys.specs,生成无系统调用版本
编译 qemu, riscv 程序运行模拟器。准备: qemu-6.0.0 源码包
mkdir qemu-build
cd qemu-build
../qemu-6.0.0/configure --target-list=riscv32-softmmu,riscv32-linux-user --prefix=$RISCV/usr
make -j4 && make install
编译 gdb, 调试工具。准备: gdb-10.2 源码包
../gdb-10.2/configure --target=riscv32-unknown-elf --prefix=$RISCV/usr
make -j4 && make install
博主太厉害了!