openwrt固件获取、编译与安装

openwrt固件获取、编译与安装

参考

在linux下修改编译网件WNDR3700v4的Openwrt固件
Archlinux 下为 wndr4300 编译 OpenWrt trunk 版固件
编译自己的 OpenWrt 固件
【Linux/Ubuntu学习 7】E: 无法获得锁 /var/lib/dpkg/lock – open (11: 资源暂时不可用) E: 无法锁定管理目录

环境

路由器 NETGEAR WNDR3700v4
编译环境 ubuntu-16.10-desktop-amd64

FAQ

固件的获取

  1. openwrt官网/科大清华阿里等的镜像站下载官方编译好固件
    这类固件比较干净,里面只带了一些必要的软件包
    可能没有我们路由器的型号,或者无法充分利用路由器升级的内存
  2. 民间大神编辑,如明月的OPENWRT
    这类固件装了很多软件包,操作简单
    功能很多,可能我们用不到
  3. 自己编译固件

为什么要自己编译固件

主要是听起来很酷
官方的包可能存在问题,例如我的3700v4有120M的flash,官方的包识别32M,可以通过自己编译解决,而且在编译时还可以安装一些软件包,这样,装完系统后,很多软件就不用一个一个装了

编译固件

编译环境 ubuntu-16.10-desktop-amd64 的硬盘空间至少剩余20G,在编译的过程中虽然源代码100M左右,但是编译产生的中间文件有10G左右

安装编译环境和依赖

Ubuntu终端内输入

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

检查还有哪些包没有安装,根据提示安装缺少的软件包

make defconfig
make prereq

打开配置菜单

make menuconfig

配置菜单

操作规则
Enter 进入子菜单/确定 空格切换软件包的状态 【*】表示编译进固件包,【M】表示编译成安装文件,【】为不做操作
左右键切换最下面的 <Select> < Exit > < Help > < Save > < Load >
< Exit > 返回上级菜单/退出

针对我3700v4选择以下参数
CPU型号 Target System 选中’(Atheros AR7xxx/AR9xxx)’
Flash型号 Subtarget 选中 ‘(Genaric devices with NAND flsh)’
路由器型号 Target Profile 选中’(NETGEAR WNDR3700v4/WNDR4300)’
(其他路由器适当选择,如果官方还没支持你的路由器,可按照硬件类似的路由器选择型号)

选择自己所需要安装的包
LuCI –>Collections –> luci #LuCI页面 参见openwrt使用心得系列----功能实现回帖

Network –>选中wpad 取消wpad-mini 即【*】wpad 【】wpad-mini 校园网认证802.1x用的,其他软件包根据需求安装/第一次学习也可以不添加软件包,编译之后也可以再安装软件包

选中< Save > 保存 < Exit > 退出
执行scripts/diffconfig.sh > diffconfig 保存修改内容至diffconfig文件。


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

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

/wndr4300 搜索 wndr4300
23552k(ubi),25600k@0x6c0000(firmware)修改为121856k(ubi),123904k@0x6c0000(firmware)
使整个语段变为

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退出编辑状态 :wq 保存退出


编译

make -j3 V=s  #第一次更推荐你输入make -j1 V=s进行编译

据说:j 后面数字改为你的 cpu 数量 +1,-j3 表示3线程运行,某个线程出错不会马上停止构建,而是等待其它线程结束,真正的错误信息被其他线程刷掉了。所以要-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

找到出错源头,可发现时空间不足
打开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 解决此问题

执行

sudo dpkg --configure -a

再次进行安装

安装固件

已刷breed或者uboot
电脑通过网线连接路由器,打开浏览器输入192.168.1.1
路由器按住reset键,上电开机
浏览器不断刷新 192.168.1.1 界面直到出现bootloader(breed/uboot)引导界面,松开reset键
通过固件更新选项卡,上传固件进行升级,支持img和bin格式
我上传的是openwrt-15.05.1-ar71xx-nand-wndr3700v4-ubi-factory.img文件
上传重启
路由器支持bootloader升级,未刷breed/uboot
搜索相应路由器型号的刷机教程
已刷openwrt
可在Luci界面 -》系统 -》备份升级 -》 刷写新固件
选择openwrt-15.05.1-ar71xx-nand-wndr3700v4-squashfs-sysupgrade.tar文件
版本号相同可以保留原有配置,不同不保留
仅支持.tar格式的文件,如果只有.bin或.img的固件,使用上面的两种方法

遇到的问题

重启之后,可能没有5G的wifi信号,拔掉电源,再开机就可以了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,042评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,996评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,674评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,340评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,404评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,749评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,902评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,662评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,110评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,577评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,258评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,848评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,726评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,952评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,271评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,452评论 2 348

推荐阅读更多精彩内容

  • 前置条件 编译环境:Linuxmint 18.2 64-Bit 路由器型号:TP-LINK TL-WR720N v...
    suanite阅读 20,275评论 2 13
  • 玩openwrt的基础 参考 什么是Flash内存?Flash内存是什么? 名词解释 openwrt openwr...
    cndaqiang阅读 8,588评论 0 7
  • 因为手贱入了斐讯k2,拿来直接网上找教程。有一键刷breed的脚本,挺好用的,就是要路由器自己有网。建议下次可以...
    贫道法号三刀阅读 1,820评论 0 1
  • 本来想画好后上色的,用App试了一下,还不如黑色有质感,所以人工智能不那么全面,还是比不上手工啊。 生活不是要过得...
    艾娃手绘阅读 287评论 0 4
  • 喜欢文字是什么样的呢?我觉得文字只是一种表现形式,是思想的表现,爱文字可能更多的是爱思想,喜欢脑海中的景色,喜欢脑...
    尹相华颜阅读 171评论 0 0