Firefly开源社区

[Linux] rk3308b-cc开启wifi AP模式

84

积分

0

威望

0

贡献

技术小白

积分
84
发表于 2020-2-4 02:41:34     
本帖最后由 luckxu 于 2020-2-4 02:42 编辑

环境: 主线内核,rootfs为ubuntu18.04附件为内核的两个补丁,提交信息如下:
  1. commit 22bad544b0f1a0084b01b2ac4635e71ac2e15656 (HEAD -> xuhj/rk3308, xuhj/xuhj/rk3308)
  2. Author: xuhj <xu_415@126.com>
  3. Date:   Tue Feb 4 01:53:08 2020 +0800

  4.     enable iptable support
  5.    
  6.     Change-Id: Idb283b61bdcd243840dce16d12304b2634982972

  7. commit 693b3eafc6132827cbb1cd5f2c1ccc8e3ce26db5
  8. Author: xuhj <xu_415@126.com>
  9. Date:   Sun Feb 2 17:05:58 2020 +0800

  10.     add ubuntu-16.04 rootfs support and enable wifi(rtl8188eus)
  11.     generate wireless mac address from cpuid
  12.    
  13.     Change-Id: I2bcdfc32dd6285a0fc4af9a00b28a89c59afa039

  14. commit d734f176d177472e3f0788fcad67d1758b72fdfd (xuhj/develop-4.4, rockchip-linux/develop-4.4, develop-4.4)
  15. Author: Finley Xiao <finley.xiao@rock-chips.com>
  16. Date:   Wed Jan 15 18:05:12 2020 +0800

  17.     arm64: dts: rockchip: rk3308: Modify power-model for cpu
  18.    
  19.     Change-Id: Id0a098ff85afe49cddbc9da05da722155e338e60
  20.     Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
复制代码


第一个补丁修改主要涉及串口波特率、RTL8188EU网卡配置、增加rk3308b-cc编译支持、固定无线网卡mac地址、支持ubuntu等,非必须,请酌情使用,修改如下:

1. arch/arm64/boot/dts/rockchip/rk3308.dtsi,修改串口波特率为115200
2. arch/arm64/boot/dts/rockchip/rk3308b-firefly.dtsi 从sdk中复制并修改了bootargs参数,以支持ubuntu18.04启动
  1. +       chosen {
  2. +               bootargs = "earlycon=uart8250,mmio32,0xff0c0000 swiotlb=1 console=ttyFIQ0 rw root=PARTUUID=614e0000-0000 rootfstype=ext4";
  3. +       };
复制代码
3. arch/arm64/boot/dts/rockchip/rk3308b-roc-cc-amic_emmc.dts 从sdk中复制
4. arch/arm64/configs/firefly-rk3308b_linux_defconfig 从sdk复制,增加ubunt支持,添加rtl8188eu支持
4. net/rfkill/rfkill-wlan.c 无线网卡的MAC地址从随机生成变更为从cpuid生成,以此生成固定的MAC地址
  1. diff --git a/net/rfkill/rfkill-wlan.c b/net/rfkill/rfkill-wlan.c
  2. index 333368f2f071..bddb5b8cd256 100644
  3. --- a/net/rfkill/rfkill-wlan.c
  4. +++ b/net/rfkill/rfkill-wlan.c
  5. @@ -27,6 +27,7 @@
  6. #include <linux/wakelock.h>
  7. #include <linux/interrupt.h>
  8. #include <asm/irq.h>
  9. +#include <asm/system_info.h>
  10. #include <linux/suspend.h>
  11. #include <linux/proc_fs.h>
  12. #include <linux/uaccess.h>
  13. @@ -488,14 +489,20 @@ static int get_wifi_addr_vendor(unsigned char *addr)
  14.         }
  15.         ret = rk_vendor_read(WIFI_MAC_ID, addr, 6);
  16.         if (ret != 6 || is_zero_ether_addr(addr)) {
  17. -               LOG("%s: rk_vendor_read wifi mac address failed (%d)\n",
  18. -                   __func__, ret);
  19. #ifdef CONFIG_WIFI_GENERATE_RANDOM_MAC_ADDR
  20.                 random_ether_addr(addr);
  21.                 LOG("%s: generate random wifi mac address: "
  22.                     "%02x:%02x:%02x:%02x:%02x:%02x\n",
  23.                     __func__, addr[0], addr[1], addr[2],
  24.                     addr[3], addr[4], addr[5]);
  25. +#else
  26. +               addr[0] = ((system_serial_high >> 8) & 0xff) ^ 0x73;
  27. +               addr[1] = ((system_serial_high >> 0) & 0xff) ^ 0x68;
  28. +               addr[2] = ((system_serial_low >> 24) & 0xff) ^ 0x75;
  29. +               addr[3] = ((system_serial_low >> 16) & 0xff) ^ 0x6c;
  30. +               addr[4] = ((system_serial_low >> 8)  & 0xff) ^ 0x61;
  31. +               addr[5] = ((system_serial_low >> 0)  & 0xff) ^ 0x6e;
  32. +#endif
  33.                 ret = rk_vendor_write(WIFI_MAC_ID, addr, 6);
  34.                 if (ret != 0) {
  35.                         LOG("%s: rk_vendor_write"
  36. @@ -504,15 +511,12 @@ static int get_wifi_addr_vendor(unsigned char *addr)
  37.                         memset(addr, 0, 6);
  38.                         return -1;
  39.                 }
  40. -#else
  41. -               return -1;
  42. -#endif
  43. -       } else {
  44. -               LOG("%s: rk_vendor_read wifi mac address: "
  45. -                   "%02x:%02x:%02x:%02x:%02x:%02x\n",
  46. -                   __func__, addr[0], addr[1], addr[2],
  47. -                   addr[3], addr[4], addr[5]);
  48.         }
  49. +
  50. +       LOG("%s: rk_vendor_read wifi mac address: "
  51. +           "%02x:%02x:%02x:%02x:%02x:%02x\n",
  52. +           __func__, addr[0], addr[1], addr[2],
  53. +           addr[3], addr[4], addr[5]);
  54.         return 0;
  55. }
复制代码

第二个补丁修改涉及内核iptable支持,修改如下:

1. 修改arch/arm64/configs/firefly-rk3308b_linux_defconfig,启用内核iptable支持,ap模式需要使用
  1. From 22bad544b0f1a0084b01b2ac4635e71ac2e15656 Mon Sep 17 00:00:00 2001
  2. From: xuhj <xu_415@126.com>
  3. Date: Tue, 4 Feb 2020 01:53:08 +0800
  4. Subject: [PATCH 2/2] enable iptable support

  5. Change-Id: Idb283b61bdcd243840dce16d12304b2634982972
  6. ---
  7. .../configs/firefly-rk3308b_linux_defconfig   | 42 +++++++++++++++++++
  8. 1 file changed, 42 insertions(+)

  9. diff --git a/arch/arm64/configs/firefly-rk3308b_linux_defconfig b/arch/arm64/configs/firefly-rk3308b_linux_defconfig
  10. index 80e4445a9587..966cffb645d1 100644
  11. --- a/arch/arm64/configs/firefly-rk3308b_linux_defconfig
  12. +++ b/arch/arm64/configs/firefly-rk3308b_linux_defconfig
  13. @@ -381,3 +381,45 @@ CONFIG_CRYPTO_AES_ARM64_CE_CCM=y
  14. CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
  15. CONFIG_CRYPTO_AES_ARM64_NEON_BLK=y
  16. CONFIG_CRYPTO_CRC32_ARM64=y
  17. +
  18. +CONFIG_NETFILTER=y
  19. +CONFIG_NETFILTER_ADVANCED=y
  20. +
  21. +#
  22. +# Core Netfilter Configuration
  23. +#
  24. +CONFIG_NETFILTER_INGRESS=y
  25. +CONFIG_NETFILTER_NETLINK=y
  26. +CONFIG_NF_CONNTRACK=y
  27. +CONFIG_NF_CONNTRACK_PROCFS=y
  28. +CONFIG_NF_NAT=y
  29. +CONFIG_NF_NAT_NEEDED=y
  30. +CONFIG_NF_NAT_REDIRECT=y
  31. +CONFIG_NF_TABLES=y
  32. +CONFIG_NFT_COMPAT=y
  33. +CONFIG_NETFILTER_XTABLES=y
  34. +
  35. +#
  36. +# Xtables targets
  37. +#
  38. +CONFIG_NETFILTER_XT_NAT=y
  39. +CONFIG_NETFILTER_XT_TARGET_NETMAP=y
  40. +CONFIG_NETFILTER_XT_TARGET_REDIRECT=y
  41. +
  42. +#
  43. +# IP: Netfilter Configuration
  44. +#
  45. +CONFIG_NF_DEFRAG_IPV4=y
  46. +CONFIG_NF_CONNTRACK_IPV4=y
  47. +CONFIG_NF_CONNTRACK_PROC_COMPAT=y
  48. +CONFIG_NF_TABLES_IPV4=y
  49. +CONFIG_NF_REJECT_IPV4=y
  50. +CONFIG_NF_NAT_IPV4=y
  51. +CONFIG_NF_NAT_MASQUERADE_IPV4=y
  52. +CONFIG_IP_NF_IPTABLES=y
  53. +CONFIG_IP_NF_FILTER=y
  54. +CONFIG_IP_NF_TARGET_REJECT=y
  55. +CONFIG_IP_NF_NAT=y
  56. +CONFIG_IP_NF_TARGET_MASQUERADE=y
  57. +CONFIG_IP_NF_TARGET_NETMAP=y
  58. +CONFIG_IP_NF_TARGET_REDIRECT=y
  59. --
  60. 2.24.1
复制代码
如果使用make menuconfig手动修改,可参考:
  1. [*] Networking support  --->
  2.     --- Networking support
  3.         Networking options  --->
  4.             --- Network packet filtering framework (Netfilter)
  5.                 Core Netfilter Configuration  --->
  6.                      [*] Netfilter ingress support
复制代码

ubuntu18.04中操作:安装必要软件包,增加相关配置,开启无线AP

1. 安装hostapd dnsmasq iptables
  1. apt install hostapd dnsmasq iptables -y --no-install-suggests --no-install-recommends
复制代码

2. 编辑/etc/dnsmasq.conf追加如下内容:
  1. interface=p2p0
  2. bind-interfaces
  3. except-interface=lo
  4. dhcp-range=192.168.3.100,192.168.3.254,12h
  5. dhcp-option=3,192.168.3.1
复制代码
3. 编辑/etc/hostapd/hostapd.conf,内容如下:

  1. interface=p2p0
  2. ctrl_interface=/var/run/hostapd
  3. ssid=firefly
  4. channel=6
  5. wpa=2
  6. wpa_passphrase=firefly123456
复制代码
4. 禁用systemd-resolved,该服务会占用53端口,导致dnsmasq运行错误:

  1. systemctl disable systemd-resolved
  2. systemctl stop systemd-resolved
复制代码

5. 执行如下操作启用AP,启用AP后可以手机上搜索到firefly的wifi:
  1. hostapd -B /etc/hostapd/hostapd.conf > /dev/null 2>&1
  2. ip addr add 192.168.3.1/24 dev p2p0
  3. echo 1 > /proc/sys/net/ipv4/ip_forward
  4. iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  5. service dnsmasq restart
复制代码
6. 如需自启动,可启用rc-local服务(systemctl enable rc-local),添加/etc/rc.local文件并赋予可执行权限,rc.local内容如下

  1. #!/bin/sh -e

  2. # eth0自动获取IP地址
  3. dhclient eth0 > /dev/null 2>&1 || :

  4. hostapd -B /etc/hostapd/hostapd.conf > /dev/null 2>&1
  5. ip addr add 192.168.3.1/24 dev p2p0
  6. echo 1 > /proc/sys/net/ipv4/ip_forward
  7. iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  8. service dnsmasq restart
复制代码





kernel-patch.zip (9.8 KB, 下载次数: 1)
回复

使用道具 举报

84

积分

0

威望

0

贡献

技术小白

积分
84
发表于 2020-2-4 02:44:37     
无线网卡从CPUID生成固定MAC地址那段代码中异或的几个数字没有意义,我随便添加的。
回复

使用道具 举报

20

积分

0

威望

0

贡献

技术小白

积分
20
发表于 2020-8-14 22:41:27     
luckxu 发表于 2020-2-4 02:44
无线网卡从CPUID生成固定MAC地址那段代码中异或的几个数字没有意义,我随便添加的。

感谢前辈的分享。
有点疑惑咨询下前辈,就是这两个补丁怎么使用。
先介绍下我这边的情况,我已经用源码编译了一个img镜像,已经烧录到rk3308的板子里了。
这种情况下,两个补丁该怎么使用了,求帮助。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表