第一步:安裝基礎軟件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
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包的安裝與卸載
簡言之,編譯過程以下:
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 生成安裝包
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"