OpenWRT 編譯過程

1、使用Ubuntu編譯OpenWRT源碼

第一步:安裝基礎軟件python

sudo apt-get install subversion g++ zlib1g-dev build-essential git python rsync man-db
sudo apt-get install libncurses5-dev gawk gettext unzip file libssl-dev wget zip time

 

第二步:克隆代碼linux

複製代碼
git clone https://git.openwrt.org/openwrt/openwrt.git/
或者分支 https://github.com/lede-project/source.git cd openwrt ./scripts/feeds update -a // 更新最新的包 ./scripts/feeds install -a // 下載全部安裝全部包 目錄 package/feeds/
# 使用feeds.conf.default 默認配置進行軟件包的更新與安裝

make defconfig // 檢查編譯工具是否全,生成.config文件 make menuconfig // 打開編譯菜單
複製代碼

 

解釋 git

OpenWRT Feed 機制github

參考文檔: https://openwrt.org/docs/guide-developer/feedsubuntu

在Openwrt系統中,「feed」是一系列的軟件包,這些軟件包須要經過一個統一的接口地址進行訪問。服務器

「feed」軟件包中的軟件包可能分佈在遠程服務器上、在svn上、在本地文件系統中或者其餘的地方,app

用戶能夠經過一種支持feed機制的協議,經過同一個地址進行訪問。tcp

 

第三步:配置ide

Target System - 表示目標機器CPU型號svn

Target Profile - 表示目標機器設備型號

 

第四步:編譯

make V=99    // V = verbose 所有都顯示

 

解釋 

clean 命令

make clean      # rm -rf bin  build_dir

make dirclean  # rm -rf bin build_dir staging_dir toolchain logs 

make distclean # 刪除以上全部文件 , dl 和 .config

 

對於特定組件進行clean

make target/linux/clean V=s

make package/luci/clean

 

 

 

2、OpenWRT BuildRoot 環境

OpenWRT 源碼是由一堆makefile 和 補丁組成的,源代碼中不包括任何的源代碼或內核代碼,使用腳本與

makefile來定義須要下載哪些文件與打上補丁。

代碼結構以下

 

tools - 包含了從網上下載編譯OpenWRT全部的編譯工具

toolchain - 包含了 kernel 頭文件,C庫,binutils, debugger等

target - 包含了特定平臺的文件,固件鏡像和內核構建過程的索引,以及生成編譯器個編譯工具。

            其中linux目錄下爲各個平臺<arch>的相應的內核patches,

            配置文件等,imagebuilder目錄則掃描如何生成這個平臺的固件。源碼包就有的。

            用來指導如何編譯firmware和內核,以及sdk。

package - 在openwrt中,基礎的軟件包目錄爲package,擴展的軟件包在feeds中,feeds中的軟件擴展了openwrt的基本功能,

                 它將全部的軟件連接到package/feeds中。這些軟件大多數都是編譯成.ipk格式的。這裏面有內核模塊文件。

                 有各類軟件的源碼,以及patch文件和Makefile用來下載源碼的。源碼包就有。裏面是隨openwrt主版本就提供的包。

                 除了用戶態的N多模塊外,還有kernel目錄,用來定義內核模塊

feeds -  make以後的新增目錄。裏面存放的就是按照feeds.conf.default文件中列舉的要處理的文件,所展開獲得的目錄。

             目錄中存放的東西,和package目錄中大體類似。指導如何下載和編譯對應模塊的)。

scripts - Perl腳本管理OpenWRT包的安裝與卸載

dl - 編譯工具,目標,package所須要的軟件包將從網上下載放到dl目錄中
build_dir - 一個臨時目錄,用來將全部須要編譯的軟件源碼放到這個目錄中進行編譯。它包括一下三個目錄:
                 build_dir/host:  與編譯目標無關的工具的臨時文件夾
                 build_dir/<arch>*: 做爲全部目標,package編譯的臨時目錄
                 build_dir/toolchain-<arch>*:  編譯特定體系的交叉編譯鏈的文件夾
         
staging_dir - 用於存放構建目標系統鏡像的工具軟件,包括:
                     staging_dir/host:  宿主系統使用的工具
                     staging_dir/<arch>*:  目標系統使用的軟件軟件包
                     staging_dir/<toolchain-<arch>*: 交叉編譯工具鏈
                     目錄的做用是:build_dir是編譯的地方,那麼這裏就是把build_dir的結果放在了staging_dir目錄了。
 
bin目錄 - make以後的新增目錄,用來存放make的結果。
               好比我是用來編譯ramips的,則此目錄中會有:ramips子目錄,其中又包含:
               packages子目錄(裏面含有各類.ipk文件,以及一個Packages文件用來介紹此目錄中的每一個ipk文件)和能夠燒入路由器的***.bin固件。
 
Makefile文件:make命令的總入口
rules.mk文件:定義了一系列在make時使用的規則
.config隱藏文件:makemenuconfig後的保存的配置文件。  
.config.old隱藏文件:老的.config文件

 

簡言之,編譯過程以下:

1. 下載交叉編譯工具,內核頭文件,C庫等。

2. 設置 staging_dir 目錄,交叉編譯的toolchain會安裝到這裏。

3. 建立 dl 目錄, 全部的第三方源碼包會被下載到這裏

4. 建立build_dir目錄, 用戶態工具會被編譯到這裏

5. 建立 build_dir/target-arch/root 和 目標平臺根文件系統

6. 在根文件系統中安裝全部包,最後生成的鏡象會在bin/目錄中

 

手動編譯過程以下

make download 下載全部已選擇的軟件代碼壓縮包

1. make tools/install

2. make toolchain/install

3. make target/compile

4. make package/cleanup

5. make package/compile   # 編譯包

6. make package/install      #  安裝包

7. make package/preconfig

8. make target/install

9. make package/index

 

單獨編譯軟件包

make package/tcpdump/clean  清除編譯生成的文件

make package/tcpdump/prepare 進行編譯準備

make package/tcpdump/configure  根據設置選項進行配置並生成Makefile

make package/tcpdump/compile   根據生成的Makefile進行編譯

make package/tcpdump/install  生成安裝包

 

 

 

3、OpenWRT In Qemu

1. 配置編譯文件

make menuconfig

 

Target System -  選擇 MIPS Malta CoreLV board(qemu)

Subtarget - Little Endian

Target Profile - Default

Target Image - 選擇 ext4

Global Build Settings - 默認便可

 

2. 編譯 make V=99

 

3. 編譯完成後,在目錄 bin/target/下有一個malta目錄

複製代碼
ubuntu:~/openwrt/bin/targets/malta/le$ ls -l
total 272708
-rw-r--r-- 1 ubuntu ubuntu       329 Sep 10 13:39 config.seed
-rw-r--r-- 1 ubuntu ubuntu      1959 Sep 10 13:59 openwrt-malta-le-default.manifest
-rw-r--r-- 1 ubuntu ubuntu 268435456 Sep 10 13:59 openwrt-malta-le-root.ext4
-rw-r--r-- 1 ubuntu ubuntu   2727322 Sep 10 13:59 openwrt-malta-le-uImage-gzip
-rw-r--r-- 1 ubuntu ubuntu   1940771 Sep 10 13:59 openwrt-malta-le-uImage-lzma
-rwxr-xr-x 1 ubuntu ubuntu   6125260 Sep 10 13:59 openwrt-malta-le-vmlinux.elf
drwxr-xr-x 2 ubuntu ubuntu      4096 Sep 10 13:59 packages
-rw-r--r-- 1 ubuntu ubuntu       556 Sep 10 14:00 sha256sums
ubuntu:~/openwrt/bin/targets/malta/le$ 
複製代碼

 

 

4. 拷貝 openwrt-malta-le-root.ext4 與 openwrt-malta-le-vmlinux.elf 文件

 

5.  安裝軟件

sudo apt-get install qemu-kvm qemu virt-manager virt-viewer libvirt-bin

 

6. 運行

sudo qemu-system-mipsel -M malta -hda openwrt-malta-le-root.ext4 -kernel openwrt-malta-le-vmlinux.elf -nographic -append "root=/dev/sda console=tty50"

相關文章
相關標籤/搜索