**
1、openwrt项目配置路径介绍
** OpenWrt 可以被描述为一个嵌入式的 Linux 发行版。(主流路由器固件有 dd-wrt,tomato,openwrt,padavan四类)对比其他单一的、静态的系统(比如ubuntu),OpenWrt的包管理提供了一个完全可写的文件系统,可扩展性好,可以在线安装您所需要的功能,允许您自定义的设备,以适应任何应用。
对于开发人员,OpenWrt 是使用框架来构建应用程序,而无需建立一个完整的固件来支持;对于用户来说,这意味着其拥有完全定制的能力,可以用前所未有的方式使用该设备。
1、首次编译建议用单线程编
make -j1 V=s
-j1:使用单线程编译。新手推荐单线程编译,一是因为玄学问题可能成功率高,二是方便查看错误日志。 V=s:输出详细日志,用于编译失败时找出错误。
2、openwrt官网:
本节内容是从官网上翻译的,其余的是从网上搜到的资料。
https:
image/Makefile 定义了当前板子使用了哪个dts文件
base-files/etc/diag.sh to set a LED which OpenWRT should blink on bootup
base-files/lib/upgrade/platform.sh to allow sysupgrade to work on your board
base-files/etc/uci-defaults/network to configure default network interface settings, particularly MAC addresses
base-files/etc/uci-defaults/leds if you have configurable LEDs which should default to a behavior, like a WLAN activity LED
base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom to extract the firmware image for the wireless module
base-files/lib/preinit/06_set_iface_mac to set the MAC addresses of any other interfaces
3、openwrt中各种默认配置文件所在目录 target/linux/ramips/base-files/
openwrt版本为15.05.1,以mt7620为例,其他类似。
-
硬件资源的配置(usb、gpio、flash等),即dts target/linux/ramips/dts/ 下文件 -
镜像生成方式控制 target/linux/ramips/image/Makefile -
board检测配置脚本(对升级有影响)!!! target/linux/ramips/base-files/lib/ramips.sh 匹配/proc/cpuinfo中字段设置board名字` -
升级镜像检查脚本 target/linux/ramips/base-files/lib/upgrade/platform.sh target/linux/ramips/xxx/base-files/lib/upgrade/platform.sh 根据board名字来检测镜像中magic是否匹配` -
status_led设置 target/linux/ramips/base-files/etc/diag.sh package/base-files/files/etc/diag.sh 根据board名字设置status_led为在dts中定义的gpio -
usb_led、wifi_led设置 target/linux/ramips/xxx/base-files/etc/board.d/01_leds 根据board名字设置led为在dts中定义的gpio -
以太网网络配置(lan/wan配置) target/linux/ramips/xxx/base-files/etc/board.d/02_network 设置switch的port vlan,及lan、wan端口的配置,lan、wan的mac地址配置
4、base-files属于OpenWrt的rootfs框架,位于package/base-files,里面有些项目可以定制和修改
.
├── bin
│ ├── ipcalc.sh
│ └── login.sh
├── etc
│ ├── banner
│ ├── config
│ │ ├── network
│ │ └── system
│ ├── device_info
│ ├── diag.sh
│ ├── group
│ ├── hosts
│ ├── hotplug.d
│ │ └── net
│ │ └── 00-sysctl
│ ├── init.d
│ │ ├── boot
│ │ ├── done
│ │ ├── led
│ │ ├── sysctl
│ │ ├── sysfixtime
│ │ ├── system
│ │ └── umount
│ ├── inittab
│ ├── openwrt_release
│ ├── openwrt_version
│ ├── passwd
│ ├── preinit
│ ├── profile
│ ├── protocols
│ ├── rc.button
│ │ ├── failsafe
│ │ ├── power
│ │ ├── reset
│ │ └── rfkill
│ ├── rc.common
│ ├── rc.local
│ ├── services
│ ├── shadow
│ ├── shells
│ ├── sysctl.conf
│ ├── sysupgrade.conf
│ └── uci-defaults
│ ├── 10_migrate-shadow
│ ├── 11_migrate-sysctl
│ └── 12_network-generate-ula
├── lib
│ ├── functions
│ │ ├── leds.sh
│ │ ├── network.sh
│ │ ├── preinit.sh
│ │ ├── service.sh
│ │ ├── system.sh
│ │ └── uci-defaults.sh
│ ├── functions.sh
│ ├── preinit
│ │ ├── 02_default_set_state
│ │ ├── 10_indicate_failsafe
│ │ ├── 10_indicate_preinit
│ │ ├── 30_failsafe_wait
│ │ ├── 40_run_failsafe_hook
│ │ ├── 50_indicate_regular_preinit
│ │ ├── 70_initramfs_test
│ │ ├── 80_mount_root
│ │ ├── 99_10_failsafe_login
│ │ └── 99_10_run_init
│ └── upgrade
│ ├── common.sh
│ └── keep.d
│ └── base-files-essential
├── rom
│ └── note
└── sbin
├── firstboot
├── hotplug-call
├── led.sh
├── sysupgrade
└── wifi
-
etc/config/system修改hostname,timezoneoption zonename ‘Asia/Chongqing’ option timezone ‘CST-8’ option hostname ‘Manfeel’ -
etc/banner可修改为自己的启动定制信息 -
lib/functions/uci-defaults修改默认的uci配置,如lan的ip地址等
ucidef_set_interface_lan() {
local ifname=$1
uci batch <<EOF
set network.lan='interface'
set network.lan.ifname='$ifname'
set network.lan.force_link=1
set network.lan.type='bridge'
set network.lan.proto='static'
set network.lan.ipaddr='192.168.8.1'
set network.lan.netmask='255.255.255.0'
set network.lan.ip6assign='60'
EOF
}
-
etc/shadow修改root用户的初始密码 -
etc/profile修改root的相关配置信息
export PATH=/usr/bin:/usr/sbin:/bin:/sbin
export HOME=$(grep -e "^${USER:-root}:" /etc/passwd | cut -d ":" -f 6)
export HOME=${HOME:-/root}
export PS1='\u@\h:\w\$ '
[ -x /bin/more ] || alias more=less
[ -x /usr/bin/vim ] && alias vi=vim || alias vim=vi
[ -z "$KSH_VERSION" -o \! -s /etc/mkshrc ] || . /etc/mkshrc
[ -x /usr/bin/arp ] || arp() { cat /proc/net/arp; }
[ -x /usr/bin/ldd ] || ldd() { LD_TRACE_LOADED_OBJECTS=1 $*; }
- etc/sysupgrade.conf修改升级固件时需要保留的文件列表
## This file contains files and directories that should
## be preserved during an upgrade.
# /etc/example.conf
# /etc/openvpn/
**
-
Openwrt修改默认IP vi package/base-files/files/bin/config_generate -
opnwrt固件源码修改登陆密码 $:vi package/base-files/files/etc/shadow //添加root 密码为admin 修改root::0:0:99999:7:::为以下 $: root:
1
1
1wEehtjxj$YBu4quNfVUjzfv8p/PBo5.:0:0:99999:7::: -
SSH/TELNET显示信息修改方式 $:vi ./package/base-files/files/etc/banner -
openwrt系统的wifi配置信息保存目录, 非编译阶段 /etc/config/wireless -
编译前修改默认wifi 配置信息 vi package/kernel/mac80211/files/lib/wifi/mac80211.sh
可以修改类似如下配置
set wireless.radio${devidx}.disabled=0
set wireless.default_radio${devidx}=wifi-iface
set wireless.default_radio${devidx}.device=radio${devidx}
set wireless.default_radio${devidx}.network=lan
set wireless.default_radio${devidx}.mode=ap
set wireless.default_radio${devidx}.ssid=wifiname
set wireless.default_radio${devidx}.encryption=psk2
set wireless.default_radio${devidx}.key=12345678
-
openwrt 显示cpu 温度 cut -c1-2 /sys/class/thermal/thermal_zone0/temp -
wifi的默认开启方式、ssid、加密方式等配置 /etc/config/wireless package/kernel/mac80211/files/lib/wifi/mac80211.sh -
uboot-evntools 分区设置 package/boot/uboot-envtools/files/ramips -
/etc/config/system /etc/config/network 默认hostname br-lan package/base-files/files/bin/config_generate
5、无线开关
在openwrt架构下,下载固件之后无线是默认关掉的, 打开方式修改文件 /etc/config/wireless by changing disabled 1 ? disabled 0
6、openwrt的network文件
openwrt的network文件,或者说在/etc/config下的文件,都是动态生成的。
脚本的函数定义在openwrt1407/package/base-files/files/lib/functions中,有以下几个文件:
tf@ubuntu:~/projects/openwrt1407/package/base-files/files/lib/functions$ ls
leds.sh network.sh preinit.sh service.sh system.sh uci-defaults.sh
其中uci-defaults.sh会生成默认的/etc/config下的文件,而其它文件是它的“库”。
我们看一看uci-default.sh的内容
#!/bin/sh
# Copyright (C) 2011 OpenWrt.org
UCIDEF_LEDS_CHANGED=0
ucidef_set_led_netdev() {
local cfg="led_$1"
local name=$2
local sysfs=$3
local dev=$4
uci -q get system.$cfg && return 0
uci batch <<EOF
set system.$cfg='led'
set system.$cfg.name='$name'
set system.$cfg.sysfs='$sysfs'
set system.$cfg.trigger='netdev'
set system.$cfg.dev='$dev'
set system.$cfg.mode='link tx rx'
EOF
UCIDEF_LEDS_CHANGED=1
}
改uci-default.sh的内容就会改到openwrt固件的默认配置了。
调用这些库的函数在这里:
tf@ubuntu:~/projects/openwrt1407/target/linux/ar71xx/base-files/etc/uci-defaults$ ls
01_leds 03_network-vlan-migration 09_fix-trx-header
02_network 04_led_migration
03_network-switchX-migration 09_fix-seama-header
对于网络,则是02_network文件,看看该文件的开头内容为:
#!/bin/sh
#
# Copyright (C) 2011 OpenWrt.org
#
[ -e /etc/config/network ] && exit 0
touch /etc/config/network
. /lib/functions/uci-defaults.sh
. /lib/ar71xx.sh
ucidef_set_interface_loopback
board=$(ar71xx_board_name)
**
2、switch
**
参考链接: https://blog.csdn.net/weixin_38387929/article/details/115303786
mtk7621A这款双核mips指令集芯片,内部集成 mt7530 硬交换芯片,0~5 端口都是mt7530口输出,该芯片自带PHY口,芯片MAC层管理是通过内部MDIO接口管理 mt7530 ,mt7530驱动中提供 vlan 的管理功能。
------------------
| CPU /mtk7621 |
| ----------- |
| | MAC/ephy |
|___|__||_____|__|
||
RGMII/ || RXP/TXP
MII ||
||
------------------------------------------------||---------
| Switch MT7530 || |
| || |
| || |
| |-----| |-----| |-----| |-----| |-----| |
____|_____|___|_____|___|_____|___|_____|____|_____|______|
PHY1 PHY2 PHY3 PHY4 PHY/MAC
也就是说eth0可以接外部phy,也可以接内部switch带的phy 在设备树配置中有一个参数mediatek,portmap将决定哪个口是WAN,哪个口是LAN
mediatek,portmap = "llllw";
Switch Documentation
如果你的设备含有不少于1个的LAN接口,那这个设备在不同的接口之间可能有一个被称为交换(switch)的特殊连接。大多数的内部构造如下图所示: 如果你想要更改这些端口如何互相连接的,你需要配置你的switch设备。 转载未结束,请参考文档:https://oldwiki.archive.openwrt.org/zh-cn/doc/uci/network/switch
**
3、Linux Network Interfaces
**
主要分为两种:
- 物理网络接口
eth0, eth8, radio0,wlan9这些通常都是实际的网络硬件设备,任何物理网络接口都是操作系统对用户的命名软件表示,使用户能够配置硬件网络设备,并将其集成到程序和脚本中。 - 虚拟网络接口
lo, eth0:1, eth0.1, vlan2, br0, pppoe-dsl, gre0, sit0 tun0, imq0, teql0这些都是虚拟的网路接口,不代表一个实际存在的硬件设备。 发明虚拟网络接口是为了在配置基于linux的操作系统时为系统管理员提供最大的灵活性。虚拟网络接口通常与一个物理网络接口(eth6)或另一个虚拟接口(eth6.9)相关联,或单独存在,如loopback接口
- bridges: br0, br-lan
- aliases: eth4:5, eth4:6, …
- VLANs: eth4.0, eth4.1, eth4.3, vlan0, …
- tunnel interfaces: pppoe-dsl, pppoa-dsl, tun0, vpn1
- special purpose: imq0, teql3
- wireless operating mode virtual interfaces: wlan0, wlan0_1, ath3, ath_monitor, …
Two network interfaces can also be bonded together。参考:Documentation/networking/bonding.txt
/etc/config/network is the network configuration file. /etc/config/wireless is the wireless configuration file.
在OpenWrt软件包存储库中,网络工具可以作为单独的opkg-packages使用,而核心工具如ifconfig、route、netstat和vconfig也作为applet包含在busybox中:busybox-ifconfig、busybox-route等。
**
3、mt7621网络配置文件
**
/etc/config/network
/etc/config/wireless
/etc/config/dhcp
/etc/config/network /etc/config/network配置文件示例如下(也可以是使用uci show network查看uci形式的内容):
interface是逻辑网络如:wan、lan、loopback。device是实际网络设备,可能是物理的也可能是虚拟的,处于数据链路层。
针对每个网络接口的配置都有一个类型为 interface 这样的 section,每个 interface 要么直接指向一个以太网/WIFI 设备(eth0、wlan0)或者包括多个设备的桥接。
由于device属于L2层的概念,如果用户对一个网络设备配置属于L3或更高层协议的属性, 则要直接对interface进行操作,进而间接作用于device。因此一个interface必须绑定到一个device上 。
#使用以下命令可以查看本路由器的网络接口,有哪些物理接口哪些是虚拟接口。
#eth0是一块物理网卡。eth0.1 eth0.2都是从此设备上虚拟出来的。
#eth0.1 是vlan1分出的lan口。
#eth0.2 是vlan分出的wan口。
#ls /sys/class/net/
#br-lan -> ../../devices/virtual/net/br-lan
#eth0 -> ../../devices/platform/1e100000.ethernet/net/eth0
#eth0.1 -> ../../devices/virtual/net/eth0.1
#eth0.2 -> ../../devices/virtual/net/eth0.2
#lo -> ../../devices/virtual/net/lo
#sit0 -> ../../devices/virtual/net/sit0
#wlan0 -> ../../devices/platform/1e140000.pcie/pci0000:00/0000:00:01.0/0000:02:00.0/net/wlan0
#wlan1 -> ../../devices/platform/1e140000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/net/wlan1
#interface section 声明逻辑网络服务:ip地址设置、别名、路由、物理接口名称和启动防火墙规则的容器,在openwrt中起着核心作用。
config interface 'loopback' #逻辑接口的名称
option ifname 'lo' #与本section逻辑接口关联的物理接口名称,虚拟设备,回环网
option proto 'static' #静态配置,需要同时配置ip与子网掩码
option ipaddr '127.0.0.1' #静态ip地址
option netmask '255.0.0.0' #子网掩码
#globals section包含独立于接口的选项,这些选项会影响全局网络配置。
config globals 'globals'
option ula_prefix 'fdf5:e6a8:1c8d::/48' #ipv6的前缀
#ifname 指明了 Linux 网络设备名称。如果想桥接一个或多个设备,可以将 ifname 设置成一个 list,并且添加一个 option type 'bridge'
config interface 'lan' #逻辑接口lan
option type 'bridge' #桥接方式
option ifname 'eth0.1 ra0 rai0' #与lan接口关联的三个网络设备,eth0.1是vlan分出的lan口,ra0与rai0是两个无线设备分别对应2.4G与5G。
option proto 'static' #静态配置,必须要同时配置ip与子网掩码, gateway 和 dns 是可选的。可以设置多个 dns,以空格分隔。
option ipaddr '192.168.1.1' #静态ip地址
option netmask '255.255.255.0' #子网掩码
option ip6assign '60' #将给定长度的前缀委托给此接口
#以下三个device,属于br-lan,br-lan = eth0.1 + rai0 + ra0,即将有线LAN口和无线网统一划分为 LAN,便于管理!使用brctl show 可查看。
config device 'lan_eth0_1_dev'
option name 'eth0.1'
option macaddr '20:76:93:51:0f:53'
config device 'lan_ra0_dev'
option name 'ra0'
option macaddr '20:76:93:51:0f:53'
config device 'lan_rai0_dev'
option name 'rai0'
option macaddr '20:76:93:51:0f:53'
config interface 'wan' #逻辑接口wan
option ifname 'eth0.2' #由下面vlan分出的wan口
option proto 'dhcp' #dhcp动态分配,只接受两个 option,分别是 ipaddr(想从 DHCP 服务器申请的 IP 地址)和 hostname(用于标识客户端 hostname),并且这两个 option 都是可选的。
#为eth0.2分配mac地址
config device 'wan_eth0_2_dev'
option name 'eth0.2'
option macaddr '20:76:93:51:0f:55'
#添加wan口ipv6的dhcp分配
config interface 'wan6'
option ifname 'eth0.2'
option proto 'dhcpv6'
config switch
option name 'switch0'
option reset '1'
option enable_vlan '1' #使能VLAN,即虚拟局域网
config switch_vlan
option device 'switch0'
option vlan '1' #配置第一组VLAN,默认为eth0.1,对应的端口为0,1,2,3。四个LAN口
option ports '0 1 2 3 6t'
config switch_vlan
option device 'switch0'
option vlan '2' #配置第二组VLAN,默认为eth0.2,对应的端口为4。路由器中的WAN口。
option ports '4 6t'
#option ports '0 1 2 3 6t'表示从端口 0,1,2,3 离开的帧将被解除 VLAN 标签,而从端口 6 离开的帧将被打上 VLAN 标签。端口6是CPU(eth0)详情往下看
root@OpenWrt:/# brctl show
bridge name bridge id STP enabled interfaces
br-lan 7fff.207693510f53 no wlan0
wlan1
eth0.1
#要查看接口列表,请输入以下内容:
ubus list network.interface.*
#要查看有关特定接口(UCI名称而不是物理接口)的所有信息,请输入:
ifstatus lan
路由器的最小网络配置至少包括两个接口(lan和wan)和一个switch。 /etc/config/wireless Wi-Fi信道宽度是频率范围,即信号传输数据的宽度。一般来说,信道宽度越大,通过信号传输的数据越多。g干扰也越大。默认情况下,2.4 GHz频率使用20 MHz信道宽度。
# wifi-device(描述wifi物理设备) 与 wifi-iface(基于物理设备的无线网络接口)是成对出现的
#新三路由器有两个无线设备分别为2.4G与5G。
#定义第一个无线设备名字在wifi-iface中使用
config wifi-device 'radio0'
option type 'mac80211' #type在上电期间首次引导时确定,通常不需要改变。在brcm47xx平台是`Broadcom`,其他平台是`mac80211`
option channel '11' #指定要使用的无线信道。“自动”默认为最低可用频道
option hwmode '11g' #选择要使用的无线协议,可能的值为11b,11g(2.4g)和11a(5g)。
option path '1e140000.pcie/pci0000:00/0000:00:01.0/0000:02:00.0'
option htmode 'HT20' #指定802.11n(2.4or5)和802.11ac(5g)模式下的信道宽度。
option country 'US'
config wifi-iface 'default_radio0'
option device 'radio0' #基于物理radio0,定义无线网络
option network 'lan' #划分为/etc/config/network中的lan接口
option mode 'ap' #选择无线网络接口控制器的操作模式。可能的值有ap,sta,adhoc,wds,monitor,mesh
option ssid 'OpenWrt_2.4G'
option encryption 'none'#无线加密方法。可能的值为:none,wep,psk,psk2
option disabled '0'
config wifi-device 'radio1'
option type 'mac80211'
option channel '36'
option hwmode '11a'
option path '1e140000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0'
option htmode 'VHT80' #VHT80甚高吞吐量80MHz,支持802.11ac。(20,40,80,160)
option country 'US'
config wifi-iface 'default_radio1'
option device 'radio1'
option network 'lan'
option mode 'ap'
option ssid 'OpenWrt_5G'
option encryption 'none'
option disabled '0'
/etc/config/dhcp openwrt 使用同一个程序 dnsmasq 来实现 DHCP 服务器和 DNS 服务器。
config dnsmasq
#这四个选项保证了本地域名的请求,不会转发到上游域名解析服务器上。
option domainneeded '1' #
option boguspriv '1'
option localise_queries '1'
option expandhosts '1'
option filterwin2k '0' #不要转发公共名称服务器无法响应的请求。如果需要解析SRV记录或使用SIP电话,请确保禁用该功能。
option rebind_protection '1' #通过丢弃上游RFC1918响应来启用DNS重新绑定攻击保护
option rebind_localhost '1' #允许上游127.0.0.0/8响应(基于DNS的黑名单服务所需)仅在启用重新绑定保护时生效
#local和domain选项使得dnsmasq使用/etc/hosts文件里的条目定义来提供解析,如果DHCP配置了lan的域,那么获得地址的客户机也可以通过主机名解析。
option local '/lan/'
option domain 'lan'
option nonegcache '0' #禁止缓存否定的“没有这样的域”响应
option authoritative '1' #选项保证了路由器成为本网络上的唯一一台DHCP服务器;客户机可以更快的获取IP地址的配置。
option readethers '1' #从“/etc/ethers”读取静态租约条目,在SIGHUP上重新读取
option leasefile '/tmp/dhcp.leases' #用于保存租约内容,这样如果dnsmasq如果重启的话就可以根据该文件重新维护租约信息。
option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto' #定义了dnsmasq使用的文件,该文件用于找到上游服务器,通常由WAN DHCP客户端和PPP客户端创建。
option nonwildcard '1' #只绑定已配置的接口地址,而不是通配符地址。
option localservice '1' #仅接受来自地址位于本地子网(即服务器上存在接口的子网)的主机的DNS查询。
option filter_aaaa '1'
config dhcp 'lan'
option interface 'lan' #指定了DHCP服务器的服务接口“lan”
option start '100' #start:100 是客户端分配的IP地址起点
option limit '150' #limit: 150 总共可以分配150个IP 地址
option leasetime '12h' #12h 表示客户端得到的地址租约时间为 12 小时
option dhcpv6 'server'
option ra 'server'
option ra_slaac '1'
list ra_flags 'managed-config'
list ra_flags 'other-config'
config dhcp 'wan'
option interface 'wan'
option ignore '1'
config odhcpd 'odhcpd'
option maindhcp '0'
option leasefile '/tmp/hosts/odhcpd'
option leasetrigger '/usr/sbin/odhcpd-update'
option loglevel '4'
config srvhost
option srv '_vlmcs._tcp'
option target 'OpenWrt'
option port '1688'
option class '0'
option weight '100'
由上总结:
Linux 的网络接口(Network Interfaces)分为两种:
- 物理网络接口 : eth0, eth8, radio0, wlan19 这些符号总是代表着真实存在的网络设备 .当设备驱动加载到内核,这些网络接口就可以使用了。
- 虚拟网络接口: lo, eth0:1, eth0.1, vlan2, br0, pppoe-dsl, gre0, sit0 tun0, imq0, teql0, … 这些都是不真实存在物理网络设备的虚拟的网络接口 ,需要链接到物理网络设备才可以使用。增加了系统的灵活性。
VLAN是Virtual Local Area Network(即:虚拟局域网)。 它是物理网络交换设备在OSI第2层(即:数据链路层)上的虚拟隔断。
许多现成路由器中一个常见默认VLAN配置是LAN?WAN隔离,此类设备上的OpenWrt默认配置通常会反映出厂配置:仅有一个网络接口(eth0),因此启用不同的VLAN将支持VLAN的5口交换机虚拟隔离出LAN和WAN网络。 ———————————————— 版权声明:本文为CSDN博主「hzlarm」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/hzlarm/article/details/109892791 https://blog.csdn.net/weixin_38387929/article/details/118035431 https://blog.csdn.net/weixin_38387929/category_10691723.html
|