Chinaunix首页 | 论坛 | 博客
  • 博客访问: 779482
  • 博文数量: 231
  • 博客积分: 3217
  • 博客等级: 中校
  • 技术积分: 2053
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-04 12:01
文章分类

全部博文(231)

文章存档

2015年(1)

2013年(10)

2012年(92)

2011年(128)

分类: LINUX

2011-08-29 18:04:53

转载:

这是我去年编辑一个软件时记下的过程,希望对你有所帮助,我也是新手,按照官方提供的教程一步步修改,中间断断续续弄了近两个月,最后总算编译成功了。
一、安装编译环境(以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.下载源文件
下载地址: ,最新的版本是0.91rc6;
2.获取md5sum码
进入下载文件目录,在终端里输入
md5sum cntlm-0.91rc6.tar.gz
获得md5验证码:21ccd60294269cb8fbe3e2e49374ab1b
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:=
PKG_MD5SUM:=21ccd60294269cb8fbe3e2e49374ab1b

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:=
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目录下,重新编译即可。

阅读(5824) | 评论(0) | 转发(0) |
0

上一篇:CentOS yum详细使用

下一篇:openwrt资料汇集

给主人留下些什么吧!~~