嵌入式爱好者

A40i linux系统网桥搭建问题解决

2024-4-20 16:52| 发布者: 飞凌-chongzi| 查看: 84| 评论: 0

类目: A40i/T3系列产品  >  Linux     文档编号: 1367

A40i默认没有搭建网桥的支持,需要修改源码添加配置,该方案基于A40i双网口方案
1、无论是linux3.10还是linux5.10,都需要添加bridge配置
需要在buildroot中配置BR2_PACKAGE_BRIDGE_UTILS
在内核中配置BRIDGE
具体配置过程见编译手册或应用笔记,两处的配置都设置成y后,才能使用网桥搭建的指令
2、修改网口的驱动
使用linux5.10系统
修改gmac驱动,打开bsp/drivers/gmac/sunxi-gmac.c,860行处修改成如下内容
static void sunxi_gmac_set_filter(void *iobase, unsigned int flags)
{
        int tmp_flags = 0;

        /* TODO: replace numbers with marcos */
        tmp_flags |= ((flags >> 31) |
                        ((flags >> 9) & 0x00000002) |
                        ((flags << 1) & 0x00000010) |
                        ((flags >> 3) & 0x00000060) |
                        ((flags << 7) & 0x00000300) |
                        ((flags << 6) & 0x00003000) |
                        ((flags << 12) & 0x00030000) |
                        (flags << 31));
        writel(tmp_flags, iobase + SUNXI_GMAC_RX_FRM_FLT);
}

使用linux3.10系统
打开linux-3.10/drivers/net/ethernet/allwinner/sunxi_gmac_ops.c,466行处注释掉读取寄存器的代码
void sunxi_set_filter(void *iobase, unsigned long flags)
{
        int tmp_flags;
//      tmp_flags = readl(iobase + GETH_RX_FRM_FLT);
        tmp_flags |= ((flags >> 31) |
                        ((flags >> 9) & 0x00000002) |
                        ((flags << 1) & 0x00000010) |
                        ((flags >> 3) & 0x00000060) |
                        ((flags << 7) & 0x00000300) |
                        ((flags << 6) & 0x00003000) |
                        ((flags << 12) & 0x00030000) |
                        (flags << 31));
3、编译测试
修改完成后,编译镜像,烧写,使用如下指令搭建网桥
ifconfig eth0 0.0.0.0 up
ifconfig eth1 0.0.0.0 up 
brctl addbr br0
brctl addif br0 eth0
brctl addif br0 eth1
ifconfig br0 192.168.0.240 netmask 255.255.255.0 up

A40i两个网口分别接不同设备,这两个设备经过了A40i后可以相互ping通。不同网段的ip也不受影响

已解决

未解决

只是看看

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-11-22 12:03

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

返回顶部