前言
作为国创项目的起点,在学长指导下开始研究OpenWrt开源路由器系统,用于开发新路由器协议。本文记录第一周的学习成果,主要包含系统编译流程和救砖操作,供后续参考。
一、OpenWrt系统编译指南
1. 环境准备(Debian/Ubuntu为例)
安装必备依赖包:
sudo apt-get install subversion g++ zlib1g-dev build-essential git python rsync man-db
sudo apt-get install libncurses5-dev gawk gettext unzip file libssl-dev wget zip time
2. 获取源代码
git clone https://github.com/openwrt/openwrt.git
cd openwrt
注:官网源可能出现连接问题,推荐使用Github镜像源。
3. 软件源配置
更新扩展软件包:
./scripts/feeds update -a
./scripts/feeds install -a
若更新失败,需修改feeds.conf.default
文件:
src-git packages https://github.com/openwrt/packages.git
src-git luci https://github.com/openwrt/luci.git
src-git routing https://github.com/openwrt-routing/packages.git
src-git telephony https://github.com/openwrt/telephony.git
4. 系统配置
执行菜单配置(以NETGEAR WNDR4300为例):
make menuconfig
推荐配置路径:
Target System → Atheros AR7xxx/AR9xxx
Subtarget → Generic devices with NAND flash
Target Profile → NETGEAR WNDR4300v1
提示:具体config配置将在后续文章详细说明。
5. 编译命令
make FORCE_UNSAFE_CONFIGURE=1 -j$(($(nproc)+1)) V=s
参数说明:
FORCE_UNSAFE_CONFIGURE=1
:避免权限错误-j N
:并行编译(N=CPU核心数+1)V=s
:显示详细日志
建议:
- 先执行
make download
预下载依赖- 若并行编译出错,改用单线程编译
二、路由器救砖实战(TFTP方式)
操作步骤
-
准备工作
- 下载官方固件:WNDR4300_V1.0.1.60.zip
- 安装TFTP客户端(如Tftpd)
-
网络配置
- 断开路由器WAN口,仅连接LAN口
- 设置电脑静态IP:
192.168.1.171/255.255.255.0
,DNS:192.168.1.1
-
刷机流程
1. 断电状态下长按复位键(需卡针) 2. 通电至电源灯绿灯闪烁 3. 通过TFTP上传固件(服务器IP:192.168.1.1) 4. 等待5分钟后重启路由器 5. 恢复电脑DHCP自动获取IP
三、源码目录解析
原始目录结构
目录/文件 | 说明 |
---|---|
scripts/ |
包含Bash/Python/Perl脚本,用于软件包管理和编译流程控制 |
tools/ |
主机工具链编译配置(Makefile中标记$(eval $(call HostBuild)) ) |
config/ |
系统级配置文件 |
toolchain/ |
交叉编译链组件(binutils/gcc/libc等) |
package/ |
所有软件包的Makefile模板和安装配置 |
include/ |
全局Makefile库文件(*.mk) |
feeds.conf.default |
第三方软件包源配置 |
编译生成目录
目录 | 内容 |
---|---|
build_dir/ |
展开编译的临时文件(含host/toolchain/target三个子目录) |
bin/ |
最终生成的固件和IPK包 |
dl/ |
下载的第三方软件源码缓存 |
staging_dir/ |
已编译的库文件和头文件(开发IPK时的重要引用目录) |
logs/ |
编译错误日志(仅当编译失败时生成) |
结语
本文初步记录了OpenWrt的编译方法和目录结构,后续将深入分析:
- 定制化config配置
- 软件包开发实践
- 内核模块调试技巧
教训总结:首次编译务必确认Target Profile完整性,避免变砖风险!
原创文章,作者:OXIDA,如若转载,请注明出处:https://www.lifeto.fun/archives/279