====== WLAN ====== :!: Config-files don't have any security-params enabled (e.g. WLAN-security/authentification in HostAPd), these are only a start for quick testing ===== internal ===== in Kernel 4.4.70 code is available, but must be activated [[https://github.com/BPI-SINOVOIP/BPI-R2-bsp/tree/master/vendor/mediatek/connectivity|GitHub]] [[http://forum.banana-pi.org/t/2-4ghz-and-5-6ghz-wifi-working-fine/3844/32|Forum]] [[https://github.com/BPI-SINOVOIP/BPI-R2-bsp/commit/6b9512b853b1efc66109a41a0108579dcc9e054c|Patch]] [[https://github.com/BPI-SINOVOIP/BPI-R2-bsp/commit/219be3221aadb2d316557df8064bb231ca46ed51|Patch #2]] :!: wpasupplicant must be removed and hostapd+dnsmasq installed: apt-get remove wpasupplicant apt-get install hostapd dnsmasq {{ https://github.com/BPI-SINOVOIP/BPI-R2-bsp/tree/master/vendor/mediatek/connectivity/config | copy cfg to /system/etc/firmware/}} {{ :bpi-r2:r2_wifi_helper.zip | helper-applications for next steps (unpack to /usr/bin)}} and {{ :bpi-r2:r2-firmware.zip | Firmware (unpack to /etc/firmware/)}} from [[https://github.com/BPI-SINOVOIP/BPI-R2-bsp/tree/master/vendor/mediatek/connectivity|here]] - wmt_loader - stp_uart_launcher -p /etc/firmware & - load driver module (if compiled as module 5.4+): modprobe wlan_gen2 - echo A >/dev/wmtWifi (activate AP-Mode) in last step ap-device (Accesspoint) will be created, which can be used by hostapd [14:14] root@bpi-r2:~# ifconfig -a|grep Link ap0 Link encap:Ethernet HWaddr 02:08:22:68:39:ff bond0 Link encap:Ethernet HWaddr e2:7c:e0:71:31:c1 eth0 Link encap:Ethernet HWaddr 08:00:00:00:00:00 inet6 addr: fe80::a00:ff:fe00:0/64 Scope:Link eth1 Link encap:Ethernet HWaddr 08:00:00:00:00:01 inet6 addr: fe80::a00:ff:fe00:1/64 Scope:Link lo Link encap:Local Loopback sit0 Link encap:IPv6-in-IPv4 tunl0 Link encap:IPIP Tunnel HWaddr wlan0 Link encap:Ethernet HWaddr 00:08:22:68:39:ff /etc/hostapd/hostapd.conf: hw_mode=g interface=ap0 driver=nl80211 channel=1 auth_algs=1 ssid=test start hostapd hostapd -dd /etc/hostapd/hostapd.conf interface can now be further configured and DHCP-Server configured and started: [[#ip-configuration]] {{ :bpi-r2:wifi_enable.sh | old Script to start-up wireless AP}} {{ :bpi-r2:wifi.sh |}} ==== client-mode ==== Afair only working in vendor kernel versions (4.4,4.14) http://forum.banana-pi.org/t/topic/5548 works with 4.14-mt6625 branch (4.14.32 + vendor-code + fixes) apt install wpasupplicant /usr/bin/wmt_loader /usr/bin/stp_uart_launcher -p /etc/firmware & echo 1 >/dev/wmtWifi /etc/wpa_supplicant/wpa_supplicant.conf: network={ ssid="ssid" psk="12345678" priority=1 } wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf dhclient wlan0 ==== Kernel 4.14 ==== code from 4.4.70 has been merged to [[https://github.com/frank-w/BPI-R2-4.14|my github-repo]] wifi-configuration is the same as in Kernel 4.4 [[#internal]] discussion here: [[http://forum.banana-pi.org/t/r2-internal-wifi-bt-mt6625l-kernel-4-14-x-4-15/4307|forum]] systemd init script here: http://forum.banana-pi.org/t/bpi-r2-internal-wifi-bt-mt6625l-kernel/4307/281 ==== known issues ==== === random numbers === after a (Re-)boot the random-number generator not filled enough, so that connection-attempts will be rejected. in the hostapd-log there are entries like this: random: Cannot read from /dev/random: Resource temporarily unavailable random: Got 0/14 bytes from /dev/random random: Only 6/20 bytes of strong random data available from /dev/random random: Not enough entropy pool available for secure operations WPA: Not enough entropy in random pool to proceed - reject first 4-way handshake ... WPA: Reject 4-way handshake to collect more entropy for random number generation random: Mark internal entropy pool to be ready (count=1/2) ... random: Cannot read from /dev/random: Resource temporarily unavailable random: Got 0/14 bytes from /dev/random random: Only 6/20 bytes of strong random data available from /dev/random random: Allow operation to proceed based on internal entropy http://forum.banana-pi.org/t/bpi-r2-new-image-release-ubuntu-16-04-v1-3-2018-3-30/5293/25 apt-get install rng-tools echo 'HRNGDEVICE=/dev/urandom' >> /etc/default/rng-tools === init failed === root@bpi-iot-ros-ai:~# wmt_loader init combo device Opened combo device get device id : 30243 set device id : 30243 do module init: 30243 failed to init module This can be ignored because the combo-driver tries to init wifi,bt,gps and fm. Last 2 fail because driver does not support them. === stpnode === Can't open device node(/dev/stpwmt) error:-1 //in dmesg: [WMT-DEV][W]WMT_open:wait_event_timeout (2000)ms,(200)jiffies,return -EIO reboot fixed that...reason still unclear Also this can be tried: apt-get install network-manager sudo nmcli radio wifi off rfkill unblock 1 rfkill unblock 2 === no traffic === Kernelmodules SCH_FQ / SCH_FQ_CODEL are known breaking ap0-functionality maybe there are some kalHifAhbKalWakeLockTimeout messages in dmesg maybe NETFILTER_XT_TARGET_NFQUEUE does have similar effects ([[http://forum.banana-pi.org/t/bpi-r2-integrated-wifi-trouble/10564/43?u=frank-w|see here]]) === rcu_stall === this is maybe caused by net.ifnames=0 [ 437.885886] [MTK-WIFI] WIFI_open: WIFI_open: major 155 minor 0 (pid 2614) [ 437.892961] [MTK-WIFI] WIFI_write: WIFI_write A [ 437.892961] [ 437.938648] kalFirmwareImageMapping firmware size 225840 [ 439.132189] [MTK-WIFI] register_set_p2p_mode_handler: (pid 2620) register set p2p mode handler b6888aac [ 439.141960] [MTK-WIFI] WIFI_write: WMT turn on WIFI success! [ 460.170441] rcu: INFO: rcu_sched detected stalls on CPUs/tasks: hang occours in kalioctl (drivers/misc/mediatek/connectivity/wlan/gen2/os/linux/gl_kal.c) while calling kernel-function down_interruptible (kernel/locking/semaphore.c), semaphore is created correctly in drivers/misc/mediatek/connectivity/wlan/gen2/os/linux/gl_init.c (sema_init(&prGlueInfo->ioctl_sem, 1);) solution: do not use net.ifnames in cmdline and use [[.:network:start#interface-name|udev-renaming]] === driver hang === check if there is a wlan0 device before starting wifi.sh/manual init of ap0 device. driver will hang after message [MTK-WIFI] WIFI_write: WMT turn on WIFI success if there is a wlan0 interface not mapped to the mt6625l driver (maybe pcie/usb-wifi-device). rootcause is adding a handler to wrong netdev searched with hardcoded wlan0 in drivers/misc/mediatek/connectivity/common/conn_soc/linux/pub/wmt_chrdev_wifi.c #define WLAN_IFACE_NAME "wlan0" static INT8 *ifname = WLAN_IFACE_NAME; netdev = dev_get_by_name(&init_net, ifname); pf_set_p2p_mode(netdev, p2pmode); you can rename existing wlan0 to anything else before starting ap0 init ip link set wlan0 name wlan_2g ip link set wlan1 name wlan_5g did this with my mt7615 (dbdc mode) and wifi init finished with success in linux 5.10 === client-mode does not work === client mode does not work in 4.9+ http://forum.banana-pi.org/t/bpi-r2-internal-wifi-bt-mt6625l-kernel/4307/293 i tested wifi-client in 5.10, here it is working with config posted here: http://forum.banana-pi.org/t/bpi-r2-internal-wifi-bt-mt6625l-kernel/4307/329 ===== external ===== ==== MT7612 ==== FIXME [[https://de.aliexpress.com/item/MTK-MT7612E-2x2-802-11ac-b-g-n-Enterprise-867Mbps-MiniPCIE-NIC-PCBA-ODM-OEM/32817460933.html|mt7612e on AliExpress]] firmware neeeded: https://packages.debian.org/buster/firmware-misc-nonfree === 4.4.70 === [[http://forum.banana-pi.org/t/need-help-porting-mt76-driver-to-r2-kernel/3954/32|forum]] git clone https://github.com/BPI-SINOVOIP/BPI-R2-bsp.git bpi_r2_mt76 cd bpi_r2_mt76/ cd linux-mt/drivers/net/wireless/mediatek git clone https://github.com/dfiloni/mt76.git cd ../../../.. #bpi_r2_mt76/linux-mt/ patch -p1 < drivers/net/wireless/mediatek/mt76/kernel-patches/0001-add-basic-register-field-manipulation-macros.patch nano drivers/net/wireless/mediatek/Makefile #add: obj-$(CONFIG_MT76) += mt76/ nano drivers/net/wireless/mediatek/Kconfig #add before endif: before endif # WL_MEDIATEK: source "drivers/net/wireless/mediatek/mt76/Kconfig" cd .. ./build.sh => 4 #networking support => wireless => Generic IEEE 802.11 Networking Stack (mac80211) #Device Drivers => Network device support => Wireless LAN => [*] Mediatek Wireless LAN support => MediaTek MT76x2 802.11ac chips support ./build.sh => 1 cp SD/BPI-BOOT/bananapi/bpi-r2/linux/uImage /media/$USER/BPI-BOOT/bananapi/bpi-r2/linux/uImage sudo cp -r SD/BPI-ROOT/lib/modules /media/$USER/BPI-ROOT/lib/ cp linux-mt/drivers/net/wireless/mediatek/mt76/firmware/* /media/$USER/BPI-ROOT/lib/firmware/ #scp linux-mt/drivers/net/wireless/mediatek/mt76/firmware/* root@192.168.0.10:/lib/firmware/ sync === 4.14 === Kernel 4.14 (in progress...): import {{ :bpi-r2:pcie.patch |PCIe-patch}}, if not done yet patch -p1 < pcie.patch cd drivers/net/wireless/mediatek/ git clone https://github.com/openwrt/mt76.git * in mt76/mt7603.h missing "#include " * in mt76/mac80211.c missing "#include " * in Makefile missing "CFLAGS_trace.o := -I$(src)" und "CFLAGS_mt76x2_trace.o := -I$(src)" * and include code in drivers/net/wireless/mediatek/Makefile obj-$(CONFIG_MT76) += mt76/ and drivers/net/wireless/mediatek/Kconfig source "drivers/net/wireless/mediatek/mt76/Kconfig" unpack {{ :bpi-r2:mt76_4.14.tar.gz | full driver-code for mt76x2 + mt76x3}} to drivers/net/wireless/mediatek/ activate following modules in kernel: CONFIG_MAC80211=m CONFIG_CFG80211=m CONFIG_MT76=m #pcie CONFIG_PCIEPORTBUS=y CONFIG_PCIE_MEDIATEK=y CONFIG_PHY_MTK_TPHY=y copy the firmware sudo cp drivers/net/wireless/mediatek/mt76/firmware/* /media/$USER/BPI-ROOT/lib/firmware/ === configure === [10:50] root@bpi-r2:~# ifconfig -a |grep wlan wlan1 Link encap:Ethernet HWaddr f8:62:aa:50:12:1d <<< if your wlan-device-number is above 1, you can edit that with nano /etc/udev/rules.d/70-persistent-net.rules /etc/hostapd/hostapd.conf (change interface) interface=wlan1 #interface=ap0 driver=nl80211 ssid=r2_AP1 hw_mode=g channel=1 #macaddr_acl=0 auth_algs=1 #ignore_broadcast_ssid=0 #wpa=2 #wmm_enabled=1 #wpa_passphrase=12345678 #wpa_key_mgmt=WPA-PSK #wpa_pairwise=TKIP #rsn_pairwise=CCMP {{ :bpi-r2:hostapd_wlan1.conf | /etc/hostapd/hostapd_wlan1.conf }} start hostapd (Debugmode): hostapd -dd /etc/hostapd/hostapd.conf set IP-address and start dnsmasq: [[#ip-configuration]] ==== MT7615 ==== [[https://github.com/openwrt/mt76/tree/master/firmware|firmware-files]] to /lib/firmware/mediatek/ http://forum.banana-pi.org/t/802-11ac-4x4-standard-size-mini-pcie-card-is-launched/11545/15?u=frank-w I have added mt7615 driver in 5.4 on nov 19 2020 (should be 5.4.78). Mt7615 is separate kernel-module which needs to be loaded modprobe mt7615e === dual-ap === Dbdc mode was added in 5.7 echo 1 > /sys/kernel/debug/ieee80211/phy0/mt76/dbdc There is a report that dbdc cannot be enabled after reboot,but on [[http://forum.banana-pi.org/t/802-11ac-4x4-standard-size-mini-pcie-card-is-launched/11545/23|my tests]] this works without problems You can only enable 2.4ghz on phy0, and 5ghz on phy1 simultaneously. === antenna connectors === WF0-1 are for phy0, and WF2-3 are for phy1. http://forum.banana-pi.org/t/802-11ac-4x4-standard-size-mini-pcie-card-is-launched/11545/16 ===== HostAPd ===== {{ :bpi-r2:hostapd.conf | /etc/hostapd/hostapd.conf}} {{ :bpi-r2:hostapd_wlan1.conf | /etc/hostapd/hostapd_wlan1.conf }} ==== 5GHz ==== apt-get install iw iw list | grep "Supported interface modes" -A 8 apt-get install iw wireless-regdb crda === country code === setting Country-Code (regulary domain) can be a bit tricky iw reg set ISO_3166-1_alpha-2 iw reg set DE iw reg get wrong output: global country 00: DFS-UNSET correct: global country US: DFS-ETSI maybe try this: modprobe cfg80211 ieee80211_regdom=US COUNTRY=US crda $ sudo nano /etc/modprobe.d/cfg80211.conf options cfg80211 ieee80211_regdom=US === possible frequencies === iw list | grep MHz === Hostapd-Configuration === $ sudo nano /etc/hostapd/hostapd.conf [...] country_code=US ieee80211n=1 ieee80211d=1 hw_mode=a channel=48 [...] [[https://www.tobias-bauer.de/hostapd-auf-5-ghz.html|Config-Examples taken from here (DE)]] [[http://www.arubanetworks.com/techdocs/InstantWenger_Mobile/Advanced/Content/Instant%20User%20Guide%20-%20volumes/Country_Codes_List.htm#regulatory_domain_3737302751_1017918|CountryCode-List]] ===== IP-Configuration ===== set IP-address: #set IP and start ip addr add 192.168.10.1/24 dev ap0 #ip link set dev ap0 up ip addr add 192.168.11.1/24 dev wlan1 /etc/dnsmasq.conf (activate line by removing # on begin of line) conf-dir=/etc/dnsmasq.d /etc/dnsmasq.d/interfaces.conf #interface=eth0 interface=wlan0 #interface=eth1 interface=ap0 # DHCP-Server not active for Interface #no-dhcp-interface=ppp0 no-dhcp-interface=eth0 no-dhcp-interface=eth1 #dhcp-authoritative dhcp-range=ap0,192.168.10.100,192.168.10.150,255.255.255.0,48h dhcp-option=ap0,3,192.168.10.1 dhcp-range=wlan1,192.168.11.100,192.168.11.150,255.255.255.0,48h dhcp-option=wlan1,3,192.168.11.1 #special handling of some hosts (here using another dns-server) #dhcp-host=ap0,x:y:z:x:y:z,frank,set:specialhosts,192.168.10.27,12h dhcp-option=tag:specialhosts,option:dns-server,192.168.0.11,8.8.4.4 {{ :bpi-r2:interfaces.conf | /etc/dnsmasq.d/interfaces.conf }} service dnsmasq start ==== Routing ==== nano /etc/sysctl.conf #activate net.ipv4.ip_forward=1 and net.ipv6.conf.all.forwarding=1 by removing # at beginning of line sysctl -p /etc/sysctl.conf if the BPI-R2 is not the main-router (access to internet), it is neccessary, that this main-router knows the networks (wlan) behind the R2. The following commands must be entered on a (Debian-)Router, to append the networks to its routing-table (will be lost on reboot if not executed on boot): route add -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.0.10 route add -net 192.168.11.0 netmask 255.255.255.0 gw 192.168.0.10 here is 192.168.10.0 the 1st WLAN, 192.168.11.0 the 2nd WLAN and 192.168.0.10 is the LAN-IP of the BPI-R2 (same subnet as LAN-IP from main-router)