编译OpenWRT过程问题解决

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编译OpenWRT过程问题解决
展开全文
摘要: 记实OpenWRT的第一次编译过程。

遇到的问题与解决方法。

本人是只菜鸟,没有接触过OpenWrt,只是平时都是在Linux下做开发。

习惯了Linux的开发环境。

本人的操作系统是CentOS 6.4(好久都没有换过了)。

本人按照网上牛人们的指点也开始下载编译OpenWRT。

如下为网上的资料:
sudo apt-get update (更新)
安装编译需要的组件:
sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install binutils
sudo apt-get install patch
sudo apt-get install bzip2
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install make
sudo apt-get install autoconf
sudo apt-get install gettext
sudo apt-get install texinfo
sudo apt-get install unzip
sudo apt-get install sharutils
sudo apt-get install subversion
sudo apt-get install libncurses5-dev
sudo apt-get install ncurses-term
sudo apt-get install zlib1g-dev
sudo apt-get install gawk
sudo apt-get install asciidoc
sudo apt-get install libz-dev
编译环境搭建完成
mkdir openwrt 创建一个openwrt文件夹
cd openwrt 进入openwrt文件夹
svn co svn:///openwrt/branches/backfire 下载官网的源码
./scripts/feeds update -a 更新软件包
./scripts/feeds install -a 安装软件包
make menuconfig 进入定制界面(里面可以选择芯片的型号,集成的组件等等,根据实际情况选择)
defconfig
make V=99 (开始编译)
剩下的就是等待了,第一次编译需要的时间相对比较长,这个跟你的电脑配置和网速有关。

由于原作者是用的Ubuntu作为开发环境,所以在安装上面的那些依赖工具包时都是用 apt-get 来安排的,在CentOS里采用 yum。

其实都一样,只要知道依赖哪些包就行了。

本人checkout 的OpenWRT源码库路径为:svn:///openwrt/trunk
其它的都按上面的步骤做。

如下是我遇到的几个问题:
./scripts/feeds update -a失败
报:
$ ./scripts/feeds update -a
Updating feed 'packages' from 'https:///openwrt
/packages.git' ...
Cloning into './feeds/packages'...
fatal: Unable to find remote helper for 'https'
failed.
可能是git仓库路径不对,将https替换成git就可以了。

用 grep 命令搜
$ grep 'https://' feeds/* -R
feeds/packages.tmp/location:https:///openwrt/p ackages.git
那就把这个地方改一下啰。

再试一下。

结果还是老样子,我想了一下,这个feeds/packages.tmp/location 很可能是临时文。

改它不会有效果的。

好像 feeds.conf.default 文件里也找到了。

$ grep 'https://' feeds.conf.default -R
src-git packages https:///openwrt/packages.git
src-git luci https:///openwrt/luci.git
src-git routing https:///openwrt-
routing/packages.git
src-git telephony https:///openwrt/telephony.git src-git management https:///openwrt-management/packages.git
src-git targets https:///openwrt/targets.git
将里面所有https替换成git。

再试一下,OK了。

后记:其实还有更根本的解决方法,详见后期的博文《git 错误:Unable to find remote helper for 'https'》
gconvert.c libiconv
我在第一次编译OpenWRT时,出现如下错误提示:
gconvert.c:66:2: error: #error GNU libiconv not in use but in cluded iconv.h is from libiconv
我在网上找解决方案,结果一致地都是说,重新 ./configure 一下:./configure --enable-iconv=no --with-libiconv=gnu
make
可问题的关键是:OpenWRT的trunk路径下没见有个 configure 呀!
后来,经过仔细推敲,发现是在编glib时没通过。

$ find -name "gconvert.c"
./build_dir/host/pkg-config-0.28/glib/glib/gconvert.c
那我就直接进到 ./build_dir/host/pkg-config-0.28/glib/ 路径下,发现该路径下有 configure 文件。

那我说直接在该路径下编译 glib
$ cd build_dir/host/pkg-config-0.28/glib/
./configure --enable-iconv=no --with-libiconv=gnu
make
这样,glib 就顺利通过了编译。

再回到 OpenWRT的trunk路径下,继续 make.
libubox安装错误
报错:
mkdir -p /home/hevake_lcj/Workspace/OpenWRT/trunk/dl
echo "Checking out files from the git repository...";
mkdir -
p /home/hevake_lcj/Workspace/OpenWRT/trunk/tmp/dl && cd /home/hevake_lcj/Workspace/OpenWRT/trunk/tmp/dl && rm -rf libubox-2015-03-22 && [ \! -d libubox-2015-03-
22 ] && git clone http://.git libubox-2015-03-22 --
recursive && (cd libubox-2015-03-
22 && git checkout b8d9b382e39823850331edc2a92379173daf
1be3 && git submodule update) && echo "Packing checkout..." && rm -rf libubox-2015-03-
22/.git && tar czf /home/hevake_lcj/Workspace/OpenWRT/tr unk/tmp/dl/libubox-2015-03-22-
b8d9b382e39823850331edc2a92379173daf1be3.tar.gz libubox-2015-03-
22 && mv /home/hevake_lcj/Workspace/OpenWRT/trunk/tmp/ dl/libubox-2015-03-22-
b8d9b382e39823850331edc2a92379173daf1be3.tar.gz /home/h evake_lcj/Workspace/OpenWRT/trunk/dl/ && rm -rf libubox-2015-03-22;
Checking out files from the git repository...
Cloning into 'libubox-2015-03-22'...
fatal: Unable to find remote helper for 'http'
make[3]: *** [/home/hevake_lcj/Workspace/OpenWRT/trunk /dl/libubox-2015-03-22-
b8d9b382e39823850331edc2a92379173daf1be3.tar.gz] Error 12 8
从第二行看出,是用git clone工程:
git clone http://.git
整个第三行是将clone下来的源码打包tar.gz包。

于是,我访问了一下:果然出现 404页面。

看来还真没有?
我再访问了一下:结果,发现列表里有这个工程:
进入链接 project/libubox.git:
我自己亲自 git clone 一下。

$ cd dl
$ mkdir tmp
$ cd tmp
$ git clone http://.git libubox
Cloning into 'libubox'...
fatal: Unable to find remote helper for 'http'
我在网上找了“fatal: Unable to find remote helper for 'http'”的解决方法。

得知将 "http:" 换成“git:” 即可。

于是,我再次 git clone
$ git clone git://.git
结果成功clone了。

然后,手动完成编译命令过程:
mkdir -
p /home/hevake_lcj/Workspace/OpenWRT/trunk/tmp/dl cd /home/hevake_lcj/Workspace/OpenWRT/trunk/tmp/dl rm -rf libubox-2015-03-22
git clone git://.git libubox-2015-03-22
echo "Packing checkout..."
rm -rf libubox-2015-03-22/.git
tar czf libubox-2015-03-22-
b8d9b382e39823850331edc2a92379173daf1be3.tar.gz libubox-2015-03-22
mv libubox-2015-03-22-
b8d9b382e39823850331edc2a92379173daf1be3.tar.gz ../../dl/ rm -rf libubox-2015-03-22;
然后,回到OpenWRT的trunk路径下继续 make.
fatal: Unable to find remote helper for 'http'
编译报错:
make[3]: Entering directory `/home/hevake_lcj/Workspace/ OpenWRT/trunk/package/network/config/netifd'
mkdir -p /home/hevake_lcj/Workspace/OpenWRT/trunk/dl echo "Checking out files from the git repository...";
mkdir -
p /home/hevake_lcj/Workspace/OpenWRT/trunk/tmp/dl && c d /home/hevake_lcj/Workspace/OpenWRT/trunk/tmp/dl && r m -rf netifd-2015-03-31 && [ \! -d netifd-2015-03-
31 ] && git clone http://project/netifd.git netifd-2015-03-31 --recursive \
&& (cd netifd-2015-03-
31 && git checkout 3a0f953722698eab6f3f623a1d6ec5a1b710 2b77 && git submodule update) && echo "Packing checkout... " && rm -rf netifd-2015-03-
31/.git && tar czf /home/hevake_lcj/Workspace/OpenWRT/tru nk/tmp/dl/netifd-2015-03-31-
3a0f953722698eab6f3f623a1d6ec5a1b7102b77.tar.gz netifd-2015-03-
31 && mv /home/hevake_lcj/Workspace/OpenWRT/trunk/tmp/ dl/netifd-2015-03-31-
3a0f953722698eab6f3f623a1d6ec5a1b7102b77.tar.gz /home/he
vake_lcj/Workspace/OpenWRT/trunk/dl/ && rm -rf netifd-2015-03-31;
找到 package/network/config/netifd/Makefile,打开
将第8行的“http:”替换成"git:",然后再回到OpenWRT目录再make.
注:后来我还会反复遇到这个问题。

火了!一条命令全部换掉!
$ grep -E "http:.*\.git" `find -name Makefile | xargs` | awk -F: '!/.svn/{print $1}' | uniq | xargs sed -i 's/http\(:.*\.git\)/git\1/g' 在trunk目录下,找出Makefile中有"http:xxxxx.git"的文件,并将所有的"http:xxxxx.git"替换成"git:xxxxx.git"
$ grep -E "https:.*\.git" `find -
name Makefile | xargs` | awk -
F: '!/.svn/{print $1}' | uniq | xargs sed -
i 's/https\(:.*\)\.git/git\1\.git/g'
把 https 也替换成 git
opkg下载失败
Checking out files from the git repository...
Cloning into 'opkg-
9c97d5ecd795709c8584e972bfdf3aee3a5b846d'...
fatal: Could not read from remote repository.
这时往上看一下,看make到哪儿了
make[3]: Entering directory `/home/hevake_lcj/Workspace/ OpenWRT/trunk/package/system/opkg'
原来是 opkg 在 git clone 时可能是路径的问题,失败了。

我尝试打开 opkg 路径下的 Makefile,将
PKG_SOURCE_URL:=/git/opkg
改成:
PKG_SOURCE_URL:=git:///git/opkg
结果还是没有生效。

我手动搜opkg,找到官网:打开,看到网页最下面有:
于是,我改trunk/package/system/opkg/Makefile 文件,把PKG_SOURCE_URL改成:
PKG_SOURCE_URL:=git:///opkg
继续 make,通过了!
linux-firmware clone失败
fatal: Unable to look up (port 9418) (Temporar y failure in name resolution)
我到网站找到了linux-firmware 的仓库https:///cgit/linux/kernel/git/balbi/linux-firmware.git/ 看到最下面的 git 路径说明:
这与 Makefile 里指定的不统一。

于是将Makefile里的git路径改过来
再 make
我现在都总结出经验来了。

凡是git clone失败的,如果是http头的问题,将http替换成git 再试。

如果还是不行,就要检查一下git的路径是不是对的。

简单的方法就是到git 路径的根节点上去找出源码仓库,并得到其真实有效的git 路径。

并将Makefile中的改过来就OK了。

linux-firmware fatal: reference is not a tree 问题
make[3]: Entering directory `/home/hevake_lcj/Workspace/ OpenWRT/trunk/package/kernel/mac80211'
mkdir -p /home/hevake_lcj/Workspace/OpenWRT/trunk/dl echo "Checking out files from the git repository...";
mkdir -
p /home/hevake_lcj/Workspace/OpenWRT/trunk/tmp/dl && c d /home/hevake_lcj/Workspace/OpenWRT/trunk/tmp/dl && r m -rf linux-firmware-
f404336ba808cbd57547196e13367079a23b822c && [ \! -
d linux-firmware-
f404336ba808cbd57547196e13367079a23b822c ] && git clon e git:///pub/scm/linux/kernel/git/balbi/linux-firmware.git linux-firmware-f404336ba808cbd57547196e13367079a23b822c --recursive && (cd linux-firmware-
f404336ba808cbd57547196e13367079a23b822c && git chec kout f404336ba808cbd57547196e13367079a23b822c && git submodule update) && echo "Packing checkout..." && rm -rf linux-firmware-
f404336ba808cbd57547196e13367079a23b822c/.git && tar cjf
/home/hevake_lcj/Workspace/OpenWRT/trunk/tmp/dl/linux-firmware-2015-03-20-
f404336ba808cbd57547196e13367079a23b822c.tar.bz2 linux-firmware-
f404336ba808cbd57547196e13367079a23b822c && mv /hom e/hevake_lcj/Workspace/OpenWRT/trunk/tmp/dl/linux-firmware-2015-03-20-
f404336ba808cbd57547196e13367079a23b822c.tar.bz2 /home/ hevake_lcj/Workspace/OpenWRT/trunk/dl/ && rm -rf linux-firmware-f404336ba808cbd57547196e13367079a23b822c;
Checking out files from the git repository...
Cloning into 'linux-firmware-
f404336ba808cbd57547196e13367079a23b822c'...
remote: Counting objects: 2344, done.
remote: Compressing objects: 100% (1164/1164), done.
remote: Total 2344 (delta 1182), reused 2272 (delta 1145)
Receiving objects: 100% (2344/2344), 42.07 MiB | 26 KiB/s, done.
Resolving deltas: 100% (1182/1182), done.
fatal: reference is not a tree: f404336ba808cbd57547196e13 367079a23b822c
make[3]: *** [/home/hevake_lcj/Workspace/OpenWRT/trunk /dl/linux-firmware-2015-03-20-
f404336ba808cbd57547196e13367079a23b822c.tar.bz2] Error 1 28
make[3]: Leaving directory `/home/hevake_lcj/Workspace/O penWRT/trunk/package/kernel/mac80211'
fatal: reference is not a tree: f404....22c,意思好像是说git工程里没有f404...22c 这么版本。

那么我得检查一下这个版本号对不对。

在trunk/tmp/dl路径下下载的linux-firmware还没有删掉,我
们进入该目录。

并用git log查看一下提交日志,得到:
commit b8ac7c7e27dcd13fa3c843aaf62457e9c57ea4db
Author:RaseshMody<*****************>
Date: Tue Sep 10 16:10:54 2013 -0700
linux-
firmware: Add Brocade FC/FCOE Adapter firmware files
This patch adds firmware files for Brocade HBA and CNA dri vers(BFA and BNA).
Signed-off-by:RaseshMody<*****************>
Signed-off-by:BenHutchings<****************.uk>
commit 8ff6cc3a5e1d9452ae8fb993532afc1f3ab3a71f
Merge: 1461bed e7c85b2
Author:BenHutchings<****************.uk>
Date: Mon Sep 30 04:50:51 2013 +0100
Merge branch 'moxa' of https:///lunn/linux-firmware
commit 1461bed1300097efeba59c82ffa30c90cc7e3ae5
Author:AlexDeucher<*************************>
Date: Mon Aug 26 10:45:33 2013 -0400
radeon: add ucode for KAVERI GPUs
Add new ucode files and update the WHENCE entry.
Signed-off-by:AlexDeucher<*************************> Signed-off-by:BenHutchings<****************.uk>
commit 66f87a226160b545ac02f3844ea601cbe10a5da2
Author:AlexDeucher<*************************>
Date: Mon Aug 26 10:42:44 2013 -0400
radeon: add smc ucode for BONAIRE
在这里面,没有搜到f404336ba808cbd57547196e13367079a23b822c 这个版本号那,我就将其改成最新的版本号吧b8ac7c7e27dcd13fa3c843aaf62457e9c57ea4db,但愿没有问题。

同时,将trunk/tmp/dl/下的原下载目录改名(避免反复下载)、$ cd tmp/dl
$ mv linux-firmware-
f404336ba808cbd57547196e13367079a23b822c/ linux-firmware-b8ac7c7e27dcd13fa3c843aaf62457e9c57ea4db 好!我们再 make 一下。

相关文档
最新文档