OpenWrt下适配Target Profile
- 概述
- 目标版型基本参数
- 内核修改项
- 配置修改项
- 注意事项
- 总结
概述
最近由于工作上的原因,需要在最新的OpenWrt上适配一个新的版型,项目是基于客户定制的双频无线路由器,由于对新的框架了解不是很深入,遇到了一些问题,特别记录下,方便后期定位问题。
目标版型基本参数
这次的项目适配相对来说没什么难度,注意一些细节即可以了,而且已有现成的可作参考。
- 基于E1700的mach文件二次调整开发。
内核修改项
- 适配make menuconfig菜单选项
/openwrt/target/linux/ar71xx/image/generic.mk
define Device/MGS6900
$(Device/e1700ac-v2-16M)
DEVICE_TITLE := Mexon MGS6900 board
BOARDNAME := MGS6900
SUPPORTED_DEVICES := mgs6900 这个信息一定要配置对,在升级时,会嵌入大包信息中,升级前创建相关信息到/tmp/sysupgrade.meta中,进行对比设备名。
endef
TARGET_DEVICES += MGS6900
define Device/MR3200
$(Device/e1700ac-v2-16M)
DEVICE_TITLE := Mexon MR3200 board
BOARDNAME := MR3200
SUPPORTED_DEVICES := mr3200
endef
TARGET_DEVICES += MR3200
- 添加新的mach文件,参考mach-e1700ac.c文件,做细节上的修改即可。
/openwrt/linux-4.14.90/arch/mips/ath79/mach-mgs6900.c
/openwrt/linux-4.14.90/arch/mips/ath79/mach-mr3200.c
注意下machine传参即可
MIPS_MACHINE(ATH79_MACH_MGS6900, "MGS6900", "Mexon MGS6900 board ver 1.0",e1700ac_v2_setup);
- 修改Makefile以及编译选项
//修改Makefile文件,编译新添加的mach文件
/* /openwrt/linux-4.14.90/arch/mips/ath79/Makefile */
obj-$(CONFIG_ATH79_MACH_MGS6900) += mach-mgs6900.o
obj-$(CONFIG_ATH79_MACH_MR3200) += mach-mr3200.o
//添加默认配置,使MGS6900和MR3200配置生效。
/* /openwrt/target/linux/ar71xx/generic/config-default */
CONFIG_ATH79_MACH_MGS6900=y
CONFIG_ATH79_MACH_MR3200=y
//添加内核选项 config ATH79_MACH_MGS6900 config ATH79_MACH_MR3200
/* /openwrt/linux-4.14.90/arch/mips/ath79/Kconfig.openwrt */
config ATH79_MACH_MGS6900
bool "Mexon MGS6900 support"
select SOC_QCA956X
select ATH79_DEV_AP9X_PCI if PCI
select ATH79_DEV_ETH
select ATH79_DEV_GPIO_BUTTONS
select ATH79_DEV_LEDS_GPIO
select ATH79_DEV_M25P80
select ATH79_DEV_USB
select ATH79_DEV_WMAC
config ATH79_MACH_MR3200
bool "Mexon MR3200 support"
select SOC_QCA956X
select ATH79_DEV_AP9X_PCI if PCI
select ATH79_DEV_ETH
select ATH79_DEV_GPIO_BUTTONS
select ATH79_DEV_LEDS_GPIO
select ATH79_DEV_M25P80
select ATH79_DEV_USB
select ATH79_DEV_WMAC
配置修改项
OpenWrt 配置通用的部分很多,但是不同芯片不同版型又有差异,需要单独根据版型适配。一下几点需要重新配置。
- 对新版型命名
#/openwrt/target/linux/ar71xx/base-file/lib/ar71xx.sh
ar71xx_board_detect() 索引项下添加。添加规则按照/proc/cpuinfo 输出的信息匹配
*"MGS6900 board ver 1.0")--------》对应mach文件中的name名字,如果修改名字需要同步修改board name
name="mgs6900"-----》对应各个初始化配置文件以及升级校验
;;
*"MR3200 board ver 1.0")
name="mr3200"-----》对应各个初始化配置文件以及升级校验
;;
- 配置升级匹配项
#/openwrt/target/linux/ar71xx/base-file/lib/upgrade/platform.sh
platform_check_image() {
local board=$(board_name)
local magic="$(get_magic_word "$1")"
local magic_long="$(get_magic_long "$1")"
[ "$#" -gt 1 ] && return 1
case "$board" in
#找到相关类似版型适配进去即可
- 配置默认LED灯以及初始化的network配置
#/openwrt/target/linux/ar71xx/base-file/etc/board.d/
mgs6900)
ucidef_set_led_switch "wan" "WAN" "LED3" "switch0" "0x02"
ucidef_set_led_switch "lan1" "LAN1" "LED2" "switch0" "0x04"
ucidef_set_led_switch "lan2" "LAN2" "LED1" "switch0" "0x08"
ucidef_set_led_switch "lan3" "LAN3" "LED0" "switch0" "0x10"
ucidef_set_led_timer "run" "RUN" "mgs6900:green:run" "1000" "1000"
#ucidef_set_led_wlan "wlan2g" "WLAN 2.4 GHz" "mgs6900:green:2G" "phy1tpt"
;;
mr3200)
#ucidef_set_led_switch "wan" "WAN" "mgs6900:green:wan" "switch0" "0x02"
#ucidef_set_led_switch "lan1" "LAN1" "mgs6900:green:lan1" "switch0" "0x04"
#ucidef_set_led_switch "lan2" "LAN2" "mgs6900:green:lan2" "switch0" "0x08"
#ucidef_set_led_switch "lan3" "LAN3" "mgs6900:green:lan3" "switch0" "0x10"
ucidef_set_led_timer "run" "RUN" "mgs6900:green:run" "1000" "1000"
#ucidef_set_led_wlan "wlan2g" "WLAN 2.4 GHz" "mgs6900:green:2G" "phy1tpt"
;;
- 配置5G用于启动的文件,加载9880校准数据。
#/openwrt/target/linux/ar71xx/base-file/etc/hotplug.d/firmware/11-ath10k-caldata
case "$FIRMWARE" in
"ath10k/cal-pci-0000:00:00.0.bin")
case $board in
#在相同版型下进行适配即可,采用的都是ath10k的驱动
注意事项
整个流程虽然很简单,但是涉及细节部分很多,所以在此记录下,以后遇到问题,随时更新。
总结
针对添加新的Target Profile项,后续结合工作会持续完善。前期做的都是比较简单的工作,以后会逐渐深入。