一、什么是外部工具链external toolchain

external toolchain就是别人已经预先编译好的工具链。openwrt在构建的时候,第一步是用本机(也就是pc,一般是x64或者x84_64的环境)编译一套交叉编译的工具链(toolchain),第二步才是用这个toolchain去交叉编译在目标机器(target)上运行的内核(kernel)和软件包(packages)。

二、下载外部工具链external toolchain

要根据自己的设备的不同去选择合适的的工具链。
例如我要编译一个LEDE版本的openwrt,在ipq806x平台上运行,那么就用如下链接。
https://downloads.lede-project.org/releases/17.01.0-rc1/targets/ipq806x/generic/
可以根据实际的编译环境和机器平台去下载。
https://archive.openwrt.org/snapshots/trunk/

三、配置外部工具链external toolchain

参考文章:
《Openwrt内部工具链改为外部工具链》
1. make menuconfig 外部toolchain配置如下:



[ * ] Advanced configuration options (for developers)
---> \[ * ]  Toolchain Options
---> \[ * ]  Use external toolchain
  1. 配置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
(./usr/bin ./bin) Toolchain program path
(./usr/include ./include) Toolchain include path
(./usr/lib ./lib) Toolchain library path

3.只需要配置前三项
– 我下载下来的是整个sdk,而不单单是toolchain。
路径在sdk的staging dir下面。
例如:
lede-sdk-17.01.0-rc1-ipq806x_gcc-5.4.0_musl-1.1.15_eabi.Linux-x86_64/staging_dir/toolchain-arm_cortex-a15+neon-vfpv4_gcc-5.4.0_musl-1.1.15_eabi

  • 工具链的目录下有个bin目录,放的就是交叉编译工具。
    例如arm-openwrt-linux-muslgnueabi-gcc
Target name #工具链的名字,例如我的是arm-openwrt-linux-muslgnueabi
Toolchain prefix #工具链的前缀(就是上面的gcc的前缀),例如我的是arm-openwrt-linux-muslgnueabi-
Toolchain root #外部工具链所在的路径,例如我的是~/workplace/4018-openwrt-lede/LEDE-IPQ40XX/lede-sdk-17.01.0-rc1-ipq806x_gcc-5.4.0_musl-1.1.15_eabi.Linux-x86_64/staging_dir/toolchain-arm_cortex-a15+neon-vfpv4_gcc-5.4.0_musl-1.1.15_eabi

四、编译和构建

配置好之后,make 就可以编译和构建了。



五、一些需要注意的事项

  1. 要选择好适合自己的sdk。不同板子,不同的电脑,用到的不一样。
  2. 用外部工具链的好处有几个:
    • 省去编译toolchain的时间,加快编译速度
    • 避免编译工具链时候出错
    • 可以同时保存多个不同的工具链,根据实际情况进行构建不同的固件
  3. 但是也会带来很多问题。
    譬如说,用到一些内容可能prebuilt的工具链中没有,那就要自己编译toolchain了。
    又或者,prebuilt的工具链中一些参数,跟make menuconfig的时候的一些配置的参数冲突了,就要调整。
    我就出现如下的错误
Cannot use CONFIG_CC_STACKPROTECTOR_REGULAR: -fstack-protector not supported by compiler
Makefile:1115: recipe for target 'prepare-compiler-check' failed
make[5]: *** [prepare-compiler-check] Error 1

需要去make menuconfig 把CONFIG_CC_STACKPROTECTOR_REGULAR关闭了才能编译。



http://xzh.i3geek.com

爱唠叨的老鱼

爱唠叨的老鱼

技术经理,个人站长,创业者

0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据