OpenWrt下适配Target Profile

  • 概述
  • 目标版型基本参数
  • 内核修改项
  • 配置修改项
  • 注意事项
  • 总结


概述

最近由于工作上的原因,需要在最新的OpenWrt上适配一个新的版型,项目是基于客户定制的双频无线路由器,由于对新的框架了解不是很深入,遇到了一些问题,特别记录下,方便后期定位问题。

目标版型基本参数

这次的项目适配相对来说没什么难度,注意一些细节即可以了,而且已有现成的可作参考。

  1. 基于E1700的mach文件二次调整开发。

内核修改项

  1. 适配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
  1. 添加新的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);
  1. 修改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 配置通用的部分很多,但是不同芯片不同版型又有差异,需要单独根据版型适配。一下几点需要重新配置。

  1. 对新版型命名
#/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"-----》对应各个初始化配置文件以及升级校验
	;;
  1. 配置升级匹配项
#/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
#找到相关类似版型适配进去即可
  1. 配置默认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"
;;
  1. 配置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项,后续结合工作会持续完善。前期做的都是比较简单的工作,以后会逐渐深入。