概述
最近由于工作上的原因,需要在最新的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项,后续结合工作会持续完善。前期做的都是比较简单的工作,以后会逐渐深入。