您的位置:首页 > 运维架构

编译OpenWRT过程问题解决

2015-09-10 17:04 483 查看



摘要 记实OpenWRT的第一次编译过程。遇到的问题与解决方法。
openwrt 编译

目录[-]

./scripts/feeds
update -a失败
gconvert.c
libiconv
libubox安装错误
fatal:
Unable to find remote helper for 'http'
opkg下载失败
linux-firmware
clone失败
linux-firmware
fatal: reference is not a tree 问题

本人是只菜鸟,没有接触过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://svn.openwrt.org/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://svn.openwrt.org/openwrt/trunk

其它的都按上面的步骤做。

如下是我遇到的几个问题:

./scripts/feeds update -a失败

报:

?
可能是git仓库路径不对,将https替换成git就可以了。

用 grep 命令搜

?
那就把这个地方改一下啰。

再试一下。结果还是老样子,我想了一下,这个 feeds/packages.tmp/location 很可能是临时文。改它不会有效果的。

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

?
将里面所有https替换成git。

再试一下,OK了。

后记:其实还有更根本的解决方法,详见后期的博文《git 错误:Unable to find remote
helper for 'https'》

gconvert.c libiconv

我在第一次编译OpenWRT时,出现如下错误提示:

?
我在网上找解决方案,结果一致地都是说,重新 ./configure 一下:

?
可问题的关键是:OpenWRT的trunk路径下没见有个 configure 呀!

后来,经过仔细推敲,发现是在编glib时没通过。

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

那我说直接在该路径下编译 glib

?
这样,glib 就顺利通过了编译。

再回到 OpenWRT的trunk路径下,继续 make.

libubox安装错误

报错:

?
从第二行看出,是用git clone工程:

?
整个第三行是将clone下来的源码打包tar.gz包。

于是,我访问了一下:http://git.openwrt.org/project/libubox 果然出现
404页面。看来还真没有?

我再访问了一下:http://git.openwrt.org/ 结果,发现列表里有这个工程:





进入链接 project/libubox.git:





我自己亲自 git clone 一下。

?
我在网上找了“fatal: Unable to find remote helper for 'http'”的解决方法。得知将 "http:" 换成 “git:” 即可。

于是,我再次 git clone

?
结果成功clone了。

然后,手动完成编译命令过程:

?
然后,回到OpenWRT的trunk路径下继续 make.

fatal: Unable to find remote helper for 'http'

编译报错:

?
找到 package/network/config/netifd/Makefile,打开





将第8行的“http:”替换成"git:",然后再回到OpenWRT目录再make.

注:后来我还会反复遇到这个问题。火了!一条命令全部换掉!

?
在trunk目录下,找出Makefile中有"http:xxxxx.git"的文件,并将所有的"http:xxxxx.git"替换成"git:xxxxx.git"

?
把 https 也替换成 git

opkg下载失败

?
这时往上看一下,看make到哪儿了

?
原来是 opkg 在 git clone 时可能是路径的问题,失败了。

我尝试打开 opkg 路径下的 Makefile,将

?
改成:

?
结果还是没有生效。

我手动搜opkg,找到官网: http://git.yoctoproject.org/cgit/cgit.cgi/opkg/ 打开,看到网页最下面有:





于是,我改 trunk/package/system/opkg/Makefile 文件,把 PKG_SOURCE_URL改成:

?
继续 make,通过了!

linux-firmware clone失败

?
我到 git.kernel.org 网站找到了 linux-firmware 的仓库 https://git.kernel.org/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 问题

?
fatal: reference is not a tree: f404....22c,意思好像是说git工程里没有 f404...22c 这么版本。那么我得检查一下这个版本号对不对。

在trunk/tmp/dl路径下下载的linux-firmware还没有删掉,我们进入该目录。并用git log查看一下提交日志,得到:

?
在这里面,没有搜到 f404336ba808cbd57547196e13367079a23b822c 这个版本号

那,我就将其改成最新的版本号吧 b8ac7c7e27dcd13fa3c843aaf62457e9c57ea4db,但愿没有问题。





同时,将 trunk/tmp/dl/下的原下载目录改名(避免反复下载)、

?
好!我们再 make 一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: