Linux编译OpenWrt的悲催过程附带上别人发的教程

编译OpenWrt中

首先来说下编译的最大感受:一定要早上编译啊,这个截图是下午的。早上的速度很快的。

  1. 搭建编译环境。编译建议在Linux下进行。我的系统是Linux mint 17,执行以下命令,构建编译环境:

    sudo apt-get update

    sudo apt-get install git-core build-essential gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev gawk asciidoc libz-dev libssl-dev

  2. 获取openwrt源码。在当前用户主目录下执行

    git clone git://git.openwrt.org/openwrt.git

    等待代码下载。结束后,目录下会出现openwrt文件夹。

  3. 配置软件源。进入openwrt目录,执行

    ./scripts/feeds update -a

    ./scripts/feeds install -a

  4. 检查编译环境是否完整:

    make defconfig

    make prereq

    根据提示信息安装需要的软件包。如果提示类似

    “tmp/.config-package.in:22022:warning: multi-line strings not supported”

    的信息,打开 openwrt/tmp/.config-package.in,定位到对应行,添上丢掉的一个引号就可以了。

  5. 编译选项:

    执行 make menuconfig,根据路由器情况,选择 Target System 和 Subtarget。如意云一代和极壹S的 Target System 均为 Ralink RT288x/RT3xxx 。对于Subtarget ,前者为 MT7620n based boards ,后者为 MT7620a based boards。

    其他选项根据个人喜好选择。一般来说要选中LuCI界面,选中中文语言包等等。

  6. 开始编译:

    执行 make -j2 V=s 进行编译。-j后面的数字是电脑物理CPU数量加一。V=s可以显示出编译的详细信息。首次编译大概需要几个小时的时间。

  7. 错误排查:

    编译失败,一般有两种情况:

    1.代码下载链接失效。首次编译时,编译程序会实时从网上下载一些软件包的代码。如果下载链接失效,编译就会失败。这时需要根据软件包的名称,从网上自行下载,然后放在 openwrt/dl/ 目录下,执行 make -j2 V=s 继续编译即可。

    2.软件包自身有问题。这时重新执行 make menuconfig ,取消对应软件包选中即可。这种情况比较少见,目前已知的有 tor 等。

    编译成功,但没有生成固件。这种情况一般是因为选中的软件包过多,导致固件大小超过16MB。重新执行 make menuconfig,去掉一些软件包,重新执行编译即可。

  8. 8

    得到固件。在排除了所有错误后,现在终于得到了固件。对于如意云RY-1,固件在 openwrt/bin/ramips 目录下,形如

    openwrt-ramips-mt7620n-rt-n14u-squashfs-sysupgrade.bin

    openwrt-ramips-mt7620n-wrtnode-squashfs-sysupgrade.bin

    openwrt-ramips-mt7620n-mlw221-squashfs-sysupgrade.bin

    openwrt-ramips-mt7620n-wr8305rt-squashfs-sysupgrade.bin

    等等。

    openwrt固件编译教程

    错误汇总:

    错误1:

    1. root@i-Ubuntu:~/OpenWrt/openwrt# ./scripts/feeds update -a  
    2. Updating feed 'packages' from 'https://github.com/openwrt/packages.git' ...  
    3. Already up-to-date.  
    4. Create index file './feeds/packages.index'   
    5. awk: include/scan.awk: line 21: function asort never defined  
    6. awk: include/scan.awk: line 21: function asort never defined  
    7. xargs: grep: terminated by signal 13  
    8. awk: include/scan.awk: line 21: function asort never defined  
    9. awk: include/scan.awk: line 21: function asort never defined  
    10. Updating feed 'luci' from 'https://github.com/openwrt/luci.git' ...  
    11. Already up-to-date.  
    12. Create index file './feeds/luci.index'   
    13. awk: include/scan.awk: line 21: function asort never defined  
    14. awk: include/scan.awk: line 21: function asort never defined  
    15. awk: include/scan.awk: line 21: function asort never defined  
    16. awk: include/scan.awk: line 21: function asort never defined  
    17. Updating feed 'routing' from 'https://github.com/openwrt-routing/packages.git' ...  
    18. Already up-to-date.  
    19. Create index file './feeds/routing.index'   
    20. awk: include/scan.awk: line 21: function asort never defined  
    21. awk: include/scan.awk: line 21: function asort never defined  
    22. awk: include/scan.awk: line 21: function asort never defined  
    23. awk: include/scan.awk: line 21: function asort never defined  
    24. Updating feed 'telephony' from 'https://github.com/openwrt/telephony.git' ...  
    25. Already up-to-date.  
    26. Create index file './feeds/telephony.index'   
    27. awk: include/scan.awk: line 21: function asort never defined  
    28. awk: include/scan.awk: line 21: function asort never defined  
    29. awk: include/scan.awk: line 21: function asort never defined  
    30. awk: include/scan.awk: line 21: function asort never defined  
    31. Updating feed 'management' from 'https://github.com/openwrt-management/packages.git' ...  
    32. Already up-to-date.  
    33. Create index file './feeds/management.index'   
    34. awk: include/scan.awk: line 21: function asort never defined  
    35. awk: include/scan.awk: line 21: function asort never defined  
    36. awk: include/scan.awk: line 21: function asort never defined  
    37. awk: include/scan.awk: line 21: function asort never defined  
    38. Updating feed 'targets' from 'https://github.com/openwrt/targets.git' ...  
    39. Already up-to-date.  
    40. Create index file './feeds/targets.index'   
    41. awk: include/scan.awk: line 21: function asort never defined  
    42. awk: include/scan.awk: line 21: function asort never defined  
    43. awk: include/scan.awk: line 21: function asort never defined  
    44. awk: include/scan.awk: line 21: function asort never defined  

    解决办法:

    1. sudo apt-get install gawk  

    安装完gawk之后正常。

发表回复

登录... 后才能评论

评论(4)

  • 艾克杨鹏 2015-12-05 17:52

    有时候还缺少其他的几个,
    sudo apt-get install gawk
    apt-get insatll zlib1g-dev
    sudo apt-get install subversion
    sudo apt-get install libncurses5-dev

  • 艾克杨鹏 2015-12-11 10:21

    另外有个命令大家用的上,就是第一次编译的时候不是会下载很多东西,我们可以使用命令 make download V=s -j2 先吧需要下载的资源下载下来,然后再编译。

  • 艾克杨鹏 2015-12-11 11:38

    libssl-dev