openwrt固件獲取摘盆、編譯與安裝
參考
在linux下修改編譯網(wǎng)件WNDR3700v4的Openwrt固件
Archlinux 下為 wndr4300 編譯 OpenWrt trunk 版固件
編譯自己的 OpenWrt 固件
【Linux/Ubuntu學習 7】E: 無法獲得鎖 /var/lib/dpkg/lock – open (11: 資源暫時不可用) E: 無法鎖定管理目錄
環(huán)境
路由器 NETGEAR WNDR3700v4
編譯環(huán)境 ubuntu-16.10-desktop-amd64
FAQ
固件的獲取
- openwrt官網(wǎng)/科大清華阿里等的鏡像站下載官方編譯好固件
這類固件比較干凈,里面只帶了一些必要的軟件包
可能沒有我們路由器的型號饱苟,或者無法充分利用路由器升級的內(nèi)存 - 民間大神編輯孩擂,如明月的OPENWRT
這類固件裝了很多軟件包,操作簡單
功能很多箱熬,可能我們用不到 - 自己編譯固件
為什么要自己編譯固件
主要是聽起來很酷
官方的包可能存在問題类垦,例如我的3700v4有120M的flash,官方的包識別32M城须,可以通過自己編譯解決蚤认,而且在編譯時還可以安裝一些軟件包,這樣糕伐,裝完系統(tǒng)后砰琢,很多軟件就不用一個一個裝了
編譯固件
編譯環(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 #這個軟件400M會下載好久
下載源碼
exit #退出root氯析,openwrt默認是不允許用root編譯的
下載源代碼
git clone -b chaos_calmer git://github.com/openwrt/openwrt.git
當然下載方式很多,這里僅是使用git從GitHub下載莺褒,也可以
wget https://github.com/openwrt/openwrt/archive/master.zip
sudu apt-get install zip
unzip master.zip
源碼就在那里openwrt掩缓,下載方法隨意
可以將下載源碼的復制一份,免得之后的修改弄壞了遵岩,還可以重頭來過
編譯前的設置
進入源碼目錄git的目錄為openwrt
cd openwrt
wget后解壓的目錄為openwrt-master
cd openwrt-master
其他方法下載的源碼進入源碼目錄自定義
更新下載并安裝所有可用的 feeds
./scripts/feeds update -a
./scripts/feeds install -a
檢查還有哪些包沒有安裝,根據(jù)提示安裝缺少的軟件包
make defconfig
make prereq
打開配置菜單
make menuconfig
操作規(guī)則
Enter 進入子菜單/確定 空格切換軟件包的狀態(tài) 【*】表示編譯進固件包你辣,【M】表示編譯成安裝文件巡通,【】為不做操作
左右鍵切換最下面的 <Select> < Exit > < Help > < Save > < Load >
< Exit > 返回上級菜單/退出
針對我3700v4選擇以下參數(shù)
CPU型號 Target System 選中’(Atheros AR7xxx/AR9xxx)’
Flash型號 Subtarget 選中 ‘(Genaric devices with NAND flsh)’
路由器型號 Target Profile 選中’(NETGEAR WNDR3700v4/WNDR4300)’
(其他路由器適當選擇,如果官方還沒支持你的路由器舍哄,可按照硬件類似的路由器選擇型號)
選擇自己所需要安裝的包
LuCI –>Collections –> luci #LuCI頁面 參見openwrt使用心得系列----功能實現(xiàn)回帖
Network –>選中wpad 取消wpad-mini 即【*】wpad 【】wpad-mini 校園網(wǎng)認證802.1x用的宴凉,其他軟件包根據(jù)需求安裝/第一次學習也可以不添加軟件包,編譯之后也可以再安裝軟件包
選中< 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)
使整個語段變?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ù)說:j 后面數(shù)字改為你的 cpu 數(shù)量 +1,-j3 表示3線程運行蟆沫,某個線程出錯不會馬上停止構(gòu)建籽暇,而是等待其它線程結(jié)束,真正的錯誤信息被其他線程刷掉了饭庞。所以要-j1更容易找到編譯失敗原因
我第一次使用make -j3 V=s 出錯戒悠,使用make -j1 V=s正常編譯完成
出問題多google,
第一次編譯時間比較長舟山,以后就快了绸狐,大概是因為很多源代碼編譯后,不需要再次編譯了吧
查看編譯出的固件
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等任何方法復制出需要的固件
編譯時遇到的問題
編譯失敗提示
{standardinput}: Fatal error: can't close fs/namespace.o: No space left on device
找到出錯源頭寒矿,可發(fā)現(xiàn)時空間不足
打開ubuntu,ubuntu也提示磁盤不足幅骄,驗證想法正確劫窒,對虛擬機進行擴大磁盤操作解決
make menuconfig
$make menuconfig
Your display is toosmall to run Menuconfig!
觀察提示,我是ssh連接的ubuntu拆座,xshell的窗口太小了,顯示不全配置菜單冠息,放大窗口就可以了
在使用ubuntu apt-get 時挪凑,我遇到過下列錯誤提示
E: 無法獲得鎖 /var/lib/dpkg/lock - open (11: 資源暫時不可用)E: 無法鎖定管理目錄(/var/lib/dpkg/),是否有其他進程正占用它逛艰?
通過下列方法解決
sudo rm /var/cache/apt/archives/locksudo rm /var/lib/dpkg/lock
再次install軟件躏碳,提示:
E: dpkg 被中斷,您必須手工運行 sudo dpkg --configure -a 解決此問題
執(zhí)行
sudo dpkg --configure -a
再次進行安裝
安裝固件
已刷breed或者uboot
電腦通過網(wǎng)線連接路由器散怖,打開瀏覽器輸入192.168.1.1
路由器按住reset鍵菇绵,上電開機
瀏覽器不斷刷新 192.168.1.1 界面直到出現(xiàn)bootloader(breed/uboot)引導界面,松開reset鍵
通過固件更新選項卡镇眷,上傳固件進行升級咬最,支持img和bin格式
我上傳的是openwrt-15.05.1-ar71xx-nand-wndr3700v4-ubi-factory.img文件
上傳重啟
路由器支持bootloader升級,未刷breed/uboot
搜索相應路由器型號的刷機教程
已刷openwrt
可在Luci界面 -》系統(tǒng) -》備份升級 -》 刷寫新固件
選擇openwrt-15.05.1-ar71xx-nand-wndr3700v4-squashfs-sysupgrade.tar文件
版本號相同可以保留原有配置欠动,不同不保留
僅支持.tar格式的文件永乌,如果只有.bin或.img的固件惑申,使用上面的兩種方法
遇到的問題
重啟之后,可能沒有5G的wifi信號翅雏,拔掉電源圈驼,再開機就可以了