本文主要描述了
- 从开源社区下载源代码软件包
- 在x86平台上创建飞腾CPU交叉编译环境
- 利用交叉编译环境编译FT2000+/64服务器的内核
Host主机平台:x86_64
Target目标平台:飞腾CPU
在x86_64上利用交叉编译环境配置、编译一个dummy.c程序
1. 源代码
源代码名称 | 下载网址 | 下载版本 |
---|---|---|
Linux kernel | https://www.kernel.org | linux-4.19.149.tar.xz |
gnu binutils | ftp://ftp.gnu.org/gnu/binutils/ | binutils-2.35.tar.xz |
gnu gcc | ftp://ftp.gnu.org/gnu/gcc/ | gcc-10.2.0.tar.xz |
gnu glibc | ftp://ftp.gnu.org/gnu/glibc/ | glibc-2.32.tar.xz |
2. 基本流程
- 工程准备工作,包括创建基本目录、拷贝源代码、配置环境变量。
- 编译和安装binutils工具
- 编译和安装一个不完整的gcc
- 生成和安装内核头部文件
- 编译和安装glibc
- 编译和安装一个完整的gcc
3. 工程准备工作
-
定义环境变量
ROOT=
pwd
export PREFIX=$ROOT/project
export HDR_PATH=$PREFIX/usr
export TARGET=aarch64-linux
export TARGET_PREFIX=$PREFIX/$TARGET
export PATH=$PREFIX/bin:$PATH
-
创建基本目录
mkdir -v $PREFIX
mkdir -v $HDR_PATH
-
源代码工作
- binutils
tar xf ./binutils-2.35.tar.xz
mkdir -v ./binutils-2.35/build
- gcc
tar xf ./gcc-10.2.0.tar.xz
mkdir -v ./gcc-10.2.0/build
sed -e '/m64=/s/lib64/lib/' -i.orig ./gcc-10.2.0/gcc/config/i386/t-linux64
tar xf ./mpfr-3.1.4.tar.bz2
mv ./mpfr-3.1.4 ./gcc-10.2.0/mpfr
tar xf ./mpc-1.0.3.tar.gz
mv ./mpc-1.0.3 ./gcc-10.2.0/mpc
tar xf ./gmp-6.1.0.tar.bz2
mv ./gmp-6.1.0 ./gcc-10.2.0/gmp
- linux
tar xf ./linux-4.19.149.tar.xz
- glibc
tar xf ./glibc-2.32.tar.xz
mkdir -v ./glibc-2.32/build
4. 编译和安装binutils工具
../configure --prefix=$PREFIX \
--with-sysroot=$PREFIX \
--target=$TARGET \
--disable-nls \
--disable-werror
make -j 4
make install
5. 编译和安装一个不完整的GCC
../configure --target=$TARGET \
--prefix=$PREFIX \
--with-glibc-version=2.32 \
--with-sysroot=$PREFIX \
--with-newlib \
--without-headers \
--enable-initfini-array \
--disable-nls \
--disable-shared \
--disable-multilib \
--disable-decimal-float \
--disable-threads \
--disable-libatomic \
--disable-libgomp \
--disable-libquadmath \
--disable-libssp \
--disable-libvtv \
--disable-libstdcxx \
--enable-languages=c,c++
make -j 4
make install
cat ../gcc/limitx.h ../gcc/glimits.h ../gcc/limity.h > $PREFIX/lib/gcc/aarch64-linux/10.2.0/install-tools/include/limits.h
6. 生成和安装内核头部文件
make mrproper
make ARCH=arm64 INSTALL_HDR_PATH=$HDR_PATH headers_install
7. 编译和安装glibc
../configure --prefix=/usr \
--host=$TARGET \
--with-sysroot=$PREFIX \
--build=$(../scripts/config.guess) \
--enable-kernel=4.19 \
--with-headers=$HDR_PATH/include \
libc_cv_slibdir=/lib
make
make DESTDIR=$PREFIX install
8.验证上述过程
建立一个最简单的c语言程序dummy.c
int main() { }
用交叉编译命令aarch64-linux-gcc dummy.c
来验证
如果发生错误请用aarch64-linux-gcc -v dummy.c
来查找问题
9.注意事项
- 配置和编译不要直接在源代码中进行,最好另外创建build目录。
- 所有过程不要用root用户,而用普通用户来操作。除非x86平台上的操作系统本身缺少相应的软件包,需要安装。
- 以上创建的交叉编译环境,仅仅可以针对glibc基础库的应用程序进行编译;如果需要C++库、多线程库的支持,还需要额外进行相应库的工作。