數位天堂

Nokia:科技始終來自於人性; 拜耳:如果文明不能使我們更相愛,那科技便失去意義!
歡迎您的加入,讓我們一起討論科技與環保的整合應用...

您尚未登入。

#1 2012-10-25 17:49:24

changeway
精靈
註冊日期: 2009-12-17
文章數: 38
目前積分 :   

MacOS X下編譯OpenWrt

前言:
這陣子開始玩手邊的SMCWGBR14-N2
因為我有台MacMini Server (沒錯!就是那出包版)
所以編譯的環境就用MacOS的環境,分享自己編譯的經驗。

http://wiki.openwrt.org/zh-tw/doc/howto … t.exigence
http://wiki.openwrt.org/zh-tw/doc/howto/build
https://forum.openwrt.org/viewtopic.php?id=34676
基本上的動作都跟OpenWrt論壇上的這篇文章差不多。
(繁體中文的Wiki就是小弟這幾天混水摸魚翻譯的,翻不好看不懂的也請告知我)


MacOSX的準備動作:
1. Case-senstive file system
OpenWrt的編譯環境大小寫是有區別的,但是MacOSX預設的檔案系統是沒有區分大小寫的。
開啟Disk Utility程式,把硬碟格式化成Mac OS Extended (case-sensitive)
我是直接把MacMini Server的第二顆硬碟重新格式化。
官方說至少需要3到4G的硬碟空間來做編譯。

2. Install macport
如果想要在MacOSX上有個類似Linux的環境,可以安裝這個強大的Macport,就像在Ubuntu上有的apt-get一樣,有很多預先編譯好的套件可以直接安裝。
安裝部分就請參考macport官網的說明
http://guide.macports.org/#installing
會需要安裝Xcode,我的是10.6版所以要在Apple開發者網站上找3.X版來裝。
如果是10.7之後的版本,在MacApp Store上就可以安裝4.X版了。

3.安裝必要套件
安裝好Macport之後,
先更新macport,並安裝subversion這個版本控制軟體。

sudo port -v selfupdate && sudo port install subversion


我有遇到一些編譯會出現問題需要用gnu的套件,所以需要再裝

安裝tar

sudo port install gnutar


因為Mac預設的tar是bsdtar,裝完gnutar後可以用這個命令把預設的tar換成gnutar

sudo ln -sf /usr/bin/gnutar /usr/bin/tar


安裝coreutils

sudo port install coreutils +with_default_name


然後把/opt/local/libexec/gnubin的路徑加到path的最前面,就可以用gnu的套件執行了
我的做法是 修改我家目錄的 ~/.profile 檔

export PATH=/opt/local/libexec/gnubin/:/opt/local/bin:/opt/local/sbin:$PATH


再來安裝建置所需的套件

sudo port install asciidoc bzip2 fastjar flex getopt gtk2 intltool jikes zlib openssl p5-extutils-makemaker python26 rsync ruby sdcc unzip gettext libxslt bison gawk autoconf wget gmake ncurses e2fsprogs ossp-uuid


開始打造自己的OpenWrt:
請先注意
*不要使用 root帳號
*所有的命令必須在 目錄底下執行, 如 ~/openwrt/trunk/
*不要在完整路徑名中有空白的資料夾下建置


1.下載OpenWrt的原始檔
切換到格式化成Case-senstive file system的檔案系統
以我的話是在/Volumes/HD1

我是直接抓新的attitude_adjustment 分支

svn co svn://svn.openwrt.org/openwrt/branches/attitude_adjustment


或是抓開發中的trunk版本

svn co svn://svn.openwrt.org/openwrt/trunk/


2. 下載feeds

所謂的feeds就是OpenWrt提供的套件組,會想要自己編譯,也就是為了直接裝好特定的套件和設定。

./scripts/feeds update -a ./scripts/feeds install -a


這兩個步驟會把現有的套件目錄加到編譯的選單裡。

3.為了MacOS X的修改
就如同Wiki上所描述的,需要修改 ./tools/Makefile
第17行, 刪掉 "e2fsprogs" 其他保留。如:

tools-y += sstrip ipkg-utils genext2fs mtd-utils mkimage


把第 22, 56, 58, 64 行的最前面加上 # 註解。這幾行應如:

tools-$(CONFIG_TARGET_x86) += qemu $(curdir)/mtd-utils/compile := $(curdir)/e2fsprogs/install $(curdir)/xz/install $(curdir)/qemu/compile := $(curdir)/e2fsprogs/install $(curdir)/e2fsprogs/compile := $(curdir)/automake/install


然後複製需要的標頭檔和函式庫來編譯tools/mtd-utils

mkdir -p staging_dir/host/include/e2fsprogs; mkdir -p staging_dir/host/lib; cp -R /opt/local/include/ossp staging_dir/host/include/e2fsprogs/; cp /opt/local/lib/libuuid* staging_dir/host/lib


4.編譯套件設定
接下來的動作就開始做make

make menuconfig


就會出現文字的選單介面,依照你手頭的機器選好晶片平台跟機器型號。
https://digiland.tw/uploads/2540_menuconfig.jpg
以我的SMCWGBR14-N2為例,雖然OpenWrt沒寫支援這台。但是骨子裡完全和TP-Link TL-WR1043ND一樣
所以就選
Target System (Atheros AR7xxx/AR9xxx)
Target Profile (TP-LINK TL-WR1043N/ND)

再選好基本的幾個套件,儲存離開。

5.編譯
最簡單的就是下個

make


這個時候請確保你的網路是通的,因為這時候會開始下載你所選套件的原始檔。
放到dl資料夾裡,然後再解開編譯。
不過為了怕編譯出問題,所以我還是建議用這個命令來編譯:

make V=99 2>&1 | tee build.log | grep -i error


這樣就會把編譯結果輸出到build.log去,螢幕會顯示有error的部分。

6.編譯完成
如果一切順利,最後產生的firmware檔會在

./bin/ar71xx/


像我是要透過Console在bootloader做firmware更新的,就要用openwrt-ar71xx-generic-tl-wr1043nd-v1-squashfs-factory.bin。
安裝的方式每台機器都不一樣,我是參考TP-Link TL-WR1043ND的文件
http://wiki.openwrt.org/toh/tp-link/tl- … stallation


心得:
自己一直以來都是用Fon在玩的,所以之前都是自己編譯Fon的韌體。但是Fon又是基於OpenWrt開發的。
玩到現在覺得Fon的介面雖然做的相當不錯,但是支援跟更新的頻率實在比不上OpenWrt。(我個人不喜歡dd-wrt,不肯開放程式碼)
剛好之前有撿到這台SMC的機器可以玩。就來裝OpenWrt試試了。

在MacOSX編譯通常會不太順利,會缺東缺西的。不然就是某個指令的某個選項沒支援。有些套件怎麼也編譯不過。
根據這次的經驗,還是建議大家弄個標準的Linux環境來做吧。

覺得OpenWrt的中文資訊真的很少,英文的部分到是挺多的。有志一同的版友可以一起來幫忙做中文Wiki。
另外一提,有看到一些繁體中文的Wiki翻譯,似乎也是站上有註冊的網友。




離線

 

#2 2012-10-25 22:10:03

wen1977
老司機
註冊日期: 2009-04-29
文章數: 304
目前積分 :   

Re: MacOS X下編譯OpenWrt

寫得很詳盡喔yes
可惜我沒有MacOS可用



離線

 

友情連結

論壇頁尾

Powered by PunBB
© Copyright 2018 Rickard Andersson
RSS Feed