一、准备工作:

工作环境:宿主机:ubuntu10.04 linux-2.6.32-24-generic i686 gcc-4.4.3

目标机:mips32

软件包版本:binutils-2.19.1

gcc-4.4.0

glibc-2.9

linux-2.6.29.1

gmp-4.3.0

mpfr-2.4.2

glibc-2.9-libgcc_eh-1.patch

glibc-ports-2.9

工作目录:---home

|---crosstool

|---bin//存放最终的可执行文件和lib

|---headers

|---mips

|---4.4.0

|---bin

|---……

|---binutils//对binutils编译

|---build

|---binutils-2.19.1//源码

|---gcc

|---build

|---gcc-4.4.0

|---glibc

|---build

|---glibc-2.9

|---linux

|---linux-2.6.29.1

|---qemu//存放模拟器

二、编译步骤:

1、编译binutils

lsq$:cd /home/crosstool/binutils/build EOF

lsq$:../binutils-2.19.1/configure --target=mips-linux --prefix=/home/crosstool/bin/mips/4.4.0 --disable-nls --disable-werror --disable-multilib –enable-shared

EOF

lsq$:make all-gcc && make install-gcc EOF

lsq$:make all-target-libgcc && make install-target-libgcc EOF

Done!

结果:能够在目标文件夹查看到生成的可执行文件。如:mips-linux-as

注:各参数意义可查看binutils的INSTALL文件;

蓝色部分是必须的,不能仅仅用“make && make install”,否则会报找不到文件错误;

红色部分是必须的,不能省去,否则在编译glibc的时候会出现“找不到-lgcc”错误 .

具体原因还没研究清楚?

2、编译GCC--P1

首先将GMP和MPFR两个文件夹解压并重命名为gmp,mpfr后复制到GCC源文件夹中。

Lsq$:../gcc-4.4.0/configure --target=mips-linux --prefix=/home/crosstool/bin/mips/4.4.0/ --without-headers --with-newlib --with-float=soft --with-gnu-as --with-gnu-ld --disable-nls --disable-decimal-float --disable-libgomp --disable-multilib --disable-libssp --disable-shared --disable-threads --disable-libmudflap --disable-libstdcxx-pch --disable-libffi enable-languages=c EOF

lsq$:make && make install EOF

Done!

结果:bin文件夹下会多了mips-linux-gcc等可执行程序

增加环境变量:export PATH=$PATH:/home/crosstool/bin/mips/4.4.0/bin 之后在终端输入mips-linux-gcc 会提示“没有输入文件”,否则则是没有安装成功或者环境变量没有设置成功。

3、编译linux内核--实际上只是复制linux内核头文件

这一步最好在第一次编译完GCC之后进行,否则会提示“mips-linux-gcc命令不存在”的错误--虽然对结果可能最终没什么影响

lsq$: make ARCH=mips CROSS_COMPILE=mips-linux- INSTALL_HDR_PATH=/home/crosstool/bin/headers headers_install

EOF

Done!

这一步只是复制了linux内核头文件,不过对于较低版本的linux(如2.24)则需要设置好参数后编译内核。

4、编译GLIBC--出问题最多的一步

将glibc-ports-2.9解压后重命名为ports并复制到Glibc的源文件夹中,该文件夹主要用于针对mips架构的一些移植等。

重要:对glibc加上glibc-2.9-libgcc_eh-1.patch补丁,否则会报“无法找到-lgcc_eh”错误,当然也可以按如下网址对相关配置文件进行修改:http://trac.cross-lfs.org/browser/patches/glibc-2.9-libgcc_eh-1.patch?rev=dbb2738d4c11387e45faceea1a42cc60fac752f1 关于lfs的一个补丁说明,不过手动修改挺麻烦的,还可能改错。

在编译根目录下建立config.cache文件,并加入以下内容:

libc_cv_forced_unwind=yes

libc_cv_c_cleanup=yes

libc_cv_mips_tls=yes

libc_cv_gnu99_inline=yes

以增加对NPTL的支持,当然也可以不加入该文件而在配置时加入相关的配置参数

lsq$:BUILD_CC=gcc CC=mips-linux-gcc AR=mips-linux-ar LD=mips-linux-ld RANLIB=mips-linux-ranlib ../glibc-2.9/configure --host=mips-linux target=mips-linux prefix="/home/crosstool/bin/mips/4.4.0/mips-linux" --with-headers=/home/crosstool/bin/headers/include --with-binutils=/home/crosstool/bin/mips/4.4.0/bin --with-tls --with-__thread --enable-sim --enable-nptl --enable-add-ons --enable-kernel=2.6.29.1 --disable-profile --without-gd --without-cvs –cache-file=config.cache EOF

编译完成后将会在prefix目录下生成相关文件。

注:网络上说需要修改$prefix$/lib/libc.so文件,实际上目的只是让ld能查找到它需要的库,所以一般将路径中的文件夹前缀去掉,只留下文件名--即在当前文件所在文件夹查找;而由于我在编译时一直使用绝对路径,故这里就使用本来就有的绝对路径而不修改。

在编译math中fpu相关文件时会出现某个错误(错误描述居然没记下来……),此则可加上--without-fp而避免此错误,当然,可能编译器少了对浮点的支持。

这一步还可能出现各种错误。

5、编译GCC-P2--所需时间最长

只要前面没有出现错误或者出现错误后不是投机而让其蒙混编译通过的话这一步应该不会出现错误。

Lsq$:../gcc-4.4.0/configure --target=mips-linux --prefix=/home/crosstool/bin/mips/4.4.0/ --with-float=soft --enable-languages=c,c++ --enable-threads=posix --enable-c99 --enable-long-long --enable-shared --enable-__cxa_atexit --enable-nls --enable-static –with-headers=/home/crosstool/bin/headers/include EOF

Done!

注:此步必须加上内核头文件参数(而不是像某些网络资料上那样没有加),否则会报文件找不到错误,如“……/linux/errno.h:找不到该文件”。

linux搭建交叉编译器,手把手教你一步一步搭建mips-linux-gcc-4.4.0交叉编译工具相关推荐

  1. 嵌入式LINUX搭建arm环境,手把手教你嵌入式ARM开发环境搭建

    原标题:手把手教你嵌入式ARM开发环境搭建 1. 安装,配置,启动FTP服务 · 安装FTP: sudo apt-get install vsftpd · 修改vsftpd的配置文件/etc/vsft ...

  2. 手把手教你入门Git --- Git使用指南(Linux)

    手把手教你入门Git - Git使用指南(Linux) 系统:ubuntu 18.04 LTS 本文所有git命令操作实验具有连续性,git小白完全可以从头到尾跟着本文所有给出的命令走一遍,就会对gi ...

  3. 微商城搭建教程,手把手教你开通自己的线上/定制微商城!

    微商城应该如何开通和搭建?这个问题一直困扰着很多商家,今天就为大家整理一份关于微商城从开通到搭建的具体教程,手把手教商家搭建自己的线上微商城. 微商城搭建教程,手把手教你开通自己的线上微商城! (一) ...

  4. linux编译freebsd,freebsd下作x86/arm linux的交叉编译器

    freebsd下作x86/arm linux的交叉编译器 2009-05-13 01:40:08来源:未知 阅读 () 以纯粹的源码编译交叉编译器,还是头一遭.以往都是利用目标主机上的头文件和库文件作 ...

  5. ☀️手把手教你HALCON在VS2017中搭建C++环境☀️《❤️记得收藏❤️》

    ☀️手把手教你HALCON在VS2017中搭建C++环境☀️<❤️记得收藏❤️>

  6. 手把手教你用FineBI,快速搭建可视化驾驶舱

    相信大家最近都看过许多关于管理驾驶舱的文章,有些驾驶舱数据分析页面确实是狂拽炫酷得不行,但是对于这些页面具体的制作过程,怎么样最佳展现数据的业务价值,想必大家还是有些云里雾里. 本篇文章以销售管理驾驶 ...

  7. 手把手教你生信分析平台搭建

    宏基因组按:此系列教程为基因学苑的王通老师原创发布.非常适合刚接受生信,又有服务器管理需求的小伙伴做为入门材料,一共20篇文章,内容涉及服务器选购.Linux系统安装.用户管理.软件安装.软件兼容环境 ...

  8. 手把手教你:如何让Windows恋上Linux bash

    4月7日,微软开始向用户推送Windows 10 biuld 14316预览版,该版本不仅在Cortana跨平台支持.Edge浏览器支持和虚拟桌面方面得到了优化,还能够原生支持Linux bash. ...

  9. linux内核驱动ldd3_手把手教Linux驱动7内核互斥锁

    互斥体概述 信号量是在并行处理环境中对多个处理器访问某个公共资源进行保护的机制,mutex用于互斥操作.信号量的count初始化为1,down()/up()也可以实现类似mutex的作用. mutex ...

最新文章

  1. Comparison of Laser SLAM and Visual SLAM
  2. HTML做3D立体特效,html5 3D立体粒子波浪动画特效代码
  3. 数据中心柴油发电机组功率
  4. 图对抗攻击及防御算法种类
  5. 实现滚到div时淡入效果
  6. VS Code (visual studio code) VSC 编辑器(微软出品,js开发的编辑器)
  7. python动态图表变化_Python数据可视化 pyecharts实现各种统计图表过程详解
  8. Apache Mina框架自身实现的过滤器
  9. windows7 nmap 命令行版本
  10. 贪吃蛇c加加代码_贪吃蛇 C语言源代码
  11. 21天学通c语言pdf百度云,21天学通C语言「pdf+epub+mobi+txt+azw3」
  12. 【扫码登录的逻辑以及关于扫码登录的思考】
  13. 国内PC版64位谷歌浏览器离线下载安装地址
  14. 利用tftpd32拷贝windows文件到虚拟机ubuntu中
  15. labview中DAQ采集多个数据通道(温度传感器)(TTL信号的曲轴位置传感器)总结
  16. [附源码]SSM计算机毕业设计st音乐网站论文JAVA
  17. 2021-12-11 工作记录--Wechat applet-结合<van-popup>和<van-picker> 实现年份、月份下拉选择弹窗+禁止滚动穿透
  18. 微信公众平台开发:JS API支付
  19. Speedoffice(excel)如何快捷隐藏表格内所有空行
  20. 快手公会入驻需要什么条件?

热门文章

  1. markdown入门4--矩阵空格公式方程组
  2. 用 Python 分析今年考研形势
  3. LeetCode 题 - 66. 列表元素加一 python实现
  4. 《深度学习》学习的TIP
  5. php与web网页计算器,php+html实现网页计算器
  6. python go rpc_Go实现简易RPC框架的方法步骤
  7. leetcode —— 29. 两数相除
  8. jupyter notebook代码自动完成功能
  9. 深入理解傅里叶变换的性质:实函数、卷积、相关、功率谱、频响函数
  10. SH760二自由度系统非周期激励解析法求解