1. 程式人生 > >Openwrt研習筆記三之原始碼的下載和編譯

Openwrt研習筆記三之原始碼的下載和編譯

哎呀,昨天拉下一天的筆記沒寫,不過這也不能怪我,是我的網站伺服器出問題了,釋出不了….今天補上昨天的內容

上一篇說到刷TL-WR703N的系統成openwrt,那些都是網上搜羅的,按照著做就好了,先學習才能進步嘛

今天要記錄的內容有:下載原始碼,ubuntu13.04下編譯原始碼

下載原始碼

首先你下載得準備幾個工具,下載工具:svn或者git,編譯工具:ubuntu的編譯軟體

我們還是以ubuntu為介紹先吧,下載ubuntu13.04並安裝,你可以採用virtual box或者vmware,並配置好網路,確保能否上網,也就是要保證apt-get能下載,這一步我在這裡就不做介紹了,改天有時間特別製作一個文章來描述。

如果不能上網,也可以通過DVD包來製作本地更新源來滿足要求,但下載原始碼還是要網路的。

在滿足了擁有ubuntu13.04、網路暢通的情況下,我們開始進行下面的工作。

首先,通過

apt-get install git-core

apt-get install subversion

通過上述兩個命令,我們分別安裝了git和svn工具,這兩個工具是目前網路上使用最為廣泛的程式碼管理工具,其中git適合於分散式,svn適合於集中管理,兩個軟體,我個人認為git更好用,只是git的圖形軟體很不給力,而svn的圖形軟體TortoiseSVN很給力,也很容易理解和上手,只是git在命令列介面也很不錯,只是有些人認為命令列的工具總是不那麼容易讓人理解而已,關於這兩個工具的使用,我也會在另外的文章再做介紹,只是個人使用經驗不多,也只能描述簡單的入門吧。

trunk (main development tree)

  • Main repository
    git clone git://git.openwrt.org/openwrt.git
  • Packages feed
    git clone git://git.openwrt.org/packages.git

12.09 branch (Attitude Adjustment)

  • Main repository
    git clone git://git.openwrt.org/12.09/openwrt.git
  • Packages feed
    git clone git://git.openwrt.org/12.09/packages.git

上面的方法是通過git clone下來的,這裡稍微解釋下,git的意思其實就是指程式碼倉庫,每個git都會在本地擁有一個.git的資料夾進行程式碼的管理,這就方便了個人在本地新增,修改,刪除,回退等操作,git clone是指將一個git庫的程式碼clone到你本地,也就是你clone的程式碼地址和你本地進行同步,同步完成後你本地也成了儲存程式碼的地方。

下載完成後,就能看到對應的檔案。

下圖是通過git下載完成後的tree圖:

[email protected]:/home/geeknimo/disk/study/openwrt_source/git_code# tree -L 3
.
├── 12.09
│   ├── openwrt
│   │   ├── BSDmakefile
│   │   ├── Config.in
│   │   ├── docs
│   │   ├── feeds.conf.default
│   │   ├── include
│   │   ├── LICENSE
│   │   ├── Makefile
│   │   ├── package
│   │   ├── README
│   │   ├── rules.mk
│   │   ├── scripts
│   │   ├── target
│   │   ├── toolchain
│   │   └── tools
│   └── packages
│   ├── admin
│   ├── devel
│   ├── ipv6
│   ├── lang
│   ├── libs
│   ├── mail
│   ├── multimedia
│   ├── net
│   ├── skels
│   ├── sound
│   └── utils
└── trunk
├── openwrt
│   ├── BSDmakefile
│   ├── Config.in
│   ├── docs
│   ├── feeds.conf.default
│   ├── include
│   ├── LICENSE
│   ├── Makefile
│   ├── package
│   ├── README
│   ├── rules.mk
│   ├── scripts
│   ├── target
│   ├── toolchain
│   └── tools
└── packages
├── admin
├── devel
├── ipv6
├── lang
├── libs
├── mail
├── multimedia
├── net
├── send
├── skels
├── sound
└── utils

43 directories, 14 files

svn的下載方法如下:

  • Development branch: ​ChangeLog

    svn co svn://svn.openwrt.org/openwrt/trunk/
  • Attitude Adjustment 12.09 branch: ​ChangeLog
    svn co svn://svn.openwrt.org/openwrt/branches/attitude_adjustment
  • Backfire 10.03 branch: ​ChangeLog
    svn co svn://svn.openwrt.org/openwrt/branches/backfire
  • Kamikaze 8.09 branch: ​ChangeLog
    svn co svn://svn.openwrt.org/openwrt/branches/8.09
  • Kamikaze 7.09 branch: ​ChangeLog

    svn co svn://svn.openwrt.org/openwrt/tags/kamikaze_7.09

svn的程式碼我就不貼上來,大致是一樣的。

編譯原始碼

下載好原始碼後,還需要準備編譯工具,安裝的軟體有些多,如果你不是root使用者登陸的話,請使用sudo來執行命令。

sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev subversion git-core gawk asciidoc libz-dev

這個安裝需要一些時間,所以建議大家還是製作本地的下載源比較好。

準備好上面的工具後我們就可以開始編譯了。

進入到原始碼所在的目錄,我這裡選取的是主branch的openwrt的程式碼庫

假設程式碼所在的位置為:

/home/geeknimo/disk/study/openwrt_source/git_code/trunk/openwrt

將openwrt的整個目錄及子目錄都賦予777許可權,並進行原始碼更新

chmod -R 777 openwrt

git pull

更新完畢後,進行種子更新

操作方法
  • 更新種子列表,看起來是
./scripts/feeds update -a
  • 更新種子在menuconfig中的顯示列表
./scripts/feeds install -a

這個更新也需要一些時間。

更新完畢後,再進行安裝下,這兩個步驟完成後開始進行編譯前配置了。

make defconfig

make menuconfig

執行這個命令的時候還提示瞭如下錯誤:

Build dependency: Please do not compile as root.

Prerequisite check failed. Use FORCE=1 to override.
make: *** [tmp/.prereq-build] Error 1
[email protected]:/home/geeknimo/disk/study/openwrt_source/git_code/trunk/openwrt#

竟然還不能用root使用者進行編譯,不過我在後面加上了 FORCE=1,呵呵,這也是可以的,不過還是建議大家換成普通使用者進行。

QQ截圖20131016223234

在這裡進行我們所需要的配置

首先選擇Target System為Atheros AR7xxx/AR9xxx,因為我們的TL-WR703N的主晶片是屬於Atheros公司的Atheros AR7240 CPU

其次選擇Target Profile是選擇路由器的型號,我們選擇(TP-LINK TL-WR703N)

其他的就看自己的喜好了,我隨意勾選了一些,先編譯了試試,據說這個編譯普通的機器要3-5個小時,囧。

明天再說結果把,今天就到這裡了。