openwrt编译固件详细步骤及常见问题汇总
- 作者帖子
- Up::-1
如下是openwrt编译固件的详细步骤,总流程如下
package → dl → build_dir → staging_dir → bin
编译成功的几个关键点
- 磁盘root空间必须保证在40以上,为了保险起见,建议50G以上,越大越好。根据经验,一套源码大概要40G的空间才能顺利完成。否则编译过程中会提示root根目录空间不够
- 确保源码内文件\文件夹权限正确,非必要尽量不要使用root用户权限;如果使用了,记得恢复为当前用户权限
- 包的完整行一定要保证,不然中途可能失败
- 在编译的过程中终端terminal界面无提示,不用人为干预,要一次run到底;不要轻易ctrl+c打断编译,否则只能重头再来。
1. 升级组件及安装依赖
sudo apt-get update sudo apt-get upgrade sudo apt install gcc g++ unzip make libncurses-dev mkisofs
2.下载openwrt最新源码
sudo git clone https://git.openwrt.org/openwrt/openwrt.git #cd openwrt # ./scripts/feeds update -a # ./scripts/feeds install -a
3. 编译,根据自己的需求选择详细配置
make menuconfig Target System ---> x86 Subtarget ---> x86_64 Target Images --->ext4 --->Build LiveCD image Global build settings --->Compile with support for patented functionality
- Up::0
下面以LUCI为列解释更详细的编译过程如下
目录
一、基础环境准备
二、编译具体步骤
2.1 编译详细过程记录
2.2 Menuconfig 编译参数详解
2.2.1 LUCI全部插件列表及解释
2.2.2 Openwrt 各默认配置文件说明
2.3 Openwrt编译成功后固件的各种格式说明
三、常见问题及解决方案
四、参考文章 - Up::0
一、基础环境准备
1. Linux系统,建议Ubuntu或Linuxmint,这里是Mint 20.3版本
2. 出国留学环境准备(网络环境十分重要,不然后面下载一些dl依赖文件可能会缺失最终导致编译失败)
我这里的环境需要将network设置为automatic,如果设置为manual 则会在编译过程中出现某些网址无法ping通的情况3. SSH或者Putty 等其他远程登录工具,本地开发者可忽略
二、编译具体步骤
Openwrt 的编译过程含基础软件包的更新和Menuconfig参数的详细配置
2.1 编译详细过程记录
!!! 第一次编译过程详细记录
1>. 首先装好 Ubuntu 64bit,推荐 Ubuntu 18 LTS x64 / 本地使用的是linuxmint 20
2>. 更新软件源及安装依赖# sudo apt-get update # sudo apt-get -y install build-essential asciidoc binutils bzip2 curl gawk gettext git libncurses5-dev libz-dev patch python3.5 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf ninja-build
3>. 下载固件源码
本地创建openwrt目录
# mkdir openwrt # cd openwrt # git clone https://git.openwrt.org/openwrt/openwrt.git
(非必选) passwall 版本的源如下
#git clone -b 19.07 –single-branch https://github.com/Lienol/openwrt openwrt
以非root用户进行后续编译操作,将openwrt文件夹改为当前用户权限
# sudo chown -R $USER:$USER openwrt (推荐)
# sudo chmod 777 -R openwrt(修改权限,重要!!)4>. 如果发现某些插件链接失效,则可以在本地进行修改更新。具体的源可以自己到github寻找
# vim feeds.conf.default在文件后添加一行仓库地址
src-git laohu https://github.com/xxxxx5>. 更新feeds 软件包集合
# ./scripts/feeds clean # ./scripts/feeds update -a # ./scripts/feeds install -a
6> 配置编译参数
# make menuconfig
如果出现文件权限提示: xxxx overriding mode 0644 (rw-r–r–)? 直接输入 -f 进行强制执行即可
- 基本的CPU型号配置,和生成固件格式
Target System:可以选择路由器的CPU品牌、架构等信息。
Subtarget:进一步精确选择,一般可以精确到CPU型号(部分路由器可能不显示此项)。
Target Profile:可以选择具体的路由器型号。
Target Image: 编译输出的固件格式。另外target Image参数下面的–>Image Option –>Root file system size(in MB) 也建议设置一下。可以根据经验评估下编译后固件的大小。不然尺寸太小可能会在后续编译过程中出现错误提示:您的磁盘空间不够。一般建议写512左右,当然可以根据实际情况调整。
- LUCI –>Collections –[*]LUCI, 即开启Uhttpd。这部分一定要配置好,不然编译成功后无法进入web 后台
- LUCI常用的插件配置,LuCI –> Applications –>[]luci-app-xxx 这个根据自己的需求适当选择;也可以在后续手动安装插件包
- LUCI 主题配置, LuCI –> Themes –> []luci-theme-xxx 当然也可以后续使用其他的主题进行安装
- LuCI 中文语言包,LuCI –>Modules–> Translations –> [*] chinese simplified 根据自己需求选择即可。
一般选择好这几项参数后就可以编译了
如果不打算调整组件则输入make defconfig,它会检测编译环境并生成默认的编译配置文件。
#make defconfig
7>选好CPU/路由器型号后,进入Luci——Application菜单项,即可找到相应的插件。
如果你需要安装插件,那么上下键移动选中此项,按Y键即可添加。
8>.各项功能设置完毕后,左右键选择save并回车保存设置,保存过程中一路OK回车即可。
9>.保存完毕后,左右键选择exit并回车,一路退出配置界面。
10>.运行以下命令预下载编译所需的软件包(国内请尽量全局出国留学),这一步非常重要,如果包下载不完整,后面的编译大概率会失败!!!:
#make -j8 download V=s
ps:这里的j8,后面的8代表的是CPU的核心数,如果是4核,写成j4 替代
如果遇到包下载失败,可以尝试使用root用户下载
#sudo make -j8 download V=s
下载完毕后会有部分包恢复到root权限,再使用chwon命令将包改为当前用户权限
#cd dl
# sudo chown -R $USER:$USER *# sudo chmod 777 -R openwrt(修改权限,重要!!)-j8是指使用8个线程下载,理论上是数字越大下载越快,但似乎有个上限,实测5线程以上其实速度相差不了多少,在网络好的情况下,基本在5分钟以内能下载完。
11> 检查文件的完整性
#find dl -size -1024c -exec ls -l {} \;
此命令可以列出下载不完整的文件(根据经验得出小于1k的文件属于下载不完整),如果存在这样的文件可以使用命令
find dl -size -1024c -exec rm -f {} \;
将它们删除,然后重新执行make download下载并反复检查,确认所有文件完整可大大提高编译成功率,避免浪费时间。
12>.运行以下命令开始编译固件,
第一次编译可能耗时较长,耐心等待2—3个小时。
第二次编译大概时间为30分钟(非root账户编译,openwrt不建议root账户编译)
make -j1 V=s
-j 后面是线程数,这里使用单线程编译。第一次编译推荐用单线程, 即可开始编译你要的固件了,新手推荐单线程编译,一是因为玄学问题可能成功率高,二是方便查看错误日志。
比如电脑时4核CPU,编译可以选择 make -j5 V=99,其它cpu可以使用内核数量N+1来相应修改
启用多线程编译后的效果,可以看到4核心CPU全速运行
13>.编译完成后镜像输出路径:
openwrt19/bin/targets
编译成功后,登录系统后台如下
!!! 第二次编译详细记录
1> [非必选] 更新软件包长期未编译的环境建议更新下,短期多次编译的可以不用操作
#sudo apt update && sudo apt upgrade
#cd openwrt
拉取最新的openwrt版本源码
#sudo git pull
更新 feeds 源中的软件包源码
# ./scripts/feeds update -a
安装feeds 源中的软件包源码
# ./scripts/feeds install -a
2> 编译环境旧文件清理
2.1> [非必选] 清除旧的编译产物
make clean
在源码有大规模更新或者内核更新后执行,以保证编译质量。此操作会删除/bin和/build_dir目录中的文件。2.2> [非必选] 清除旧的编译产物、交叉编译工具及工具链等目录
make dirclean
更换架构编译前必须执行。此操作会删除/bin和/build_dir目录的中的文件(make clean)以及/staging_dir、/toolchain、/tmp和/logs中的文件。2.3> [非必选] 清除 OpenWrt 源码以外的文件
make distclean
除非是做开发,并打算 push 到 GitHub 这样的远程仓库,否则几乎用不到。此操作相当于make dirclean外加删除/dl、/feeds目录和.config文件。2.4> [非必选] 还原 OpenWrt 源码到初始状态
git clean -xdf
如果把源码改坏了,或者长时间没有进行编译时使用。2.5> [必选] 清除临时文件
rm -rf tmp
删除执行make menuconfig后产生的一些临时文件,包括一些软件包的检索信息,删除后会重新加载package目录下的软件包。若不删除会导致一些新加入的软件包不显示。2.6> [必选] 删除编译配置文件
rm -f .config
在不删除的情况下如果取消选择某些组件它的依赖组件不会自动取消,所以对于需要调整组件的情况下建议删除。3> 重新编译
3.1 > 配置menuconfig
# make menuconfig
3.2> 涉及到包的更新配置请重新download并改权限(这里之所以用sudo,是因为我的环境下有些包必须要root权限才能下载)
#sudo make -j8 download V=s
下载完毕后会有部分包恢复到root权限,再使用chwon命令将包改为当前用户权限
#cd dl
# sudo chown -R $USER:$USER *#cd ..
检查包的完整性
# find dl -size -1024c -exec ls -l {} \;
#make clean3.3> 编译。多线程编译后自动进入单线程编译
# make -j$(nproc) || make -j1 || make -j1 V=s
或者
# make -j8 V=s
如果遇到编译失败,一些玄学问题无法解决。可以尝试使用root用户重复第五部分: 如果需要重新配置menuconfig , 重新来一遍
- Up::0
2.2 Menuconfig 编译参数详解
2.2.1 LUCI全部插件列表及解释
LuCI —> Applications —> luci-app-accesscontrol #访问时间控制
LuCI —> Applications —> luci-app-acme #ACME自动化证书管理环境
LuCI —> Applications —> luci-app-adblock #ADB广告过滤
LuCI —> Applications —> luci-app-adbyby-plus #广告屏蔽大师Plus +
LuCI —> Applications —> luci-app-advanced-reboot #Linksys高级重启
LuCI —> Applications —> luci-app-ahcp #支持AHCPd
LuCI —> Applications —> luci-app-airplay2 #AirPlay音乐推流(安卓+IOS)
LuCI —> Applications —> luci-app-amule #aMule下载工具
LuCI —> Applications —> luci-app-aria2 # Aria2下载工具
LuCI —> Applications —> luci-app-arpbind #IP/MAC绑定
LuCI —> Applications —> luci-app-asterisk #支持Asterisk电话服务器
LuCI —> Applications —> luci-app-attendedsysupgrade #固件更新升级相关
LuCI —> Applications —> luci-app-autoreboot #支持计划重启
LuCI —> Applications —> luci-app-baidupcs-web #百度网盘管理
LuCI —> Applications —> luci-app-bcp38 #BCP38网络入口过滤(不确定)
LuCI —> Applications —> luci-app-bird1-ipv4 #对Bird1-ipv4的支持
LuCI —> Applications —> luci-app-bird1-ipv6 #对Bird1-ipv6的支持
LuCI —> Applications —> luci-app-bmx6 #BMX6路由协议
LuCI —> Applications —> luci-app-bmx7 #BMX7路由协议
LuCI —> Applications —> luci-app-cifs-mount #CIFS/SMB挂载设置
LuCI —> Applications —> luci-app-cifsd #CIFS/SMB网络共享
LuCI —> Applications —> luci-app-cjdns #加密IPV6网络相关
LuCI —> Applications —> luci-app-clamav #ClamAV杀毒软件
LuCI —> Applications —> luci-app-commands #Shell命令模块
LuCI —> Applications —> luci-app-cshark #CloudShark捕获工具
LuCI —> Applications —> luci-app-ddns #动态域名 DNS(集成阿里DDNS客户端)
LuCI —> Applications —> luci-app-diag-core #core诊断工具
LuCI —> Applications —> luci-app-diskman #磁盘管理工具
—luci-app-diskman —> Include btrfs-progs #新型的写时复制 (COW)
—luci-app-diskman —> Include lsblk #lsblk命令 用于列出所有可用块设备的信息
—luci-app-diskman —> Include mdadm #mdadm命令 用于创建、管理、监控RAID设备的工具
—luci-app-diskman —> Include kmod-md-raid456 #RAID 4,5,6 驱动程序模块
—luci-app-diskman —> Include kmod-md-linear #RAID 驱动程序模块
LuCI —> Applications —> luci-app-dnscrypt-proxy #DNSCrypt解决DNS污染
LuCI —> Applications —> luci-app-dnsforwarder #DNSForwarder防DNS污染
LuCI —> Applications —> luci-app-dockerman #Docker容器
LuCI —> Applications —> luci-app-dump1090 #民航无线频率(不确定)
LuCI —> Applications —> luci-app-dynapoint #DynaPoint(未知)
LuCI —> Applications —> luci-app-e2guardian #Web内容过滤器
LuCI —> Applications —> luci-app-familycloud #家庭云盘
LuCI —> Applications —> luci-app-filetransfer #文件传输(该功能支持浏览器安装ipk包)
LuCI —> Applications —> luci-app-firewall #添加防火墙
LuCI —> Applications —> luci-app-flowoffload #Turbo ACC网络加速(集成FLOW,BBR,NAT,DNS…)
LuCI —> Applications —> luci-app-freifunk-diagnostics #freifunk组件 诊断(未知)
LuCI —> Applications —> luci-app-freifunk-policyrouting #freifunk组件 策略路由(未知)
LuCI —> Applications —> luci-app-freifunk-widgets #freifunk组件 索引(未知)
LuCI —> Applications —> luci-app-frpc #内网穿透Frp客户端
LuCI —> Applications —> luci-app-frps #内网穿透Frp服务端
LuCI —> Applications —> luci-app-fwknopd #Firewall Knock Operator服务器
LuCI —> Applications —> luci-app-guest-wifi #WiFi访客网络
LuCI —> Applications —> luci-app-haproxy-tcp #HAProxy负载均衡-TCP
LuCI —> Applications —> luci-app-hd-idle #硬盘休眠
LuCI —> Applications —> luci-app-hnet #Homenet Status家庭网络控制协议
LuCI —> Applications —> luci-app-ipsec-vpnd #VPN服务器 IPSec
LuCI —> Applications —> luci-app-kodexplorer #KOD可道云私人网盘
LuCI —> Applications —> luci-app-lxc #LXC容器管理
LuCI —> Applications —> luci-app-meshwizard #网络设置向导
LuCI —> Applications —> luci-app-minidlna #完全兼容DLNA / UPnP-AV客户端的服务器软件
LuCI —> Applications —> luci-app-mjpg-streamer #兼容Linux-UVC的摄像头程序
LuCI —> Applications —> luci-app-mtwifi #联发科 MT WiFi驱动的支持,其它硬件配置不要选这个
LuCI —> Applications —> luci-app-music-remote-center #DAAP遥控音乐服务器
LuCI —> Applications —> luci-app-mwan3 #MWAN3负载均衡
LuCI —> Applications —> luci-app-mwan3helper #MWAN3分流助手
LuCI —> Applications —> luci-app-n2n_v2 #N2N内网穿透 N2N v2 VPN服务
LuCI —> Applications —> luci-app-netdata #Netdata实时监控(图表)
LuCI —> Applications —> luci-app-nfs #NFS网络共享
LuCI —> Applications —> luci-app-nft-qos #QOS流控 Nftables版
LuCI —> Applications —> luci-app-nlbwmon #网络带宽监视器
LuCI —> Applications —> luci-app-noddos #NodDOS Clients 阻止DDoS攻击
LuCI —> Applications —> luci-app-ntpc #NTP时间同步服务器
LuCI —> Applications —> luci-app-ocserv #OpenConnect VPN服务
LuCI —> Applications —> luci-app-olsr #OLSR配置和状态模块
LuCI —> Applications —> luci-app-olsr-services #OLSR服务器
LuCI —> Applications —> luci-app-olsr-viz #OLSR可视化
LuCI —> Applications —> luci-app-openvpn #OpenVPN客户端
LuCI —> Applications —> luci-app-openvpn-server #易于使用的OpenVPN服务器 Web-UI
LuCI —> Applications —> luci-app-p910nd #打印服务器模块
LuCI —> Applications —> luci-app-pagekitec #Pagekite内网穿透客户端
LuCI —> Applications —> luci-app-polipo #Polipo代理(是一个小型且快速的网页缓存代理)
LuCI —> Applications —> luci-app-pppoe-relay #PPPoE NAT穿透 点对点协议(PPP)
LuCI —> Applications —> luci-app-privoxy #Privoxy网络代理(带过滤无缓存)
LuCI —> Applications —> luci-app-qbittorrent #BT下载工具(qBittorrent)
LuCI —> Applications —> luci-app-qos #流量服务质量(QoS)流控
LuCI —> Applications —> luci-app-radicale #CalDAV/CardDAV同步工具
LuCI —> Applications —> luci-app-ramfree #释放内存
LuCI —> Applications —> luci-app-rp-pppoe-server #Roaring Penguin PPPoE Server 服务器
LuCI —> Applications —> luci-app-samba #网络共享(Samba)
LuCI —> Applications —> luci-app-samba4 #网络共享(Samba4)
LuCI —> Applications —> luci-app-sfe #Turbo ACC网络加速(flowoffload二选一)
LuCI —> Applications —> luci-app-s-s-libes #SS-libev服务端
LuCI —> Applications —> luci-app-shairplay #支持AirPlay功能
LuCI —> Applications —> luci-app-siitwizard #SIIT配置向导 SIIT-Wizzard
LuCI —> Applications —> luci-app-simple-adblock #简单的广告拦截
LuCI —> Applications —> luci-app-softethervpn #SoftEther VPN服务器 NAT穿透
LuCI —> Applications —> luci-app-splash #Client-Splash是无线MESH网络的一个热点认证系统
LuCI —> Applications —> luci-app-sqm #流量智能队列管理(QOS)
LuCI —> Applications —> luci-app-squid #Squid代理服务器
LuCI —> Applications —> luci-app-ssr-plus #ShadowsocksR Plus+
—luci-app-ssr-plus —> Include Shadowsocks V2ray Plugin #SS V2Ray插件
—luci-app-ssr-plus —> Include V2Ray #V2ray客户端
—luci-app-ssr-plus —> Include Trojan #Trojan客户端
—luci-app-ssr-plus —> Include redsocks2 #redsocks2代理
—luci-app-ssr-plus —> Include Kcptun #Kcptun加速
—luci-app-ssr-plus —> Include ShadowsocksR Server #SSR服务器
LuCI —> Applications —> luci-app-ssrserver-python #SSR Python服务器
LuCI —> Applications —> luci-app-statistics #流量监控工具
LuCI —> Applications —> luci-app-syncdial #多拨虚拟网卡(原macvlan)
LuCI —> Applications —> luci-app-tinyproxy #Tinyproxy是 HTTP(S)代理服务器
LuCI —> Applications —> luci-app-transmission #BT下载工具
LuCI —> Applications —> luci-app-travelmate #旅行路由器
LuCI —> Applications —> luci-app-ttyd #网页终端命令行
LuCI —> Applications —> luci-app-udpxy #udpxy做组播服务器
LuCI —> Applications —> luci-app-uhttpd #uHTTPd Web服务器
LuCI —> Applications —> luci-app-unblockmusic #解锁网易云灰色歌曲3合1新版本
—UnblockNeteaseMusic Golang Version #Golang版本
—UnblockNeteaseMusic NodeJS Version #NodeJS版本
LuCI —> Applications —> luci-app-unblockneteasemusic-go #解除网易云音乐(合并)
LuCI —> Applications —> luci-app-unblockneteasemusic-mini #解除网易云音乐(合并)
LuCI —> Applications —> luci-app-unbound #Unbound DNS解析器
LuCI —> Applications —> luci-app-upnp #通用即插即用UPnP(端口自动转发)
LuCI —> Applications —> luci-app-usb-printer #USB 打印服务器
LuCI —> Applications —> luci-app-v2ray-server #V2Ray服务器
LuCI —> Applications —> luci-app-verysync #微力同步
LuCI —> Applications —> luci-app-vlmcsd #KMS服务器
LuCI —> Applications —> luci-app-vnstat #vnStat网络监控(图表)
LuCI —> Applications —> luci-app-vpnbypass #VPN BypassWebUI 绕过VPN设置
LuCI —> Applications —> luci-app-vsftpd #FTP服务器
LuCI —> Applications —> luci-app-watchcat #断网检测功能与定时重启
LuCI —> Applications —> luci-app-webadmin #Web管理页面设置
LuCI —> Applications —> luci-app-webshell #网页命令行终端
LuCI —> Applications —> luci-app-wifischedule #WiFi计划任务
LuCI —> Applications —> luci-app-wireguard # WireGuard VPN
LuCI —> Applications —> luci-app-wirelessregdb #WiFi无线
LuCI —> Applications —> luci-app-wol #WOL网络唤醒
LuCI —> Applications —> luci-app-wrtbwmon #实时流量监测
LuCI —> Applications —> luci-app-xlnetacc #迅雷快鸟
LuCI —> Applications —> luci-app-zerotier #ZeroTier内网穿透
- Up::1
2.2.2 Openwrt 各默认配置文件说明
配置说明 文件路径 镜像生成方式控制 target/linux/ramips/image/Makefile board检测配置脚本(对升级有影响) 匹配/proc/cpuinfo中字段设置board名字 target/linux/ramips/base-files/lib/ramips.sh 升级镜像检查脚本
根据board名字来检测镜像中magic是否匹配target/linux/ramips/base-files/lib/upgrade/platform.sh uboot-evntools 分区设置 根据board名字设置uboot env分区所在的mtd及大小,之后在系统中可以通过fw_printenv、fw_setenv来查看或设置uboot env中的变量 package/boot/uboot-envtools/files/ramips usb_led、wifi_led设置 根据board名字设置led为在dts中定义的gpio target/linux/ramips/base-files/etc/board.d/01_leds status_led设置
根据board名字设置status_led为在dts中定义的gpistarget/linux/ramips/base-files/etc/diag.sh Wifi参数配置 wifi的默认开启方式、ssid、加密方式等配置 package/kernel/mac80211/files/lib/wifi/mac80211.sh 硬件资源的配置 (usb、gpio、flash等),即dts target/linux/ramips/dts/下文件 以太网网络配置(lan/wan配置)
设置switch的port vlan,及lan、wan端口的配置,lan、wan的mac地址配置target/linux/ramips/base-files/etc/board.d/02_network 配置默认主机名 package/base-files/files/etc/config/system 配置默认登录密码 package/base-files/files/etc/shadow 配置默认登录SSH package/network/services/dropbear/files/dropbear.config - Up::0
2.2.3 Openwrt编译成功后的各种固件格式说明
固件格式 说明 openwrt-x86-generic-combined-ext4.img.gz rootfs工作区 存储格式为ext4 openwrt-x86-generic-combined-jffs2-128k.img jffs2可以修改,也就是可以自行更换(删除)rootfs的配置文件,而不需要重新刷固件 openwrt-x86-generic-combined-squashfs.img squashfs是个只读的文件系统,相当于win的ghost,使用中配置错误,可直接恢复默认 openwrt-x86-generic-rootfs-ext4.img.gz rootfs的镜像,不带引导,可自行定义用grub或者syslinux来引导,存储区为ext4 为了更清楚的说明这个问题,可以参考以下文章:
http://wiki.openwrt.org/doc/techref/header
从这里可以看出一个完整的镜像文件至少要包含三个部分:Loader 、Kernel 、RootFS - Up::0
编译常见问题汇总
1. [issue] openwrt编译失败,必须使用root 权限才能编译,但openwrt还不让用root。
解决的问题记录下
方案1:使用普通用户无权限编译失败
原因:用普通用户编译失败原因是普通用户没有对openwrt里文件操作的权限,可以通过ubuntu文件夹观看,所有文件都有锁。
解决:# sudo chmod -R 777 openwrt
更改文件夹及里边嵌套的文件的使用权限。
方案2:使用root编译报错
原因:因为openwrt不建议用root编译
解决:
Export FORCE_UNSAFE_CONFIGURE=1
Export FORCE=1
或
修改 include/prereq-build.mk。最新的版本已去掉这个限制。 - Up::0
2. [issue] ./scripts/feeds install -a 出现编译环境警告
WARNING: Makefile 'package/utils/busybox/Makefile' has a dependency on 'libpam', which does not exist WARNING: Makefile 'package/utils/busybox/Makefile' has a build dependency on 'libpam', which does not exist WARNING: Makefile 'package/network/utils/curl/Makefile' has a dependency on 'libgnutls', which does not exist WARNING: Makefile 'package/network/utils/curl/Makefile' has a dependency on 'libopenldap', which does not exist WARNING: Makefile 'package/network/utils/curl/Makefile' has a dependency on 'libidn2', which does not exist WARNING: Makefile 'package/network/utils/curl/Makefile' has a dependency on 'libssh2', which does not exist WARNING: Makefile 'package/boot/kexec-tools/Makefile' has a dependency on 'liblzma', which does not exist WARNING: Makefile 'package/network/services/lldpd/Makefile' has a dependency on 'libnetsnmp', which does not exist
重新run一遍,
# ./scripts/feeds update -a
# ./scripts/feeds install -a - Up::0
[question] make config,make menuconfig,make oldconfig,make xconfig,make defconfig,make gconfig?
在进行内核配置,或者是对一些软件的配置和编译中,常常会遇到:
make config
make menuconfig
make oldconfig
make xconfig
make defconfig
make gconfig
—————————————————————————————
1、make config
是文本式,对话式,基于命令行的一种配置。
2、make menuconfig
这是有菜单选项以及有辅助图形界面的配置,基于ncurses库。(常常使用)
3、make oldconfig
使用旧的(之前)的配置
4、make xconfig
真正意义上的用到了图形界面的配置,使用的是QT的库。由于会加载额外的库,并不是用得很多。
5、make deconfig
直接使用某个默认的配置,和配置内容相关,与使用何种配置方式无关。
6、make gconfig
也是使用的图形界面,用到的是GTK的库。
- Up::0
3. [issue] 编译时错误ERROR: tools/ninja failed to build
要安装
apt-get install ninja-build,
如果还不行,安装后配合root账户编译就可以了。
- Up::0
4. [issue] 编译错误: cannot change permissions of /openwrt/staging_dir/host/bin’: Operation not permitted
切换回root用户编译就可以Pass了
- Up::0
5. [issue] openwrt使用root用户权限才能编译,普通用户编译不通过
一般提示权限错误:
error: you should not run configure as root (set FORCE_UNSAFE_CONFIGURE=1 in environment……..
方案1:使用普通用户无权限编译失败
原因:用普通用户编译失败原因是普通用户没有对openwrt里文件操作的权限,可以通过ubuntu文件夹观看,所有文件都有锁。
解决:用sudo chmod -R 777 openwrt 更改文件夹及里边嵌套的文件的使用权限。
方案2:使用root编译报错
原因:因为openwrt不建议用root编译
解决:
Export FORCE_UNSAFE_CONFIGURE=1
Export FORCE=1或修改 include/prereq-build.mk。最新的版本已去掉这个限制。
- Up::0
如果仍然无法解决,可以考虑使用chown命令将文件(夹)拥有者改为当前用户
1> 使用ll 命令查看openwrt目录的拥有者,可以看到属于root用户
# ll
drwxrwxr-x 9 Ubuntu Ubuntu 4096 10月 10 10:50 ./
drwxr-xr-x 38 Ubuntu Ubuntu 4096 10月 10 12:20 ../
drwxrwxr-x 17 root Ubuntu 4096 10月 10 12:16 openwrt/
-rwxrwxrwx 1 Ubuntu Ubuntu 1768 10月 10 10:22 readme*2> 使用chown 修改用户权限
# sudo chown -R $USER openwrt
# sudo chown -R $USER:$USER openwrt
注意 openwrt 后面的 / 字符,不然的话 不包括 openwrt 目录的 。然后再查看 “ll”, 可以看到已经刷新为当前用户ubuntu了
drwxrwxr-x 9 Ubuntu Ubuntu 4096 10月 10 10:50 ./
drwxr-xr-x 38 Ubuntu Ubuntu 4096 10月 10 12:20 ../
drwxrwxr-x 17 Ubuntu Ubuntu 4096 10月 10 12:16 openwrt/
-rwxrwxrwx 1 Ubuntu Ubuntu 1768 10月 10 10:22 readme*
- Up::0
6. 编译意外中断或者需要重新编译
先清理一下之前的编译产物,但是config配置不变,再继续编译
# make clean
# make menuconfig (如果需要增删配置,没有则跳过)
# make -j$(($(nproc) + 1)) V=s
- Up::0
7. [issue] 编译过程中出现如下错误
SHELL= flock /home/xxx/openwrt/openwrt/tmp/.linux-firmware-20211216.tar.xz.flock -c ' /home/xxx/openwrt/openwrt/scripts/download.pl "/home/xxx/openwrt/openwrt/dl" "linux-firmware-20211216.tar.xz" "eeddb4e6bef31fd1a3757f12ccc324929bbad97855c0b9ec5ed780f74de1837d" "" "@KERNEL/linux/kernel/firmware" '
- Up::0
8.[issue] x86_64 平台编译时错误
time: package/feeds/packages/golang/host-compile#0.38#0.16#8.50 ERROR: package/feeds/packages/golang [host] failed to build. make[2]: *** [package/Makefile:114: package/feeds/packages/golang/host/compile] Error 1 make[2]: Leaving directory '/home/openwrt' make[1]: *** [package/Makefile:110: /home/openwrt/staging_dir/target-x86_64_musl/stamp/.package_compile] Error 2
[fixed]
尝试使用单线程编译可以解决,不再提示错误
# make -j1 V=s
- Up::0
8.[issue] x86_64 luci 编译错误
Fatal error: can't create po2lmo.o: Permission denied make[4]: *** [Makefile:2: po2lmo.o] Error 1 make[4]: Leaving directory '/home/openwrt/feeds/luci/modules/luci-base/src' make[3]: *** [Makefile:45: /home/openwrt/build_dir/hostpkg/luci-base/.built] Error 2 make[3]: Leaving directory '/home/openwrt/feeds/luci/modules/luci-base'
[fixed]
使用root权限可以编译通过# sudo make -j1 V=s
全局使用root的潜在风险是你一般不会去确认每个代码都是正常的,万一某个代码里有类似删除的操作(eg. rm -rf ./*),只能重做系统
- Up::0
9. [issue] 自行编译的openwrt 无法ping通外网,无法更新软件包
[fixed]
请参考本章的文章: https://wirelesslink.net/4840.html 对LAN口做配置。注意DNS一定要写,不然会出现无法ping通的情况
- Up::0
10.[issue] Openwrt 编译过程太慢,如何优化
编译慢的原因
- 与硬件有关。高配置的电脑,编译更快,毫无疑问
- 与网络有关(主因)。
剖析
openwrt 编译过程会检查依赖库在本地是否缓存,如果没有就会下载,这是首次编译超级慢的主要原因
依赖库镜像都是在国外,天朝帝国内,访问不通畅,下载很慢,经常下载失败,即使有重试机制,但挂一个晚上也未必编译成功(当然你可以翻墙再编译)
解决方法
1> 先把 openwrt 源码克隆到本地https://gitee.com/harvey520/openwrt.git 每天自动从官方源拉取更新一次,不会存在更新不及时问题
git clone https://gitee.com/harvey520/openwrt.git
2>修改 openwrt 源码目录的 feeds.conf.default 文件中的镜像源
将 https://git.openwrt.org/feed/packages.git 改为 https://gitee.com/harvey520/packages.git
将 https://git.openwrt.org/project/luci.git 改为 https://gitee.com/harvey520/luci.git
将 https://git.openwrt.org/feed/routing.git 改为 https://gitee.com/harvey520/routing.git
将 https://git.openwrt.org/feed/telephony.git 改为 https://gitee.com/harvey520/telephony.git
https://gitee.com/harvey520 中的镜像源每天自动从官方源更新一次,不会存在过期或更新不及时问题3> 提前下载依赖库源码放到 openwrt 源码目录中
国内惟一仓库,只此一家,别无分号
进入 openwrt 源码目录中,执行以下命令
git clone https://e.coding.net/yao7778899/openwrt-dependent-dl.git dl
# 依赖库源码总计约850M4> 开始你的编译
执行以下命令开始你的编译,能够多快就看你家的宽带有多快了
./scripts/feeds update -a
./scripts/feeds install -a
make V=99
- 作者帖子
- 哎呀,回复话题必需登录。