① 如何編譯OpenWrt
本教程的編譯環境:win7 專業版+VMwareWorkstation6.5虛擬機+Ylmf OS 3.0
編譯的過程中要保持電腦聯網
搭建編譯環境
應用程序--附件--終端
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 (開始編譯)
剩下的就是等待了,第一次編譯需要的時間相對比較長,這個跟你的電腦配置和網速有關。
下面以編譯TP-LINK 741N的openwrt固件為例,只編譯基本的功能:
make menuconfig
Target System---AR71xx/AR7240/AR913x/AR934x CPU型號
Target Profile---TP-LINK 741
LuCI—>Collections—– <*> luci 添加Luci
LuCI—>Translations—- <*> luci-i18n-chinese 添加中文
EXT----YES
make V=99 開始編譯
成功後在bin文件夾里有編譯好的固件。
② openwrt怎麼通過sdk編譯
先查詢出article,為持久態後再執行刪除。
修改後的代碼為:
@RequestMapping("/articledelete.do")
public String deleteArticle(Long id){
Article a = articleService.findById(id);
articleService.delete(a);
return "redirect:/user/articlelist.do";
}
③ openwrt編譯需要哪些依賴庫
openwrt mysql引用庫
1. 用opkg安裝myserver及其依賴包
opkg update
opkg install libpthread libncurses libreadline mysql-server
2. 創建mysql數據目錄
mkdir -p /home/data/mysql
mkdir -p /home/data/tmp
3. 修改配置文件
vi /etc/my.cnf
datadir = /home/data/mysql/ #數據保存路徑
tmpdir = /home/data/tmp/
bind-address = 0.0.0.0 #綁定的ip地址
4. 初始化建庫
mysql_install_db --force
5. 啟動mysql,並設定開機啟動
/etc/init.d/mysqld start
/etc/init.d/mysqld enable
6. 設定密碼
mysqladmin -u root password 'new-password'
④ 編譯OpenWrt系統求助
編譯openwrt固件並沒有想像的那麼復雜,我也是個小白,以下內容是我將網路上的編譯教程稍微進行了一下整合。因為我發現很多編譯教程沒有說明如何更改flash相關配置。 安裝ubuntu,不贅述。 注意在安裝完成後,root不能直接登錄,需要設置密碼,
⑤ openwrt怎麼編譯應用程序
:Openwrt 官方正式的發行版是已編譯好了的映像文件(後綴名bin或trx、trx2),此映像文件可從Openwrt官方網站的下載頁面中輕松獲取到,連接地址為 OpenWrt官方網站。這些編譯好的映像文件是基於默認的配置設置,且只針對受支持的平台或設備的。
⑥ 如何為現有的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 <stdio.h>
#include <stdint.h>
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 <stdio.h>
#include <stdint.h>
-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里如何使用make編譯源碼
這有一個安裝包,不知對你有用沒。在X86虛擬機安裝後,就有make了。不過我這還是用不了,提示沒有cc 命令。 http://downloads.openwrt.org/backfire/10.03.1/x86_generic/packages/make_3.81-1_x86.ipk
⑧ 有誰知道到關於OpenWrt固件編譯開發的入門的書籍在那裡買 或者書名叫什麼
編譯openwrt固件並沒有想像的那麼復雜,我也是個小白,以下內容是我將網路上的編譯教程稍微進行了一下整合。因為我發現很多編譯教程沒有說明如何更改flash相關配置。
安裝ubuntu,不贅述。
注意在安裝完成後,root不能直接登錄,需要設置密碼,設置方法,自己網路一下。
如果是虛擬機安裝,將虛擬機的網卡配置為橋接模式;
**************以下操作需要在root用戶下操作************************
編輯/etc/networt/option文件夾下的interfaces,將iface eth0 inet dhcp配置為dhcp模式,
然後執行/etc/init.d/networking restar即可自動獲取到ip地址(此方法適用於家中或單位使用dhcp獲取IP地址的場合,如果為固定地址,請自行研究)。互聯網聯通以後執行以下:
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
如果編譯過程中提示缺少某個組件,同樣使用sudo apt-get install安裝即可
編譯環境搭建完成
**************注意:以下操作需要在自己建的用戶下操作************************
mkdir openwrt 創建一個openwrt文件夾
cd openwrt 進入openwrt文件夾
svn co svn://svn.openwrt.org/openwrt/branches/backfire
或者svn co svn://svn.openwrt.org/openwrt/trunk下載官網的源碼
註:backfire和trunk為兩個不同分支的openwrt源碼,backfire據說較為穩定,但是支持的路由器沒有trunk多,trunk更多稱之為測試版,但編譯好後使用也沒什麼問題。編譯的時候只需執行以上一條命令即可。執行完成後,會在openwrt下生成目錄,使用backfire源碼生成backfire目錄,trunk同理。
然後cd trunk或者cd backfire
Svn up
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
進入定製界面(裡面可以選擇晶元的型號,集成的組件等等,根據實際情況選擇,多編譯幾次就熟悉了)
使用make defconfig,檢查編譯環境,如要報錯參考以下:
註:較常見的問題是編譯時不能使用root用戶編譯,如果使用root登錄,需要使用su 用戶名切換到非root用戶;如果切換用戶後,報許可權錯誤,再切換到root用戶,使用 sudo chown -R [自己用戶名] trunk(如果編譯的是backfire源碼,此處trunk替換為backfire),然後返回自己的用戶名,重新進行編譯。
make V=99
(開始編譯)
剩下的就是等待了,第一次編譯需要的時間相對比較長,這個跟你的電腦配置和網速有關。
以上為路由器未更改flash大小的編譯過程;如果要編譯非標准大小的flash固件,需要更改編譯環境中的一些文件,以703N,使用trunk源碼編譯為例(trunk與backfire需要更改的文件不一樣)
新版本trunk,703N編譯8M固件需要更改以下兩個文件:
1、 /turnk/tools/firmware-utils/src/mktplinkfw.c
在mktplinkfw.c中找到703N的相關屬性,
.id = "TL-WR703Nv1",
.hw_id = HWID_TL_WR703N_V1,
.hw_rev = 1,
.layout_id = "8Mlzma",(改成8)
2、 /trunk/ target/linux/ar71xx/image/Makefile
Makefiel中找到以下內容
$(eval $(call SingleProfile,TPLINK-LZMA,$(fs_64kraw),TLWR703,tl-wr703n-v1,TL-WR703N,ttyATH0,115200,0x07030101,1,8Mlzma))
將4改成以上的8;
修改完成以上兩個文件後,即可make V=99進行編譯。
Backfire源碼需要改動的文件,第一個與trunk一樣,第二個文件位於
openwrt/backfire/target/linux/ar71xx/files/arch/mips/ar71xx目錄下,找到對應的設備型號進行更改即可。
編譯完成後,在bin/ar71xx目錄下會有固件產生,固件名必包含編譯的路由器型號,如果沒有這兩個文件,說明編譯失敗,有可能為編譯時候選擇的包太多,需重新選擇後進行編譯。
以上編譯未進行相關配置文件的修改,如想修改配置文件,如默認打開無線等等,請自己網路/google。
註:以上大部分內容均來自互聯網,我僅進行了整合。