默认编译 openwrt 时会先编译一套 toolchain. 这个步骤耗时较长. 使用外部 toolchain 可以多个 project 共用一套 toolchain , 而且也不重再编译它了. 省时省力.

make menuconfig

[*] Advanced configuration options (for developers) --->

[*] Use external toolchain --->

│ │ --- Use external toolchain                                                                                         │ │

│ │ [ ] Use host's toolchain                                                                                             │ │

│ │ (mipsel-openwrt-linux-uclibc) Target name                                                              │ │

│ │ (mipsel-openwrt-linux-uclibc-) Toolchain prefix                                                        │ │

│ │ (/opt/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2) Toolchain root │ │

│ │ (uclibc) Toolchain libc                                                                                               │ │

│ │ (./usr/bin ./bin) Toolchain program path                                                                    │ │

│ │ (./usr/include ./include) Toolchain include path                                                         │ │

│ │ (./usr/lib ./lib) Toolchain library path                                                                          │ │

编译完在 .config 下可以见到以下变量的定义:

CONFIG_EXTERNAL_TOOLCHAIN=y
# CONFIG_NATIVE_TOOLCHAIN is not set
CONFIG_TARGET_NAME="mipsel-openwrt-linux-uclibc"
CONFIG_TOOLCHAIN_PREFIX="mipsel-openwrt-linux-uclibc-"
CONFIG_TOOLCHAIN_ROOT="/opt/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2"
CONFIG_TOOLCHAIN_LIBC="uclibc"
CONFIG_TOOLCHAIN_BIN_PATH="./usr/bin ./bin"
CONFIG_TOOLCHAIN_INC_PATH="./usr/include ./include"
CONFIG_TOOLCHAIN_LIB_PATH="./usr/lib ./lib"

这些变量在 rules.mk 里起作用.

我使用主 trunk 的 openwrt, 编译 kenrel 时碰到了问题. 在 kernel 的 Makefile 里设置 KBUILD_VERBOSE = 1 看到是交叉编译器没有指定路径. 跟踪到是 rules.mk 里 TARGET_CROSS 只保留了交叉编译器前缀, 没加路径. 改了一下就可以完全编译过了.

diff --git a/rules.mk b/rules.mk
index 0822979..70f3afc 100644
--- a/rules.mk
+++ b/rules.mk
@@ -144,9 +144,9 @@ ifndef DUMPTARGET_PATH:=$(TOOLCHAIN_DIR)/bin:$(TARGET_PATH)elseifeq ($(CONFIG_NATIVE_TOOLCHAIN),)
-      TARGET_CROSS:=$(call qstrip,$(CONFIG_TOOLCHAIN_PREFIX))TOOLCHAIN_ROOT_DIR:=$(call qstrip,$(CONFIG_TOOLCHAIN_ROOT))TOOLCHAIN_BIN_DIRS:=$(patsubst ./%,$(TOOLCHAIN_ROOT_DIR)/%,$(call qstrip,$(CONFIG_TOOLCHAIN_BIN_PATH)))
+      TARGET_CROSS:=$(call qstrip,$(TOOLCHAIN_ROOT_DIR)/bin/$(CONFIG_TOOLCHAIN_PREFIX))TOOLCHAIN_INC_DIRS:=$(patsubst ./%,$(TOOLCHAIN_ROOT_DIR)/%,$(call qstrip,$(CONFIG_TOOLCHAIN_INC_PATH)))TOOLCHAIN_LIB_DIRS:=$(patsubst ./%,$(TOOLCHAIN_ROOT_DIR)/%,$(call qstrip,$(CONFIG_TOOLCHAIN_LIB_PATH)))ifneq ($(TOOLCHAIN_BIN_DIRS),)

Openwrt使用指定版本的toolchain工具链相关推荐

  1. RISCV toolchain编译工具链搭建

    目录 写在前面 1.获取源文件 2.安装相关依赖包 3.修改环境变量 4.编译GCC 写在前面 刚刚接触RISCV编译器,根据网上RISCV toolchain工具链的搭建方法,结合自己体会,写点儿学 ...

  2. 交叉编译工具链建立与常识

    交叉编译工具链的命名规则 arch [-vendor] [-os] [-(gnu)eabi] arch – 体系架构,如ARM,MIPS,对于MIPS可能还分大端模式mips或者小端模式mipsel: ...

  3. 树莓派学习笔记——交叉编译工具链

    0.前言 [1]为什么要使用交叉编译     交叉编译工具较快开发的速度.树莓派中已经安装了gcc工具链,可在树莓派中直接编译源代码生成可执行文件.于此同时,PC机上也可使用gcc工具链生成可执行代码 ...

  4. 嵌入式 配置arm工具链

    嵌入式 配置arm工具链 一.简述    记--在Ubuntu18.04配置4.4.1版本的arm工具链,使用arm工具链编译程序生成的可执行文件可以在开发板运行.         工具链:链接:ht ...

  5. 交叉编译知识解析(一) —— 交叉编译和交叉工具链

    一.交叉编译简介 1.什么是交叉编译 1.1 本地编译 解释什么是交叉编译之前,先要明白一个概念:本地编译 我们之前常见的软件开发,都是属于本地编译:在当前的PC下,x86的CPU下,直接编译出来程序 ...

  6. 【编译原理】交叉工具链详解

    1.嵌入式开发模型-交叉开发 在嵌入式开发过程中有宿主机和目标机的角色之分,宿主机是执行编译.链接嵌入式软件的计算机,目标机是运行嵌入式软件的硬件平台.在宿主机执行编译的流程如下: 而所谓的交叉编译就 ...

  7. 【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705 参考博客 : [嵌入式开发]嵌入式 开发环境 (远程 ...

  8. 香橙派嵌入式arm开发板下载交叉编译工具链说明

    香橙派开发板以处理器分类,包含全志H2.全志H3.全志H5.全志H6等系列,下文以全志H3芯片的开发板为例,对交叉编译工具链的下载进行说明: 1) orangepi-build第一次运行的时候会自动下 ...

  9. git指定版本openwrt源码_[OpenWrt Wiki] LEDE源代码

    LEDE源代码 LEDE项目发端于r49258版本的OpenWrt,其源代码被保存在一个包含了所有由OpenWrt项目产生的分支和版本的Git树中.在导入源代码时,树被归一化,并对提交者名称和邮件地址 ...

  10. Openwrt在AR9331交叉编译工具链

    目前在用AR9331进行开发,该CPU是MIPS.在网上下载的MIPS的linux交叉编译工具编译出来不能用,在AR9331上运行时,提示"main" 找不到,估计是交叉编译工具链 ...

最新文章

  1. Linux课程第十三天学习笔记
  2. 某石油公司100-500人办公网络方案设计
  3. 3.2.5 端到端的学习
  4. 【XSS】延长 XSS 生命期
  5. 最小生成树(Prim、Kruskal)算法,秒懂!
  6. 存储过程学习笔记(一)
  7. 字节跳动28岁程序员退休:我只想做一个自由的“废物”
  8. js控制scss的变量_web前端:js如何操作sass里的变量及calc 使用sass变量
  9. Linux-0.11内核学习-添加系统调用
  10. Umbraco中根据ID获取IPublishedContent
  11. Linux开发板-串口连接成功后界面空白问题
  12. 有关“重要极限”的经典例题
  13. Android Studio 部分查找快捷键
  14. 获取Excel合并单元格的值
  15. Moto Photon4g 电信3G历程
  16. GAN原理及简单mnist生成图片
  17. Windows8.1设置默认输入法为英文
  18. java中的三种移位运算符
  19. bison flex
  20. Centos - top 命令详解

热门文章

  1. VS2010开发web项目打开后,项目不可用,提示“需要缺少的 Web 组件才能进行加载”
  2. 作为一名优秀的软件测试工程师,需要具备哪些能力?
  3. java get请求参数乱码_java web项目get,post请求参数中文乱码解决
  4. 山东计算机软考题库,软考习题库
  5. 为什么抖音网红城市都在西部?
  6. kdj指标主要看哪个值_kdj指标中三者的关系是什么?
  7. 基于simhash的短文本去重
  8. cadence的工艺角仿真、蒙特卡洛仿真、PSRR
  9. Axure RP 9操作界面介绍【教程一】
  10. springBoot整合ElasticSearch【代码直接复制可用】(超级详细)