openwrt源碼分析
㈠ openwrt 源碼中如何修改/etc/resolv.conf
首先,openwrt一定要開ssh,然後用ssh登陸到路由器,:
ssh root@路由器ip (表示用root登陸到某個ip,接著輸入密碼)
接著打開/etc/opkg.conf這個配置文件,這個文件是配置軟體源的,命令:
vi /etc/opkg.conf
這個文件的內容如下:
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay
option check_signature 1
㈡ 如何能夠看到openwrt的源代碼 以c語言的形式 能夠看出功能是如何用c語言實現的
既然是開源的,那就可以直接下載代碼來看。如果找不到源代碼的下載地址,可以問一下有關的技術支持人員,一般會提供源代碼下載地址
㈢ openwrt是什麼系統 openWRT的優勢及版本簡介
OpenWrt 項目由 2004 年 1 月開始, 第一個版本是基於 Linksys 提供的 GPL 源碼及 uclibc 中的 buildroot 項目, 這個版本稱為 「stable」 版, 在網上至今仍有很多項目使用這個版本, 較為有名 Freifunk-Firmware 和 Sip@Home.
到了2005年初, 一些新的開發人員加入了這項目, 幾個月後他們釋出了第一個 「experimental」 版本, 這和以前版本不同的是, 這版本差不多完全舍棄了 Linksys 的 GPL 源碼, 使用了 buildroot2 作為核心技術, 將 OpenWrt 完全模塊化,OpenWrt 使用 linux 正式發行的核心源碼(2.4.30),加上了一些補丁和網路驅動,開發隊伍更為OpenWrt添加了許多免費的工具,可以直接把Image寫入 Flash (mtd)裡面,設定無線功能和VLAN交換功能,這個版本名為「White Russian」,而1.0版本於2005年底公布。
歷史版本
White Russian
OpenWRT的初始版本,從2005年7月的White Russian RC1開始發展,一直到2007年1月才發布White Russian 0.9。[3]
Kamikaze
OpenWRT的第二個版本,從2007年6月開始發布Kamikaze 7.06,一直更新到2010年1月的Kamikaze 8.09.2結束。這期間OpenWRT進行了大量改進,並為它的發展打下了堅實的基礎。[3]
Backfire
2010年03月04日,OpenWrt Backfire 10.03 Beta發布,該版本是開源的路由器固件,基於linux,功能強大,支持很多主流的平台和路由器,甚至支持國內的君正jz4740平台,是學習和開發嵌入式,也是工業、 商業應用理想平台。更新方面: brcm-2.4 更新到 2.4.37 kernel ,other targets 更新到 2.6.30 or 2.6.32 ,arm/mips平台的 gcc 更新到 4.3.3 ,powerpc的gcc更新到 4.4.3 ,uClibc 更新到 0.9.30.1 , Broadcom 11g 晶元組的 b43 無線網卡驅動更新到 2.6 kernel ,支持Atheros 11n ath9k ,支持很多新的ar71xx設備,magicbox歸入ppc40x平台 。
2010年03月25日,OpenWrt 發布 Backfire 10.03-rc1,支持國內留下的 tp-link最新多款11n的路由器,是不是想讓路由器支持萬能中繼呢,或者增加路由器的多wan口支持呢,更多的這些高端路由才有的功能,或許能 讓家用路由輕松具備。
2010年04月07日,OpenWRT放出Backfire 10.03正式版。
2010年08月29日,OpenWRT放出了Backfire 10.03.1。修正了很多BUG,提高了兼容性。TP-LINK WR841N v2 已經可以正常使用了,包括無線部分和上網部分。 自rc1之後的變動:改進了防DNS重綁定攻擊,改進了uhttpd穩定性, Rootfs生成修復(Orion景象),修正了基於BRCM47XX的PCI初始化,添加了rtl8366 vlan 改變的 整合腳本,還原了一般x86鏡像 GRUB控制台,提高了ar71xx系列乙太網驅動程序性能,添加了ar7240 交換機驅動,一些swconfig 和 交換機驅動的改進,RDC 使用啟動載入器支持波特率,允許原生HID 支持 通過添加 kmod-input-hid,6in4:適當的處理了PPPoE連接並且修復了終端隧道更新。
Attitude Adjustment
於2013年4月25日放出。相對於Backfire版本,Attitude Adjustment將內核更新至linux 3.3,改進了網路配置方法,並添加了諸多新特性,例如對IPv6的初步支持。同時,這個版本也改善了防火牆,更新了許多新的驅動,並添加了許多新的支持的型號。對ramips、bcm2708(即樹莓派)等方案提供了支持。[4]
Barrier Breaker
於2014年10月2日放出。Barrier Breaker更新了3個RC版本,相對Attitude Adjustment,其內核升級至 3.10,添加了原生IPv6支持;改進了文件系統,添加了nand快閃記憶體的系統更新,並支持文件系統的快照和回滾;UCI配置工具也得以改進,支持測試性配置並允許將配置回滾至上一次穩定工作的狀態;加強了網路功能,對動態防火牆規則、空間等添加了支持。這個版本相當穩定。
㈣ 如何編譯OpenWrt
搭建編譯環境。編譯建議在Linux下進行。我的系統是Linux mint 17,執行以下命令,構建編譯環境:
sudo apt-get update
sudo apt-get install git-core build-essential
獲取openwrt源碼。在當前用戶主目錄下執行
git clone git://git.openwrt.org/openwrt.git
等待代碼下載。結束後,目錄下會出現openwrt文件夾。
配置軟體源。進入openwrt目錄,執行
./scripts/feeds update -a
./scripts/feeds install -a
檢查編譯環境是否完整:
make defconfig
make prereq
根據提示信息安裝需要的軟體包。如果提示類似
「tmp/.config-package.in:22022:warning: multi-line strings not supported」
的信息,打開 openwrt/tmp/.config-package.in,定位到對應行,添上丟掉的一個引號就可以了。
編譯選項:
執行 make menuconfig,根據路由器情況,選擇 Target System 和 Subtarget。如意雲一代和極壹S的 Target System 均為 Ralink RT288x/RT3xxx 。對於Subtarget ,前者為 MT7620n based boards ,後者為 MT7620a based boards。
其他選項根據個人喜好選擇。一般來說要選中LuCI界面,選中中文語言包等等。
開始編譯:
執行 make -j2 V=s 進行編譯。-j後面的數字是電腦物理CPU數量加一。V=s可以顯示出編譯的詳細信息。首次編譯大概需要幾個小時的時間。
錯誤排查:
編譯失敗,一般有兩種情況:
1.代碼下載鏈接失效。首次編譯時,編譯程序會實時從網上下載一些軟體包的代碼。如果下載鏈接失效,編譯就會失敗。這時需要根據軟體包的名稱,從網上自行下載,然後放在 openwrt/dl/ 目錄下,執行 make -j2 V=s 繼續編譯即可。
2.軟體包自身有問題。這時重新執行 make menuconfig ,取消對應軟體包選中即可。這種情況比較少見,目前已知的有 tor 等。
編譯成功,但沒有生成固件。這種情況一般是因為選中的軟體包過多,導致固件大小超過16MB。重新執行 make menuconfig,去掉一些軟體包,重新執行編譯即可。
得到固件。在排除了所有錯誤後,現在終於得到了固件。對於如意雲RY-1,固件在 openwrt/bin/ramips 目錄下,形如
openwrt-ramips-mt7620n-rt-n14u-squashfs-sysupgrade.bin
openwrt-ramips-mt7620n-wrtnode-squashfs-sysupgrade.bin
openwrt-ramips-mt7620n-mlw221-squashfs-sysupgrade.bin
openwrt-ramips-mt7620n-wr8305rt-squashfs-sysupgrade.bin
等等。
㈤ 如何從零開始學習OpenWrt
Cisco/Linksys在2003年發布了WRT54G這款無線路由器,同年有人發現它的IOS是基於Linux的,然而Linux是基於
GPL許可證發布的,按照該許可證Cisco應該把WRT54G 的IOS的源代碼公開。2003年3月,
Cisco迫於公眾壓力公開了WRT54G的源代碼。此後就有了一些基於Cisco源碼的第三方路由器固件,OpenWrt就是其中的一個。
OpenWrt的特點:
可擴展性好,可以在線安裝您所需要的功能,目前有1000多個功能包可選;
是一台完整的Linux工作站,文件系統可讀可寫,便於開發者學習和實踐;
現在有越來越多的Maker開始折騰OpenWrt,但作為一個Maker新手來講,在網上還是很難找到一份系統的入門級資料。查找資料很辛苦,而且OpenWrt的門檻相對較高,希望這篇文章所提供的從零開始學OpenWrt編譯
+ 刷機 + 使用教程能降低新手們的入門難度,當然,編譯過程非必須,一般的路由都可找到可用的穩定固件直接刷機。
第一部分:搭建編譯環境
1、安裝Ubuntu(編譯需要Linux環境),到其官網下載,版本根據自己所需選擇即可。可以選擇安裝到虛擬機或者物理機,圖形化安裝而且是中文版,連安裝都搞不定的,可以關閉本頁面了;
2、切記不要改動軟體源,同時按住Ctrl + Alt + T,調出終端;
3、逐條輸入下列命令(及時驗證是否安裝成功):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
sudo apt-get install g++
sudo apt-get install libncurses5-dev
sudo apt-get install zlib1g-dev
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install unzip
sudo apt-get install autoconf
sudo apt-get install gawk
sudo apt-get install make
sudo apt-get install gettext
sudo apt-get install gcc
sudo apt-get install binutils
sudo apt-get install patch
sudo apt-get install bzip2
sudo apt-get install libz-dev
sudo apt-get install asciidoc
sudo apt-get install subversion
sudo apt-get install sphinxsearch
sudo apt-get install libtool
sudo apt-get install sphinx-common
至此編譯環境搭建完成。
第二部分:下載OpenWrt源碼並編譯
OpenWrt源碼分兩種,一種是最新但不是最穩定的Trunk開發版,一種是最穩定的Backfire版,建議下載官方源碼。下載前先在本地創建文件夾:
1
2
3
mkdir openwrt
sudo chmod 777 openwrt
cd openwrt
選擇你想要的版本然後執行下載命令,下載結束會顯示版本號:
Trunk版下載命令:
1
svn co svn://svn.openwrt.org/openwrt/trunk/
Backfire版下載命令:
1
svn co svn://svn.openwrt.org/openwrt/branches/backfire/
添加軟體擴展包,將feeds.conf.default修改為feeds.conf:
1
cp feeds.conf.default feeds.conf
更新擴展,安裝擴展:
1
2
./scripts/feeds update -a
./scripts/feeds install -a
註:如果不是剛下載的源碼,為保持代碼為最新狀態,應定期運行svn update命令更新源碼。
測試編譯環境:
1
make defconfig
到這里就可以開始編譯自己的固件了。進入定製界面:
1
make menuconfig
如果一切正常,會出現一個配置菜單,可以選擇要編譯的固件平台(晶元類型)、型號,還能選擇固件中要添加的功能和組件,配置好後保存並退出菜單即可。
㈥ 如何在openwrt系統內核源碼中添加列印語句
內核對於mac80211的代碼跟進比較謹慎,openwrt一般使用比較新的mac80211源碼(即自帶的源碼)來生成對應的kmod模塊,而不使用內核源碼包中的mac80211,這就是我在內核源碼包中的mac80211中進行修改時沒有產生效果的原因。隨後,我在內核源碼包同級的目錄下找到了openwrt自帶的mac80211(compat-wireless),在這里進行修改,就可以了。要列印的語句就出現了在kernel log中了。
㈦ openwrt編譯
(!文末,附加人生如戲寫的編譯OPENWRT的TXT內容,可直接跳至末尾,有例子)
Openwrt 官方正式的發行版是已編譯好了的映像文件(後綴名bin或trx、trx2),此映像文件可從Openwrt官方網站的下載頁面中輕松獲取到,連接地址為 OpenWrt官方網站。這些編譯好的映像文件是基於默認的配置設置,且只針對受支持的平台或設備的。因此,為什麼要打造一個自己的映像文件,理由有以下四點:
您想擁有一個個性化的配置OpenWrt(彰顯個性,在朋友圈子裡顯擺顯擺,開個玩笑);
您想在實驗性的平台上測試OpenWrt;
您參與測試或參與開發OpenWrt的工作;
或者,最簡單的目的就是為了保持自己的Openwrt為最新版本;
若想實現上述目的,其實很簡單,按下述文字即可成功編譯出一個您的Openwrt來。
准備工作
在開始編譯Openwrt之前需要您做些准備工作;與其他編譯過程一樣,類似的編譯工具和編譯環境是必不可少的:
一個構建OpenWrt映像的系統平台,簡單說就是准備一個操作系統(比如Ubuntu、Debian等);
確保安裝了所需的依賴關系庫, (在debian系統中就是安裝各種需要的軟體包)
OpenWrt源代碼副本
首先, 開機登陸到支持編譯Openwrt的操作系統(廢話了)。實體機或者虛擬機(Vmware 或者 Qemu)里的操作系統都行,這里推薦使用Linux系統。 bsd和mac osx系統也可以編,但不推薦,且未驗證是否可編譯成功。下文假定您使用的是Debian操作系統,使用 apt-get 來管理包. 替代的選擇是 Ubuntu (分支 Kubuntu, Xubuntu 等即可)。
第二步, 就是安裝所需要的各種軟體包, 包括編譯器,解壓工具,特定的庫等. 這些工作可以簡單的通過鍵入以下命令 (通常需要root 或者是 sudo 許可權),以root許可權安裝下列軟體包(可能並不完整,會有提示,提示缺少即裝就可以了):
32位(x86)請執行下列命令:
# apt-get install build-essential asciidoc binutils bzip2 gawk gettext \
git libncurses5-dev libz-dev patch unzip zlib1g-dev
64位(x86_64)請執行下列命令(多裝了哪些庫或軟體包呢?請您仔細看一看哦):
# apt-get install build-essential asciidoc binutils bzip2 gawk gettext \
git libncurses5-dev libz-dev patch unzip zlib1g-dev ia32-libs \
lib32gcc1 libc6-dev-i386
參考 本列表中 所列的編譯環境所需要軟體包或庫。
某些依賴的為庫或軟體包也許操作系統中已經安裝過,此時apt-get會作出提示(提示您忽略或重新安裝的),別緊張,放輕鬆些,編譯Openwrt不會像編譯DD-WRT那樣難的(至少本人是體會到了編譯DD-WRT的難)。
最後下載一份完整的 Openwrt 源碼到編譯環境中。關於Openwrt的源代碼下載,途徑有二,一是通過 svn ,一是通過 git,建議使用 svn ,因為Openwrt主要以 svn 來維護Openwrt系統的版本。另外,請注意Openwrt中不同的分支版本,一個是用得較多的開發快照,俗稱 trunk,二是穩定版,俗稱 backfire。
安裝Subversion
若你想通過svn下載源代碼,你需安裝 Subversion。Subversion,或稱SVN, 是OpenWrt的project中用來控製版本的系統,它非常類似的 CVS的界面和使用條款。 執行下述命令即可安裝SVN,很容易的:
# apt-get install subversion
Subversion安裝完畢,通過SVN命令可獲取得到一份OpenWrt純凈源代碼。您還得創建一個目錄以便存放獲取得到的Openwrt源代碼,要獲取源代碼你還得輸入subversion命令來獲取 (svn里這種操作稱之為'check out') 。命令很簡單的,繼續看下去就能見到了,別著急,耐心點兒。
編譯流程
編譯專屬於您的設備的特定Openwrt固件以一下五個步驟:
通過Subversion命令獲得源代碼;
更新(或安裝) package feeds[package feeds無法確切翻譯,待譯吧);
創建一個默認配置以檢查編譯環境是否搭建好了 (假如需要的話);
用Menuconfig來配置即將編譯生成的固件映像文件的配置項;
最後開始編譯固件;
下載源代碼
最後,下載一份完整的OpenWrt源代碼。你可選擇:
下載穩定發行版,或
下載開發版 (俗稱"trunk"版)。
使用發行版的源碼
截止本文時, Openwrt公開發行的穩定版為 OpenWrt 10.03 "backfire"。此版本是最穩定的,但也許不包括最新更新的補丁或最新編寫的出的新功能。
下述代碼即舉例說明了通過svn從brandkfire獲得backfire源代碼(此版本意思是從trunk分支的補丁也在backfire版本中了,即包含修復補丁):
# mkdir OpenWrt/
# cd OpenWrt/
# svn co svn://svn.openwrt.org/openwrt/branches/backfire
註解: 上述svn命令將在當前目錄創建一個 OpenWrt/backfire/ 子目錄,此目錄包含此命令獲取到的源代碼。
您也可以通過下述命令,下載不含修復補丁的backfire的原版源碼:
# svn co svn://svn.openwrt.org/openwrt/tags/backfire_10.03
使用開發版源代碼
當前的開發版本分支(trunk)已包含最新的實驗補丁。此分支或許還突破了Openwrt原來所不支持的硬體設備的限制哦,驚喜的同時也有風險存在。因此,編譯trunk版,慎之~
# mkdir OpenWrt/
# cd OpenWrt/
# svn co svn://svn.openwrt.org/openwrt/trunk/
更多詳細資料詳見:
跟進並更新源代碼
因Openwrt的源代碼隨時都會變動,故此命令將確保您所獲取得到的源碼的最新性。下述假設您用的是backfire版本的源碼:
## Here, backfire is the directory name of the current release branch you're tracking
# cd OpenWrt/backfire/
# svn up
'svn up' 命令用於更新SVN上更新了,但本地尚未更新的這部分源代碼(本人實踐證明此命令會將本地源碼與SVN上的源碼先比較,若SVN有更新才會下載更新的部分,很實用的一個命令)。如果未指定目標路徑,則此命令將更新當前目錄及當前目錄的子目錄內的源碼。
Feeds下載
Feeds即為包含到你的OpenWrt環境中的額外軟體包的索引之類的。(feed譯名很多,莫衷一是,至2008年底為止,還沒有一個十分通用而備受認可的中文譯名;所以此文當中我們用英文feed來稱呼)。 最主要的Feeds有以下三個:
'packages' - 路由的基本功能,
'LuCI' - OpenWrt默認的GUI(WEB管理界面), 及
'Xwrt' - 其他的GUI。
一般情況,你至少需要含 'packages' 和 'LuCI'兩個Feeds。
下載完feeds之後, (為編譯OpenWrt的recipies額外的預定義包) 您可以檢查哪些feeds要包括在內。編輯在你的編譯環境的根目錄下的'feeds.conf.default'文件。
然後使用下列命令開始下載(註:可能你需要先運行cd trunk進入trunk目錄才能成功執行下列命令):
# ./scripts/feeds update -a
在此之後,下載的軟體包需要安裝。亦即指的下邊的命令啦。若路過下邊的install命令則後續make menuconfig將無法成功執行!(註:可能你需要先運行cd trunk進入trunk目錄才能成功執行下列命令):
# ./scripts/feeds install -a
只需編輯Feeds的配置文件或運行更新命令,即可很方便地更新或添加新的實驗性的packages到源碼中並編譯到OpenWrt固件去。
注意:請老壇友及舊的新聞組成員們注意了,這一步取代了創建符號鏈接symlinks的老辦法哦。
更新Feeds
諸如此類源碼,你得定期更新Feeds。 通過如上相同的命令:
# ./scripts/feeds update -a
# ./scripts/feeds install -a
注意:若你清楚地知道你不需添加新的packages到menuconfig中去,那麼你可在更新Feeds時跳過這一步。
生成配置
You may not have to make configration always after updating sources and feeds, but making it ensures that all packages from source and feeds are correctly included in your build configuration.
Defconfig
下一步是檢查編譯環境,若可進行編譯則生成默認配置:
# make defconfig
若defconfig回顯提示缺少軟體包或編譯庫等依賴,則按提示安裝所缺軟體包或庫等即可,不難的,細心點就行。
Menuconfig
menuconfig是一個基於文本的工具,它處理選擇的目標(需要還是不需要)、編譯生成軟體包(openwrt下是IPKG格式)以及內核選項(編譯成模塊還是內核)等等
# make menuconfig
在你離開並保存配置文件(默認都是.config)後,將自動配置依賴關系,讓你可以著手編譯更新的固件。
大眾可通過'menuconfig'這一簡單的圖形化的配置環境,非常輕松地編譯出專屬您本人的OpenWrt固件。
可以用'menuconfig',以開發的意圖來編譯OpenWrt的固件,為自己(個人)創造一個結構簡單但是功能強大的環境。(上句實在難翻譯,只能意譯。並且也請大家都學習下編譯OP固件,讓以OP固件盈利的人丟掉那骯臟的飯碗!)
Menuconfig或多或少有些難以說明的地方,即使是最專業的配置,也可以尋求幫助並加以解決。 需要你指定何種目標平台,要包含的package軟體包和內核模塊等均需要你指定,配置標準的過程中會包括修改:
目標平台(即路由器何種架構,BCM呢還是AR均可選擇)
選擇要包含的package軟體包
構建系統設置
內核模塊
Target system is selected from the extensive list of supported platforms, with the numerous target profiles – ranging from specific devices to generic profiles, all depending on the particular device at hand. Package selection has the option of either 'selecting all package', which might be un-practical in certain situation, or relying on the default set of packages will be adequate or make an indivial selection. It is here needed to mention that some package combinations might break the build process, so it can take some experimentation before the expected result is reached. Added to this, the OpenWrt developers are themselves only maintaining a smaller set of packages – which includes all default packages – but, the feeds-script makes it very simple to handle a locally maintained set of packages and integrate them in the build-process.
假如你需要LuCI, 要到Administration 菜單里,在LuCI組件的子菜單下, 並選擇: luci-admin-core, luci-admin-full, and luci-admin-mini組件包。
假如你不需要PPP,你可到Network菜單下取消對它的選擇,以便編譯時不包含此組件。
Menuconfig用法: 確保這些組件包是以 '*'星號標記而不是 'M'標記。
如果你是以星號 '*'標記該組件包, 則該組件包將編譯進最終生成的OpenWrt固件中。
如果你僅以 'M'標記該組件包, 則該組件包將不會編譯進最終生成的OpenWrt固件中。
The final step before the process of compiling the intended image(s) is to exit 'menuconfig' – this also includes the option to save a specific configuration or load an already existing, and pre-configured, version.
Exit and save.
Source Mirrors
The 'Build system settings' include some efficient options for changing package locations which makes it easy to handle a local package set:
Local mirror for source packages
Download folder
In the case of the first option, you simply enter a full URL to the web or ftp server on which the package sources are hosted. Download folder would in the same way be the path to a local folder on the build system (or network). If you have a web/ftp-server hosting the tarballs, the OpenWrt build system will try this one before trying to download from the location(s) mentioned in the Makefiles . Similar if a local 'download folder', residing on the build system, has been specified. The 'Kernel moles' option is required if you need specific (non-standard) drivers and so forth – this would typically be things like moles for USB or particular network interface drivers etc.
編譯固件
萬事具備,只欠東風,通過下面簡單的make命令來編譯:
# make
在多核電腦中編譯
具有多核CPU處理器的電腦進行編譯,使用下述參數可令編譯過程加速。 常規用法為 – 例如使用3進程來編譯 (即雙核CPU), 命令及參數如下:
# make -j 3
後台編譯
若你在這個系統內編譯OpenWrt的同時還處理其他,可以讓閑置的I/O及CPU來在後台編譯固件 (雙核CPU):
# ionice -c 3 nice -n 20 make -j 2
編譯簡單的基本的軟體包
當你為OpenWrt開發或打包軟體包,編譯簡單的基本的軟體包可以很輕易地編譯該軟體包 (例如, 軟體包cups):
# make package/cups/compile V=99
一個在Feeds里的軟體包大約是這樣子的:
# make package/feeds/packages/ndyndns/compile V=99
編譯錯誤
如果因某種不知道的原因而編譯失敗,下面有種簡單的方法來得知編譯到底錯在哪裡了:
# make V=99 2>&1 |tee build.log |grep -i error
上述編譯命令意為:V99參數,將出錯信息保存在build.log,生成輸出完整詳細的副本(with stdout piped to stderr),只有在屏幕上顯示的錯誤。
舉例說明:
# ionice -c 3 nice -n 20 make -j 2 V=99 CONFIG_DEBUG_SECTION_MISMATCH=y 2>&1 \
|tee build.log |egrep -i '(warn|error)'
The above saves a full verbose of the build output (with stdout piped to stderr) in build.log and outputs only warnings and errors while building using only background resources on a al core CPU.
㈧ 如何在VMware中直接跑openwrt
步驟一:拉取源碼
1
在電腦上安裝VMware,在VMware上安裝Ubuntu14.04。
2
在Ubuntu上安裝svn,用於從官網上拉去openwrt源碼,拉取源碼時,會用到git工具,所以同時要安裝git。用以下命令:
sudo apt-get install subversion git-core
3
在拉取源碼之前,要先安裝依賴,用以下命令:
sudo
apt-get install gcc g++ binutils patch bzip2 flex bison make
autoconf gettext textinfo unzip sharutils gawk ncurses-term
zliblg-dev libncurses5-dev
安裝過程中如果有包安裝不上,可以去下載源碼自己編譯安裝。或者下載deb包,用dpkg安裝。
4
通過svn拉取源碼過程如下:
1:在家目錄下新建文件夾:mkdir wrt
2:cd wrt
3:svn co svn://svn.openwrt.org/openwrt/trunk
4:有如圖提示表明拉取完成:
5
下載完成後為了使openwrt支持更多的軟體,需要更新和安裝其它源上的軟體:
1:cd trunk
2:./scripts/feeds update -a
3:./scripts/feeds install -a
END
步驟2:配置、編譯
1
在編譯之前,我們還需要配置內核,就像我們一直Linux一樣:
Make menuconfig 配置內核,這時會出現一個熟悉的界面。如圖:
2
配置過程中,我們還需要配置幾個選項。
Target System:選擇X86。如圖:
3
Target Image:選擇ext4和Build VMware image files(VMDK)。如圖:
4
Kernel
Moles-->Network
Devices:選擇VMware網卡。官網上寫著必須選擇e1000,當我們選擇X86時,這個網卡就已經被選擇了。但是僅僅這個還是不夠的,我們在ubuntu下,使用lspci命令,如下圖,看看自己的VMware網卡是什麼,在配置選項中對應選上。
5
可以看出我的VMware網卡是PCnet32,在網路設備的配置界面中選擇上,如圖:
6
luci界面部分,這個很重要,他是用戶交互的。配置項有以下幾個,如圖:
7
collections中,選擇luci。如圖:
8
Application中,選擇luci-app-ddns,luci-app-firewall,luci-app-ntpc,luci-app-samba。如圖,也可以根據你自己的需要選擇。
9
Themes選項中全部選擇,如圖:
10
若有Translations 選項等,也可以把luci-i18n-chinese選擇上,這樣可以使用中文顯示了。
配置完成,保存之後,開始編譯,編譯的時候注意,openwrt默認是使用非root用戶的。如果你是root用戶,要切換到普通用戶。在以後開發中寫完自己的package之後記得也是用非root用戶編譯。另外編譯時會從網路上拉取依賴包和軟體,所以要保證虛擬機上的系統能上網。然後執行make
V=99,開始漫長的第一次編譯,編譯時間由電腦配置和網速決定。V=99的意思是顯示所有信息。
END
步驟3:VMware下安裝openwrt
1
編譯完成之後,進入到bin目錄下,可以發現很多文件,如圖,找到我們要的openwrt-x86-generic-combined-ext4.vmdk,拖至宿主機上。
2
我們在D盤建立目錄openwrt-vmware,把剛剛的vmdk文件放進去。然後VMware下建立新的虛擬機,選擇自定義模式,下一步,到安裝客戶操作系統時,選擇稍後安裝操作系統,下一步,選擇linux,下拉框中選擇ubuntu就可以,下一步,點擊位置輸入框的瀏覽,選擇剛剛建立的目錄。下一步配置cpu個數,內存,網路,IO控制器。根據需要自行選擇,下一步,選擇磁碟類型的時候,一定要選擇IDE類型。如圖:
3
下一步選擇磁碟,選擇「使用現有虛擬磁碟」,如圖:
4
下一步選擇現有的虛擬磁碟,如圖,瀏覽並選擇openwrt-vmware中的Openwrt-x86-generic-combined-ext4.vmdk。然後下一步,完成。接下來啟動虛擬機開始配置網路,讓我們可以本地瀏覽器訪問我們的openwrt虛擬機上的luci。
END
步驟4:開啟openwrt之旅
創建好了虛擬機,啟動之後。等待一會兒,當openwrt虛擬機完全啟動後,先修改密碼為root,然後執行如下的命令:
cd /etc/config
cat network
在lan->ipaddr中可以看到自己openwrt的IP。openwrt初始的IP是192.168.1.1,如果你的電腦是通過連接路由器上網,路由的默認IP,也就是我們的網關一般也是192.168.1.1,這樣就會沖突,你會連到路由上但是連不到openwrt上。所以我們修改自己的openwrt的IP,修改為192.168.1.3,這里一定要保證在同一個網段。執行如下的命令:
/etc/init.d/network restart
重啟整個網路。在本地ping這個IP,如果能通,表明你可以通過本地的瀏覽器訪問openwrt的網頁。如果不通,可能是網路不再同一網段或者VMware的聯網方式不是橋接。如果還是不通,那要分析具體的原因了。
此時在本地瀏覽器上輸入192.168.1.3,會出現如下的界面:
步驟閱讀
3
輸入密碼root,登錄,出現如下的界面,ok,到此,目的達成。
㈨ 【疑問】openwrt里如何使用make編譯源碼
這有一個安裝包,不知對你有用沒。在X86虛擬機安裝後,就有make了。不過我這還是用不了,提示沒有cc 命令。 http://downloads.openwrt.org/backfire/10.03.1/x86_generic/packages/make_3.81-1_x86.ipk