x86 Linux系统下构建交叉编译工具(1)

本文参考以下文章:

建立交叉编译器 for arm (binutils-2.17 gcc-3.4.6 glibc-2.3.6)

特此致谢!

一直以来就很好奇:交叉编译工具d到底是怎么制作出来的?之前做嵌入式工程师的时候,都是拿过厂家现成的BSP中提供的交叉编译工具直接使用,虽然也想过这个问题,但最终都被主研发任务“湮没”了。近几年成为内核工程师后越来越觉得这个问题是核心和关键的,可以说这是内核系统界“根本的问题”。因此,终于下定决心、同时也有时间能踏下心来把这个问题详细研究一下,至少自己实际做出一个交叉编译工具。

一、准备工作

1. 下载源码(压缩)包

根据参考文章中的提示,需要先准备以下几个包:binutils、gcc、glibc以及kernel。记得其它文章中提到过,这几个工具需要互相配合,要求版本要匹配,否则可能会出现错误。这里选择LFS(Linux From Scratch)中给出的各个包,应该是LFS之前已经探索好的。链接如下:Chapter 3. Packages and Patches

以上4个组件分别如下:

  • Binutils (2.41) - 26,139 KB:

Home page: Binutils- GNU Project - Free Software Foundation

Download: https://sourceware.org/pub/binutils/releases/binutils-2.41.tar.xz

MD5 sum: 256d7e0ad998e423030c84483a7c1e30

  • GCC (13.2.0) - 85,800 KB:

Home page: GCC, the GNU Compiler Collection- GNU Project

Download: https://ftp.gnu.org/gnu/gcc/gcc-13.2.0/gcc-13.2.0.tar.xz

MD5 sum: e0e48554cc6e4f261d55ddee9ab69075

SHA256 sum:

  • Glibc (2.38) - 18,471 KB:

Home page: https://www.gnu.org/software/libc/

Download: https://ftp.gnu.org/gnu/glibc/glibc-2.38.tar.xz

MD5 sum: 778cce0ea6bf7f84ca8caacf4a01f45b

  • Linux (6.4.10) - 134,621 KB:

Home page: The Linux Kernel Archives

Download: https://www.kernel.org/pub/linux/kernel/v6.x/linux-6.4.10.tar.xz

MD5 sum: 2e19e7badc3d4b080bf6b4864912f2d3

分别下载这4个源码压缩包。

2. 构建工程目录

按照参考文章中的步骤,先建立专门构建交叉编译工具的目录,这里为了更方便和接近,与之取相同的名称,如下所示:

$ mkdir cross-compiler
$ cd cross-compiler/
~/cross-compiler$ mkdir build-tools 
~/cross-compiler$ tree ./
./
└── build-tools

1 directory, 0 files

然后建立存放内核源码的目录,如下所示:

~/cross-compiler$ mkdir kernel
~/cross-compiler$ ls
build-tools  kernel

将下载的内核源码包放在kernel/下,其它3个源码包放入build-tools/。如下所示:

~/cross-compiler$ mv ~/下载/binutils-2.41.tar.xz ./build-tools/
~/cross-compiler$ mv ~/下载/gcc-13.2.0.tar.xz ./build-tools/
~/cross-compiler$ mv ~/下载/glibc-2.38.tar.xz ./build-tools/
~/cross-compiler$ mv ~/下载/linux-6.4.10.tar.xz ./build-tools/
~/cross-compiler$ 
~/cross-compiler$ tree
.
├── build-tools
│   ├── binutils-2.41.tar.xz
│   ├── gcc-13.2.0.tar.xz
│   └── glibc-2.38.tar.xz
└── kernel
    └── linux-6.4.10.tar.xz

2 directories, 4 files

3. 准备内核头文件

(1)解压内核源码

进入cross-compiler/kernel目录。运行以下命令解压内核源码:

tar xvf linux-6.4.10.tar.xz

解压之后内容如下:

$ ls 
linux-6.4.10  linux-6.4.10.tar.xz

(2)拷贝内核头文件

在系统/usr/local/下建立arm/arm-linux/include目录。如下所示:

$ mkdir -p /usr/local/arm/arm-linux/include
$ ls /usr/local/arm/arm-linux/include/ -d
/usr/local/arm/arm-linux/include/

将下载解压之后的kernel源码即linux-6.4.10/下的(部分)头文件拷贝到/usr/local/arm/arm-linux/include/目录。如下所示:

$ cp -a linux-6.4.10/include/linux /usr/local/arm/arm-linux/include/
$ cp -a linux-6.4.10/include/asm-generic /usr/local/arm/arm-linux/include/

拷贝之后/usr/local/arm/arm-linux/include/下的内容为:

$ ls /usr/local/arm/arm-linux/include/
asm-generic  linux

至此,准备工作就完成了。下一回开始进行各组件的编译构建。

猜你喜欢

转载自blog.csdn.net/phmatthaus/article/details/132354737