openwrt固件獲取、編譯與安裝

openwrt固件獲取、編譯與安裝

參考

在linux下修改編譯網(wǎng)件WNDR3700v4的Openwrt固件
Archlinux 下為 wndr4300 編譯 OpenWrt trunk 版固件
編譯自己的 OpenWrt 固件
【Linux/Ubuntu學(xué)習(xí) 7】E: 無法獲得鎖 /var/lib/dpkg/lock – open (11: 資源暫時(shí)不可用) E: 無法鎖定管理目錄

環(huán)境

路由器 NETGEAR WNDR3700v4
編譯環(huán)境 ubuntu-16.10-desktop-amd64

FAQ

固件的獲取

  1. openwrt官網(wǎng)/科大清華阿里等的鏡像站下載官方編譯好固件
    這類固件比較干凈,里面只帶了一些必要的軟件包
    可能沒有我們路由器的型號(hào),或者無法充分利用路由器升級(jí)的內(nèi)存
  2. 民間大神編輯,如明月的OPENWRT
    這類固件裝了很多軟件包,操作簡單
    功能很多,可能我們用不到
  3. 自己編譯固件

為什么要自己編譯固件

主要是聽起來很酷
官方的包可能存在問題,例如我的3700v4有120M的flash,官方的包識(shí)別32M,可以通過自己編譯解決,而且在編譯時(shí)還可以安裝一些軟件包,這樣,裝完系統(tǒng)后,很多軟件就不用一個(gè)一個(gè)裝了

編譯固件

編譯環(huán)境 ubuntu-16.10-desktop-amd64 的硬盤空間至少剩余20G,在編譯的過程中雖然源代碼100M左右,但是編譯產(chǎn)生的中間文件有10G左右

安裝編譯環(huán)境和依賴

Ubuntu終端內(nèi)輸入

sudo su
apt-get update    #更新軟件列表
apt-get install g++
apt-get install libncurses5-dev
apt-get install zlib1g-dev
apt-get install bison
apt-get install flex
apt-get install unzip
apt-get install autoconf
apt-get install gawk
apt-get install make
apt-get install gettext
apt-get install gcc
apt-get install binutils
apt-get install patch
apt-get install bzip2
apt-get install libz-dev
apt-get install subversion
apt-get install asciidoc  #這個(gè)軟件400M會(huì)下載好久

下載源碼

exit #退出root,openwrt默認(rèn)是不允許用root編譯的

下載源代碼

git clone -b chaos_calmer git://github.com/openwrt/openwrt.git

當(dāng)然下載方式很多,這里僅是使用git從GitHub下載,也可以

wget https://github.com/openwrt/openwrt/archive/master.zip
sudu apt-get install zip
unzip master.zip

源碼就在那里openwrt,下載方法隨意
可以將下載源碼的復(fù)制一份,免得之后的修改弄壞了,還可以重頭來過

編譯前的設(shè)置

進(jìn)入源碼目錄git的目錄為openwrt

cd openwrt

wget后解壓的目錄為openwrt-master

cd openwrt-master

其他方法下載的源碼進(jìn)入源碼目錄自定義

更新下載并安裝所有可用的 feeds

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

檢查還有哪些包沒有安裝,根據(jù)提示安裝缺少的軟件包

make defconfig
make prereq

打開配置菜單

make menuconfig

配置菜單

操作規(guī)則
Enter 進(jìn)入子菜單/確定 空格切換軟件包的狀態(tài) 【*】表示編譯進(jìn)固件包,【M】表示編譯成安裝文件,【】為不做操作
左右鍵切換最下面的 <Select> < Exit > < Help > < Save > < Load >
< Exit > 返回上級(jí)菜單/退出

針對(duì)我3700v4選擇以下參數(shù)
CPU型號(hào) Target System 選中’(Atheros AR7xxx/AR9xxx)’
Flash型號(hào) Subtarget 選中 ‘(Genaric devices with NAND flsh)’
路由器型號(hào) Target Profile 選中’(NETGEAR WNDR3700v4/WNDR4300)’
(其他路由器適當(dāng)選擇,如果官方還沒支持你的路由器,可按照硬件類似的路由器選擇型號(hào))

選擇自己所需要安裝的包
LuCI –>Collections –> luci #LuCI頁面 參見openwrt使用心得系列----功能實(shí)現(xiàn)回帖

Network –>選中wpad 取消wpad-mini 即【*】wpad 【】wpad-mini 校園網(wǎng)認(rèn)證802.1x用的,其他軟件包根據(jù)需求安裝/第一次學(xué)習(xí)也可以不添加軟件包,編譯之后也可以再安裝軟件包

選中< Save > 保存 < Exit > 退出
執(zhí)行scripts/diffconfig.sh > diffconfig 保存修改內(nèi)容至diffconfig文件。


其他修改
我需要修改3700v4的flash大小,

vi ./target/linux/ar71xx/image/Makefile  #修改Makeflie文件

/wndr4300 搜索 wndr4300
23552k(ubi),25600k@0x6c0000(firmware)修改為121856k(ubi),123904k@0x6c0000(firmware)
使整個(gè)語段變?yōu)?/p>

wndr4300_mtdlayout=mtdparts=ar934x-nfc:256k(u-boot)ro,256k(u-boot-env)ro,256k(caldata),512k(pot),2048k(language),512k(config),3072k(traffic_meter),2048k(kernel),121856k(ubi),123904k@0x6c0000(firmware),256k(caldata_backup),-(reserved)

esc退出編輯狀態(tài) :wq 保存退出


編譯

make -j3 V=s  #第一次更推薦你輸入make -j1 V=s進(jìn)行編譯

據(jù)說:j 后面數(shù)字改為你的 cpu 數(shù)量 +1,-j3 表示3線程運(yùn)行,某個(gè)線程出錯(cuò)不會(huì)馬上停止構(gòu)建,而是等待其它線程結(jié)束,真正的錯(cuò)誤信息被其他線程刷掉了。所以要-j1更容易找到編譯失敗原因
我第一次使用make -j3 V=s 出錯(cuò),使用make -j1 V=s正常編譯完成
出問題多google,

第一次編譯時(shí)間比較長,以后就快了,大概是因?yàn)楹芏嘣创a編譯后,不需要再次編譯了吧

查看編譯出的固件

chen@chen-virtual-machine:/media/chen/openwrt$ cd ./bin/ar71xx 
chen@chen-virtual-machine:/media/chen/openwrt/bin/ar71xx$ ls
md5sums                                openwrt-ar71xx-nand-vmlinux.elf                         openwrt-ar71xx-nand-wndr4300-squashfs-sysupgrade.tar
openwrt-ar71xx-nand-root.squashfs      openwrt-ar71xx-nand-vmlinux.gz                          openwrt-ar71xx-nand-wndr4300-ubi-factory.img
openwrt-ar71xx-nand-root.squashfs-64k  openwrt-ar71xx-nand-vmlinux.lzma                        packages
openwrt-ar71xx-nand-uImage-gzip.bin    openwrt-ar71xx-nand-vmlinux-lzma.elf                    sha256sums
openwrt-ar71xx-nand-uImage-lzma.bin    openwrt-ar71xx-nand-wndr3700v4-squashfs-sysupgrade.tar
openwrt-ar71xx-nand-vmlinux.bin        openwrt-ar71xx-nand-wndr3700v4-ubi-factory.img

使用U盤,winscp等任何方法復(fù)制出需要的固件

編譯時(shí)遇到的問題


編譯失敗提示

{standardinput}: Fatal error: can't close fs/namespace.o: No space left on device

找到出錯(cuò)源頭,可發(fā)現(xiàn)時(shí)空間不足
打開ubuntu,ubuntu也提示磁盤不足,驗(yàn)證想法正確,對(duì)虛擬機(jī)進(jìn)行擴(kuò)大磁盤操作解決


make menuconfig

$make menuconfig
Your display is toosmall to run Menuconfig!

觀察提示,我是ssh連接的ubuntu,xshell的窗口太小了,顯示不全配置菜單,放大窗口就可以了


在使用ubuntu apt-get 時(shí),我遇到過下列錯(cuò)誤提示

E: 無法獲得鎖 /var/lib/dpkg/lock - open (11: 資源暫時(shí)不可用)E: 無法鎖定管理目錄(/var/lib/dpkg/),是否有其他進(jìn)程正占用它?

通過下列方法解決

sudo rm /var/cache/apt/archives/locksudo rm /var/lib/dpkg/lock

再次install軟件,提示:

E: dpkg 被中斷,您必須手工運(yùn)行 sudo dpkg --configure -a 解決此問題

執(zhí)行

sudo dpkg --configure -a

再次進(jìn)行安裝

安裝固件

已刷breed或者uboot
電腦通過網(wǎng)線連接路由器,打開瀏覽器輸入192.168.1.1
路由器按住reset鍵,上電開機(jī)
瀏覽器不斷刷新 192.168.1.1 界面直到出現(xiàn)bootloader(breed/uboot)引導(dǎo)界面,松開reset鍵
通過固件更新選項(xiàng)卡,上傳固件進(jìn)行升級(jí),支持img和bin格式
我上傳的是openwrt-15.05.1-ar71xx-nand-wndr3700v4-ubi-factory.img文件
上傳重啟
路由器支持bootloader升級(jí),未刷breed/uboot
搜索相應(yīng)路由器型號(hào)的刷機(jī)教程
已刷openwrt
可在Luci界面 -》系統(tǒng) -》備份升級(jí) -》 刷寫新固件
選擇openwrt-15.05.1-ar71xx-nand-wndr3700v4-squashfs-sysupgrade.tar文件
版本號(hào)相同可以保留原有配置,不同不保留
僅支持.tar格式的文件,如果只有.bin或.img的固件,使用上面的兩種方法

遇到的問題

重啟之后,可能沒有5G的wifi信號(hào),拔掉電源,再開機(jī)就可以了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前置條件 編譯環(huán)境:Linuxmint 18.2 64-Bit 路由器型號(hào):TP-LINK TL-WR720N v...
    suanite閱讀 20,814評(píng)論 2 13
  • 玩openwrt的基礎(chǔ) 參考 什么是Flash內(nèi)存?Flash內(nèi)存是什么? 名詞解釋 openwrt openwr...
    cndaqiang閱讀 8,902評(píng)論 0 7
  • 因?yàn)槭仲v入了斐訊k2,拿來直接網(wǎng)上找教程。有一鍵刷breed的腳本,挺好用的,就是要路由器自己有網(wǎng)。建議下次可以...
    貧道法號(hào)三刀閱讀 1,927評(píng)論 0 1
  • 本來想畫好后上色的,用App試了一下,還不如黑色有質(zhì)感,所以人工智能不那么全面,還是比不上手工啊。 生活不是要過得...
    艾娃手繪閱讀 317評(píng)論 0 4
  • 喜歡文字是什么樣的呢?我覺得文字只是一種表現(xiàn)形式,是思想的表現(xiàn),愛文字可能更多的是愛思想,喜歡腦海中的景色,喜歡腦...
    尹相華顏閱讀 203評(píng)論 0 0

友情鏈接更多精彩內(nèi)容