导航:首页 > 源码编译 > 把单个ipk编译进openwrt

把单个ipk编译进openwrt

发布时间:2024-07-02 10:26:54

‘壹’ openwrt编译ipk时怎么找到模块

编译的时候
以下为网友遇到的问题
Package helloworld is missing dependencies for the following libraries: libc.so.6 libpthread.so.0
缺少类库,然后其实我发现我的类库在系统里是存在的:
locate libc.so.6
结果:
/lib/i386-linux-gnu/libc.so.6
/lib/i386-linux-gnu/ libpthread.so.0
/lib64/libc.so.6
但是我的应用程序用到了 Libpthread,所以提示 少了2个依赖库。

‘贰’ 姹傚姪,openwrt瀹夎卛pk杞浠舵姤阌


链変袱绉嶆柟寮忓畨瑁咃细锏诲綍璺鐢眞eb鐣岄溃锛堜竴鑸鏄19161锛夛纴鍦╫penwrt镄勮蒋浠跺畨瑁呯晫闱涓婇夋嫨涓娄紶瀹夎呫
棣栧厛锛岀敤ssh锏诲綍璺鐢憋纸鍙鐢╬utty绛夎蒋浠讹级銆傜‘淇濊矾鐢辫繛涓婄绣銆傗斺斺旈厤缃甈PPOE涓婄绣钬斺斺斿弬钥冿细openwrt锻戒护琛岄厤缃甈PPOE涓婄绣镄勬柟娉曪细.vi/etc/config/network.濡傛灉镞犳硶缂栬緫锛屾寜a杩涘叆缂栬緫妯″纺銆
镞㈢劧浣犵幇鍦ㄦ槸鍦/tmp鏂囦欢澶逛笅锛屼綘鍙鏄鎶婅蒋浠跺寘鏀惧湪杩欎釜鏂囦欢澶逛笅浜嗗惂銆
鐤戞槸搴旇ョ紪璇戣繘鍐呮牳镄勫嵈娌$紪璇戣繘铡伙纴铹跺悗𨱍冲湪钖庢湡瀹夎呮椂浼氭姤阌欍傛湁浜哄缓璁杩欐牱瀹夎卭pkginstallPackageName.ipk--force-depends璇曡瘯钖э纴鎴戜篃鏄锏惧害镓剧殑锛屾垜鍙嶆g敤镄勪笢瑗夸竴鑸浼氱洿鎺ョ紪璇戣繘铡伙纴娌¤佽繃姝ょ被阌栾銆
浣犺繖涓椹卞姩鍖呮槸濡备綍瀹夎呯殑銆傛槸鐢ㄥ师𨱒ヤ僵甯︾殑椹卞姩钖楋纴杩樻槸缃戜笂涓嬭浇镄勚备綘鍙浠ヤ笅杞介┍锷ㄧ簿𨱔佃繘琛屾洿鏂扮绣鍗¢┍锷ㄣ备竴鑸澶镞х殑缃戝崱缃戜笂娌℃湁椹卞姩涔熸槸寰堥毦璇寸殑锛岄┍锷ㄧ簿𨱔垫病链夋垒鍒伴┍锷ㄧ殑璇濓纴灏变娇鐢ㄩ┍锷ㄤ汉鐢燂纴澶氱敤鍑犱釜𨱒ヨ瘯璇曘
鐜板湪trunk宸茬粡鏄疌haosCalmer浜嗐傜湅鎴戝师甯栭噷鏀规垚鐢˙arrierBreakerrc2鎴杛c3镄刼pkg镟存柊鍦板潃銆备綘镄勯噰绾虫槸鎴戝墠杩涚殑锷ㄥ姏锛岃缮链変笉镍傜殑鍦版柟锛岃风户缁杩介梾銆傚备綘杩樻湁鍒镄勯梾棰桡纴鍙鍙﹀栧悜鎴戞眰锷╋绂绛旈树笉鏄掳纴浜掔浉鐞呜В锛屼簰鐩稿府锷┿

‘叁’ 如何为现有的openwrt编译一个opkg上没有的软件

一、安装编译环境(以ubuntu10.10为例)
依次输入以下命令
1.ubuntu开发环境需要的软件:
sudo
apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf
gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term
zlib1g-dev gawk
sudo apt-get update
2.创建目录
mkdir openwrt
3.获取OpenWrt源代码和安装包,更新
svn checkout svn://svn.openwrt.org/openwrt/backfire
cd backfire
./scripts/feeds update -a
./scripts/feeds install -a
4.配置编译选项
make menuconfig
在target system里选择Broadcom BCM63xx,根据需要选择其他的软件,
*:表示该模块直接编译到核心中
M:该模块以被核心支持,可以后再安装
空白:不支持该模块
具体模块的起什么作用需要多google;
5.编译选项配置保存后,开始编译
make V=99
V=99表示输出详细的debug信息;
二、编译准备
1.下载源文件
下载地址:http://ftp.awk.cz/cntlm/ ,最新的版本是0.91rc6;
2.获取md5sum码
进入下载文件目录,在终端里输入
md5sum cntlm-0.91rc6.tar.gz
获得md5验证码:
3.编写makefile文件
在openwrt/backfire目录中的package目录下新建cntlm目录,在cntlm目录下新建文件,命名为makefile,编辑makefile文件,加入如下内容:
---------------------------------------------------------------------------------------------------------------------------
#
# Copyright (C) 2006-2008 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk

PKG_NAME:=cntlm
PKG_VERSION:=0.91rc6
PKG_RELEASE:=1

PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://ftp.awk.cz/cntlm/
PKG_MD5SUM:=

PKG_INSTALL:=1

include $(INCLUDE_DIR)/package.mk

define Package/cntlm
SUBMENU:=Proxy Servers
SECTION:=net
CATEGORY:=Network
TITLE:=Cntlm is a Fast NTLM Authentication Proxy
URL:=http://cntlm.sourceforge.net/
endef

define Package/cntlm/install
$(INSTALL_DIR) $(1)/usr/sbin
$(CP) $(PKG_INSTALL_DIR)/usr/sbin/cntlm $(1)/usr/sbin/
$(INSTALL_DIR) $(1)/usr/share/man/man1
$(CP) $(PKG_INSTALL_DIR)/usr/share/man/man1/$(PKG_NAME).1 $(1)/usr/share/man/man1
$(INSTALL_DIR) $(1)/etc/
$(CP) $(PKG_INSTALL_DIR)/etc/cntlm.conf $(1)/etc/
endef

$(eval $(call BuildPackage,cntlm))
---------------------------------------------------------------------------------------------------------------------------
4.编写patch文件
由于BCM63xx核心是big
endian,而我们常用的intel或AMD的cpu都是little
endian的,cntlm虽然能够自己检测编译环境的endian,但我们是在交叉编译环境中编译,cntlm检测出来的还是ubuntu系统的endian,因此需要设置手动endian为big
endian。具体就是将源码文件中的config/endian.c文件的rc设定为0.
将源码文件中的endian.c文件分别复制到a目录下的config目录和b目录下的config目录,打开b目录下的config目录中的endian.c文件,并将其修改为:
-------------------------------------------------------------------------------------------------------------------------
#include
#include

int main(int argc, char **argv) {
int rc;

rc = 0;
printf("%s\n", rc ? "little endian" : "big endian");

return rc;
}
---------------------------------------------------------------------------------------------------------------------------
然后保存。
运行:
diff -Naur a/config/endian.c b/config/endian.c >endian.patch
endian.patch文件内容如下:
---------------------------------------------------------------------------------------------------------------------------
--- a/config/endian.c 2007-08-20 07:23:17.000000000 +0800
+++ b/config/endian.c 2010-11-01 18:36:32.000000000 +0800
@@ -1,15 +1,11 @@
#include
#include

-uint8_t num[] = { 0xEF, 0xBE };

-/*
- * RC: 1 = LE, 0 = BE
- */
int main(int argc, char **argv) {
int rc;

- rc = (*((uint16_t *)num) == 0xBEEF);
+ rc = 0;
printf("%s\n", rc ? "little endian" : "big endian");

return rc;
---------------------------------------------------------------------------------------------------------------------------
将endian.patch文件复制到package/cntlm/patches/目录下(没有patches目录就新建一个)。

三、编译
1.选定安装包
终端输入:
make menuconfig
在Network——》Proxy Severs中选择cntlm;
2.开始编译
终端输入:
make package/cntlm/compile V=99
中间可能会出现一些提示(Note),可以不用理会。编译完成后在bin/packages目录下可以看到cntlm_0.91rc6-1_brcm63xx.ipk文件啦。

四、补充
上面提到在编译过程中出会现提示(Note),一般如下:
utils.c:1: note: someone does not honour COPTS correctly, passed 0 times
这是由于cntlm源码文件中CFLAG的设置是覆盖而不是续接,与openwrt要求不同,在openwrt一般写成CFLAG += 的方式。可以通过如下修改去除note:
将源码包中的Makefile文件复制到a目录和b目录,打开b目录下的Makefile文件,作如下修改:
CFLAGS+=$(FLAGS)
即增加上面的“+”号,保存。
运行:
diff -Naur a/Makefile b/Makefile > makefile.patch
得到的makefile.patch文件如下:
---------------------------------------------------------------------------------------------------------------------------
--- a/Makefile 2010-04-29 19:18:58.000000000 +0800
+++ b/Makefile 2010-11-09 20:17:33.405177000 +0800
@@ -16,7 +16,7 @@
CC=gcc
VER=`cat VERSION`
OBJS=utils.o ntlm.o xcrypt.o config.o socket.o acl.o auth.o http.o forward.o direct.o scanner.o pages.o main.o
-CFLAGS=$(FLAGS)
-std=c99 -Wall -pedantic -O3 -D__BSD_VISIBLE -D_ALL_SOURCE
-D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=200112 -D_ISOC99_SOURCE
-D_REENTRANT -DVERSION=\"`cat VERSION`\" -g
+CFLAGS+=$(FLAGS)
-std=c99 -Wall -pedantic -O3 -D__BSD_VISIBLE -D_ALL_SOURCE
-D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=200112 -D_ISOC99_SOURCE
-D_REENTRANT -DVERSION=\"`cat VERSION`\" -g
OS=$(shell uname -s)
OSLDFLAGS=$(shell [ $(OS) = "SunOS" ] && echo "-lrt -lsocket -lnsl")
LDFLAGS:=-lpthread $(OSLDFLAGS)
---------------------------------------------------------------------------------------------------------------------------
将makefile.patch文件复制到package/cntlm/patches目录下,重新编译即可。

‘肆’ 如何编译 openwrt ipk

因为openwrt也没有对rg200e的bcm5358支持,就按照你的提议下载bcm47xx的ipk包在tomato上手动安装,7zip解压复制进u盘挂载的opt目录,并修改里面配置文件的路径和权限,尝试很久,逐个排除遇到的故障,但最后还是不成功,提示运行有个错误,需要e...

‘伍’ Openwrt 编译ipk出错,如下错误,怎么解决 denghuinow@Ubuntu:

程序包有问题,或者缺少其他依赖包,感觉,建议不成熟见谅

‘陆’ openwrt ssr plus+ 服务器报错

在原版openwrt上使用luci-app-ssr-plus这个插件有两种方法:一种是编译出适合架构的程序及依赖程序的ipk文件,另一种是在原版系统中加入插件然后整体编译出一个固体刷入。安装时首先要编译软件,然后安装依赖及插件,如果你是原版openwrt,那么执行完安装后一定会报错,提示找不到依赖,原因在于luci-app-ssr-plus依赖三个插件不在官方源中,所以我们要把下面几个编译好的插件传上路由器提前安装好。一点要注意的,在安装所有非官方依赖后,安装luci-app-ssr-plus前,还有一步操作。openwrt系统都会内置dnsmasq用于DNS服务,但是这个插件与dnsmasq-full是冲突的,所以要手动卸载掉,但是可以不手动安装,作为官方源中可以找到的依赖插件,它是可以自动安装的。

阅读全文

与把单个ipk编译进openwrt相关的资料

热点内容
为什么樱校显示服务器错误 浏览:270
亚马逊app购物在哪里下载 浏览:329
网络显示连接服务器失败怎么回事 浏览:585
如何确认是256加密 浏览:39
安卓加密教育视频 浏览:265
华为会员字体在哪个文件夹 浏览:582
单片机原理及应用第二版课后习题答案 浏览:118
女程序员一天怎么度过 浏览:654
轻易做程序员好吗 浏览:56
访问网络服务器是什么意思 浏览:367
区块链属性加密 浏览:995
小米k30怎么创建文件夹 浏览:385
2355解压软件 浏览:819
php有多线程吗 浏览:448
程序员的七 浏览:284
淘宝app的主页为什么是灰色的 浏览:887
安卓手机怎么给抖音升级 浏览:596
matlab图形命令 浏览:929
app中国国税发票哪里转发 浏览:524
usb给单片机充电电路 浏览:445