MT7628/7688 openwrt下启用串口2

1.修改DTS文件

首先确保系统中启动/dev/ttyS2,先修改dts文件。

1)确保 ./target/linux/ramips/dts/mt7628an.dtsi中有如下代码
		uart2: uart2@e00 {
			compatible = "ns16550a";
			reg = <0xe00 0x100>;

			reg-shift = <2>;
			reg-io-width = <4>;
			no-loopback-test;

			clock-frequency = <40000000>;

			resets = <&rstctrl 20>;
			reset-names = "uart2";

			interrupt-parent = <&intc>;
			interrupts = <22>;

			pinctrl-names = "default";
			pinctrl-0 = <&uart2_pins>;
		};
2)在 ./target/linux/ramips/dts/your_device.dts中添加
&uart2 {
	status = "okay";
};

2.修改寄存器

MT7688/7628分为IoT Device Mode和IoT Gateway Mode,即单网口模式和五网口模式。如要使用UART2,则必须使用单网口模式,需要配置的寄存器如下:
mt7628/88 寄存器
其中EPHY_GPIO_AIO_EN设置成digital pad。

1)修改源码方式

./build_dir/target-mipsel_24kc_musl/linux-ramips_mt76x8/linux-4.14.132/arch/mips/ralink/mt7620.c中的prom_soc_init函数中添加

	u32 cfg;
	
	cfg = __raw_readl(sysc + 0x3c);
	cfg |= 0x0f<<17;
	__raw_writel(cfg, sysc + 0x3c);
2)通过/dev/mem方式

先开启/dev/mem支持,make menuconfig

->Global build settings
	->Kernel build options
		->[*]/dev/mem virtual device support

源码,每次开机时,执行该程序。

#include <stdio.h>
#include <stdint.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>

typedef enum{
	IOT_DEV_MODE,		//单网口模式
	IOT_GATEWAY_MODE	//五网口模式
}work_mode_7628_t;

int set_7628_work_mode(work_mode_7628_t mode)
{
	int ch;
	int mem_fd = open("/dev/mem", O_RDWR|O_SYNC); 
	if(mem_fd == -1)
	{
		perror("open /dev/mem");
		return -1;
	}
	int size = 0x100;
	int *addr = (int *)mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, mem_fd, 0x10000000);
	if(addr == MAP_FAILED)
	{
		perror("mmap");
		return -1;
	}
	
	if(mode == IOT_DEV_MODE)
	{
		*(addr+(0x3c/4)) |= 0x0f<<17;
	}
	else
	{
		*(addr+(0x3c/4)) &= ~(0x0f<<17);
	}

	close(mem_fd);
	munmap(addr, size);
	return 0;
}
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值