您的当前位置:首页openwrt固件获取、编译与安装

openwrt固件获取、编译与安装

2024-12-13 来源:哗拓教育

openwrt固件获取、编译与安装

参考

环境

路由器 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下载,也可以

wget 
sudu apt-get install zip
unzip master.zip

编译前的设置

进入源码目录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信号,拔掉电源,再开机就可以了

显示全文