Forlinx iMX93 Development Board Achieves Routing Functionality: Bridge Setup, 4G Forwarding, and Device Configuration

Routing is a core component of device networking, responsible for intelligent data packet forwarding, ensuring efficient communication and internet access. It also assigns IP addresses to devices connected via the network interface, ensuring stable and secure connections. Below is a guide on how to implement routing functionality on the Forlinx i.MX93 platform.

1. Bridge Building

1.1 Busybox Compilation and Brctl Tool Loading

There is no brctl tool in the busybox of the 93 development board, so it needs to be recompiled. If the busybox of the board has the brctl tool, this step can be ignored.

Down load busybox-1.35 source code, website: https://busybox.net/

Unzip it on the 93 development environment and execute make menuconfig to configure.

forlinx@ubuntu:~/work/busybox$ tar -xvf busybox-1.35.0.tar.bz2
forlinx@ubuntu:~/work/busybox$ cd busybox-1.35.0/
forlinx@ubuntu:~/work/busybox/busybox-1.35.0$ . /opt/fsl-imx-xwayland/5.15-kirkstone/environment-setup-armv8a-poky-linux 
forlinx@ubuntu:~/work/busybox/busybox-1.35.0$ make menuconfig

Select Setting-->[*] Don't use /usr

In this way, it will be installed to the directory specified by itself (default./_ install). This option must be selected, otherwise busybox will be installed under/usr of the original system after make install, which will overwrite the original commands of the system. After selecting this, make install will generate the _ install directory under the busybox directory, which contains the busybox and the link pointing to it.

Add cross-compilation path (it can be set according to your own requirements):
Setting-->--- Build Options

(arch64-poky-linux-) Cross compiler prefix 
(/opt/fsl-imx-xwayland/5.15-kirkstone/sysroots/armv8a-poky-linux) Path to sysroot                          
(-O2 -pipe -g -feliminate-unused-debug-types) Additional CFLAGS                                                    
(-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed  -Wl,-z,relro,-z,now) Additional LDFLAGS 

Forlinx iMX93 Development Board Routing Function in Detail: From Bridge to 4G Forwarding

Select brctl tool

Networking Utilities --->[*] brctl (4.7 kb)

Forlinx iMX93 Development Board Routing Function in Detail: From Bridge to 4G Forwarding

Modify and then compile

forlinx@ubuntu:~/work/busybox/busybox-1.35.0$ make
forlinx@ubuntu:~/work/busybox/busybox-1.35.0$ make install

Copy the generated busybox command to the development board/home/root path

1.2 Kernel Source Code Modification

forlinx@ubuntu:~/work/ok-mx93/OKMX93-linux-sdk/OKMX93-linux-kernel$ vi drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
(478 line)
/*      if (hw->promisc) {
                netdev_err(dev,
                           “Adding VLAN in promisc mode not supported\n");
                return -EPERM;
        }*/
(533 line)
/*      if (hw->promisc) {
                netdev_err(dev,
                           "Deleting VLAN in promisc mode not supported\n");
                return -EPERM;
        }*/

Save and recompile the kernel after modification, generate Image and update the kernel

1.3 Building a Bridge With Brctl

root@ok-mx93:~# ./busybox brctl addbr br0 //Create bridge device br0
root@ok-mx93:~# ./busybox brctl stp br0 off //Turn off the STP
root@ok-mx93:~# ./busybox brctl addif br0 eth0 //Add eth0 to the bridge
root@ok-mx93:~# ./busybox brctl addif br0 eth1 //Add eth1 to the bridge
root@ok-mx93:~# ifconfig br0 192.168.0.10 up configure br0 ip and start it

2. 4G for Network Forwarding

2.1 4G Dial-up

If there is command service, you need to delete it and restart.

root@ok-mx93:~# rm /usr/sbin/connmand
root@ok-mx93:~# sync
root@ok-mx93:~# reboot
root@ok-mx93:~# fltest_quectel.sh
root@ok-mx93:~# ifconfig eth0 up
root@ok-mx93:~# ifconfig eth1 up

Note: The network port will be closed in the 93 dial-up script. If it is not necessary, you can comment out the command to close the network port in the script.

2.2 Route Priority Adjustment

Checking with ''route -n'' reveals that the priorities of eth0 and eth1 are higher than 4G. At this point, 4G cannot access the Internet, so it is necessary to adjust the priorities to avoid affecting the 4G network.

root@ok-mx93:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
0.0.0.0         192.168.2.1     0.0.0.0         UG    0      0        0 eth1
0.0.0.0         10.137.251.242  0.0.0.0         UG    10     0        0 usb0
10.137.251.240  0.0.0.0         255.255.255.252 U     0      0        0 usb0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1

Modify the metric parameter to change the priority.

root@ok-mx93:~# route del default gw 192.168.1.1
root@ok-mx93:~# route del default gw 192.168.2.1
root@ok-mx93:~# route add default gw 192.168.1.1 dev eth0 metric 11
root@ok-mx93:~# route add default gw 192.168.2.1 dev eth1 metric 11
root@ok-mx93:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.137.251.242  0.0.0.0         UG    10     0        0 usb0
0.0.0.0         192.168.2.1     0.0.0.0         UG    11     0        0 eth1
0.0.0.0         192.168.1.1     0.0.0.0         UG    11     0        0 eth0
10.137.251.240  0.0.0.0         255.255.255.252 U     0      0        0 usb0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1

After modification, 4G can access the Internet normally.

root@ok-mx93:~# ping www.baidu.com
PING www.a.shifen.com (39.156.66.18) 56(84) bytes of data.
64 bytes from 39.156.66.18 (39.156.66.18): icmp_seq=1 ttl=51 time=32.7 ms
64 bytes from 39.156.66.18 (39.156.66.18): icmp_seq=2 ttl=51 time=31.4 ms
64 bytes from 39.156.66.18 (39.156.66.18): icmp_seq=3 ttl=51 time=29.3 ms
64 bytes from 39.156.66.18 (39.156.66.18): icmp_seq=4 ttl=51 time=29.1 ms
^C
--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 29.066/30.612/32.663/1.494 ms

2.3 4G Forwarding

Turn on IP to forward.

root@ok-mx93:~# echo 1 > /proc/sys/net/ipv4/ip_forward

Set forwarding rules.

root@ok-mx93:~# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o usb0 -jMASQUERADE
root@ok-mx93:~# iptables -A FORWARD -i br0 -j ACCEPT

Configure the udhcpd service and modify the/etc/udhcpd. conf films.

root@ok-mx93:~# vi /etc/udhcpd.conf
...
# The start and end of the IP lease block
start           192.168.0.100
end             192.168.0.254
# The interface that udhcpd will use
interface       br0
...
# Examples:
opt     dns     114.114.114.114
option  subnet  255.255.255.0
opt     router  192.168.0.10

Forlinx iMX93 Development Board Routing Function in Detail: From Bridge to 4G Forwarding

Forlinx iMX93 Development Board Routing Function in Detail: From Bridge to 4G Forwarding

Turn on the udhcpd service

root@ok-mx93:~# udhcpd /etc/udhcpd.conf   &

3. Computer and Device Side

Set both the computer and the device to obtain IP automatically.

After obtaining the IP, the two can access the external network and ping each other.