本文基于OpenWrt 21.02版本和MT7621平台介绍如何新增一个产品设备来进行编译,在旧版的OpenWrt(例如:MT7628的官方SDK)中则有所不同,仅供参考。
建立dts文件
- 在OpenWrt代码库下的
target/linux/ramips/dts/
新建一个mt7621_mint_router2_spi.dts
文件,其他的硬件平台则需要选择其他平台路径下的dts文件夹,例如:target/linux/bcm63xx/dts/
。 - 编辑新建立的dts文件,参考如下:
#include "mt7621.dtsi" // 引入mt7621芯片的dtsi文件
/ {
compatible = "mint,router2_spi", "mediatek,mt7621-soc"; // 设备的兼容性列表
model = "mint router2_spi"; // 设备的型号
};
&spi0 {
status = "okay"; // 启用SPI0 总线
flash@0 {
compatible = "jedec,spi-nor"; // spi flash的类型
reg = <0>; // 设备的寄存器地址
spi-max-frequency = <44000000>; // SPI 总线最大频率
broken-flash-reset; // 如果设备复位,SPI 总线将会被重置
partitions {
compatible = "fixed-partitions"; // 设备的兼容性列表
#address-cells = <1>; // 分区的地址单元数量
#size-cells = <1>; // 分区的大小单元数量
partition@0 {
label = "u-boot"; // 分区的名称
reg = <0x0 0x30000>; // 分区的地址范围
read-only; // 只读分区
};
partition@30000 {
label = "u-boot-env"; // 分区的名称
reg = <0x30000 0x10000>; // 分区的地址范围
read-only; // 只读分区
};
factory: partition@40000 {
label = "factory"; // 分区的名称
reg = <0x40000 0x10000>; // 分区的地址范围
read-only; // 只读分区
};
partition@50000 {
compatible = "denx,uimage"; // 分区的兼容性列表
label = "firmware"; // 分区的名称
reg = <0x50000 0x1fb0000>; // 分区的地址范围
};
};
};
};
&sdhci {
status = "okay"; // 启用SDHCI 控制器
};
&switch0 {
ports {
port@0 {
status = "okay"; // 启用端口0
label = "lan1"; // 端口的名称
};
port@1 {
status = "okay"; // 启用端口1
label = "lan2"; // 端口的名称
};
port@2 {
status = "okay"; // 启用端口2
label = "lan3"; // 端口的名称
};
port@3 {
status = "okay"; // 启用端口3
label = "lan4"; // 端口的名称
};
port@4 {
status = "okay"; // 启用端口4
label = "wan"; // 端口的名称
};
};
};
&i2c { // 配置i2c设备节点
status = "okay"; // 启用i2c设备节点
rtc@51 { // 配置PCF8563实时时钟设备节点
status = "okay"; // 启用PCF8563实时时钟设备
compatible = "nxp,pcf8563"; // 设备兼容性为NXP的PCF8563型号
reg = <0x51>; // PCF8563实时时钟设备节点在i2c总线上的地址为0x51
};
};
&pcie { // 定义PCIe总线节点
status = "okay"; // 启用该PCIe总线
};
&pcie0 { // 定义PCIe设备节点0
wifi@0,0 { // 定义一个wifi设备
compatible = "mediatek,mt76"; // 指定设备的兼容性
reg = <0x0000 0 0 0 0>; // 指定设备的寄存器地址
mediatek,mtd-eeprom = <&factory 0x0000>; // 指定这个wifi设备的厂家校准信息及MAC的存储位置
ieee80211-freq-limit = <2400000 2500000>; // 指定设备的IEEE 802.11频率限制
};
};
&pcie1 { // 定义PCIe设备节点1
wifi@0,0 { // 定义一个wifi设备
compatible = "mediatek,mt76"; // 指定设备的兼容性
reg = <0x0000 0 0 0 0>; // 指定设备的寄存器地址
mediatek,mtd-eeprom = <&factory 0x0000>; // 指定这个wifi设备的厂家校准信息及MAC的存储位置
ieee80211-freq-limit = <5000000 6000000>; // 指定设备的IEEE 802.11频率限制
};
};
&state_default { // 定义默认状态
gpio { // 定义GPIO控制器
groups = "uart2", "uart3", "rgmii2", "sdhci"; // 指定作为GPIO的端口组
function = "gpio"; // 指定GPIO控制器
};
};
修改mt7621.mk文件
打开target/linux/ramips/image/mt7621.mk
,在设备列表里加入新增产品的编译选项,参考如下:
define Device/mediatek_mt7621-eval-board
$(Device/dsa-migration)
BLOCKSIZE := 64k
IMAGE_SIZE := 15104k
DEVICE_VENDOR := MediaTek
DEVICE_MODEL := MT7621 EVB
DEVICE_PACKAGES := -wpad-basic-wolfssl
SUPPORTED_DEVICES += mt7621
endef
TARGET_DEVICES += mediatek_mt7621-eval-board
# 新增产品的编译选项
define Device/mint_router2_spi
$(Device/dsa-migration)
$(Device/uimage-lzma-loader)
BLOCKSIZE := 64k #flash的block大小
IMAGE_SIZE := 32448k #固件最大大小,如果这里设置过小而开了很多的软件包,就会编译出错
DEVICE_VENDOR := mint #厂家名称
DEVICE_MODEL := router2_spi #产品型号
DEVICE_PACKAGES := kmod-mt7603 kmod-usb3 uboot-envtools #默认安装的软件包
SUPPORTED_DEVICES += mt7621 #基于mt7621
endef
TARGET_DEVICES += mint_router2_spi
选择新建的产品编译
命令行输入make menuconfig,选择新增的产品:
$ make menuconfig
Target System —>
MediaTek Ralink MIPS
Subtarget —>
MT7621 based boards
Target Profile —>
mint router2_spi
保存后退出menuconfig
,执行make V=s
进行编译即可。