如果我的记录有错误,请及时提醒!谢谢
跟着书操作,版本太老出现很多问题,所以到后面直接抄书上步骤了,目的就是了解一下交叉编译链的构建过程
1.什么是交叉编译工具
交叉开发工具链可以实现编译、链接、处理或者调试等功能,可以在linux主机上编译生成ARM、MIPS等架构上运行的程序
2.常用的工具链软件
Binutils:二进制处理工具,包括连接器、汇编器等目标程序处理工具
GCC:支持C/C++语言编译和Java等编程语言
Glibc:应用程序编程的函数库软件包,可以编译生成静态库和共享库
Gdb:调试工具,对程序源码进行调试
3.需要准备的安装包
安装包下载地址:
kernel下载地址:The Linux Kernel Archives
点进去找到和你主机系统一样的内核版本(这里我也不清楚其它版本会不会出现什么问题,具体可以自己试试)
GCC Glibc binutils gdb下载地址:ftp://ftp.gnu.org/gnu/
进入网站找到gcc、glibc对应的版本稍微新一点的
正文开始
1.建立工作目录
工作目录是我自定义的命令如下:
cd /; sudo mkdir arm;
cd arm; sudo mkdir armlinux
cd armlinux; sudo mkdir build-tools kernel tool
目录作用如下:
build-tools: 存放binutils gcc glibc 等源代码和用来编译源代码的目录
kernel:存放内核源代码
tools:用来存放编译好的交叉编译工具和库文件
2.建立环境变量
需要定义经常使用的路径,避免重复冗长命令。我是写到 /etc/profile 里面了,也可以直接 export ,或者写到bashrc上去。具体区别如下:
a.写到profile里无论是通过控制台还是图形界面启动程序,都会自动执行该文件
b.写到bshrc里,通过shell启动程序会加载,通过图形界面环境启动是,这些环境变量不 可用
c.export声明的变量是临时变量,注销或者更换控制台这些变量就不存在了
命令如下:
sudo gedit /etc/profile 或者 sudo vim /etc/profile
在文件最后一行加入:
保存,输入source /etc/profile 会立即生效,不然只能在下次登录时环境变量生效
3.编译、安装Binutils
这是我安装binutils出现的问题:
为了确保安装过程不出现问题:
a.首先更新以下make,我是手动下载
b.然后安装texinfo
输入:sudo apt-get install texinfo
现在开始安装binutil-2.38,输入下面命令
安装成功显示:
解释configure:configure原理 - bw_0927 - 博客园
--target:指定生成的是arm-linux工具
--prefix:指出可执行文件安装的位置
4.获得内核头文件
把下载的linux-4.9..229.tar.gz放到创建的kernel目录下,解压
ARCH=arm: 表示以arm体系结构,不写默认是CPU的结构
CROSS_COMPILE=arm-linux- :表示以arm-linu-为前缀的交叉编译器
显示,安装蓝色的部分按enter键,选择处理器的类型,因为我没有板子哈哈哈,只能照着书上写的选,板子在心中。
5.编译安装boot-trap gcc
目的:建立arm-linux-gcc工具(现在这个gcc没有glibc的支持)
命令如下:
emm最后发现要修改的t-linux文件找不到,所以又下了一个老版本
然后输入:
第一次安装ARM交叉编译工具,没有支持glibc库的头文件,需要修改t-linuxwen文件,加入些参数,屏蔽使用头文件,否则默认使用/usr/include头文件
还是失败,你会发现你当前系统的gcc版本大于这个gcc版本,编译的时候报错,很多函数的宏定义已经变了,试了好几个版本都有不同问题所以决定跳过。。。反正只是了解过程
安装完成后,在/arm/armlinux/tools/bin下查看,arm-linu-gcc等工具是否以及生成
6.建立glibc
解压下载的glibc-2.3.2.tar.gz glibc-;inuxthreads-2.3.2.tar.gz
7.编译安装完整gcc
安装glibc后,需要重新编译来支持交叉glibc,和同时让它支持c++语言
8.制作交叉调试器
下载gdb-6.5安装包
输入命令: