0%

编译OpenWRT(官方版)

本文目的

虽然之前也写过编译OpenWRT的文章,但是由于版本等原因,此次遇到的问题与之前不太一样,特地记录一下。

编译环境

  • Archlinux 64bit
  • GCC v7.2.0
  • Perl v5.26.1

项目源码

项目源码托管在GitHub上,地址如下:**openwrt**。

前提工作

  1. 必装工具
    可以在这里找到目前支持系统的编译工具。

    Archlinux的安装命令如下:

    1
    sudo pacman -S --needed subversion asciidoc bash bc binutils bzip2 fastjar flex git gcc util-linux gawk intltool zlib mercurial make cdrkit ncurses openssl patch perl-extutils-makemaker rsync sdcc unzip wget gettext libxslt boost libusb bin86 sharutils b43-fwcutter findutils
  2. Checkout项目代码

    1
    git clone git@github.com:openwrt/openwrt.git

取得源代码后,需要执行下面的命令,将package全部安装。

1
2
./scripts/feeds update -a
./scripts/feeds install -a

编译

1
2
3
cd openwrt
make menuconfig
make V=s -j1

遇到的问题

出现问题的部分主要是host工具编译出错。主要是因为这些工具之间有相互依赖,某个部分修改后,会引起不兼容的问题。

automake编译报错

Perl版本过高会导致Perl脚本的正则匹配出现问题,在Perl 5中取消了正则匹配的大括号({、}),因此,只需要在相应的文件中,把大括号删掉就行了。

注意:编译报错是由一个tmp文件引起的,因此,需要修改生成tmp文件的源文件,才可以修复错误。

u-boot编译报错

这个错误是由于rsa库版本更新导致的,需要使用这个**补丁文件**进行修复。

修复时,需要将不定文件放在与rsa-sign.c相同目录下执行。

cmake编译错误

这个问题是由于openssl版本引起的,可以使用系统自带的openssl回避这个问题。

在cmake根目录下,手动编译安装,在配置时,需要指明使用系统的库文件。记得修改PATH

1
2
3
./configure --system-libs --prefix=<PATH>/openwrt/staging_dir/host
make
make install

cmake编译错误

这个问题是由于系统缺少JsonCpp库引起的,在系统中安装一下就行了。