一、EC200A配置
1.1、kernel配置
1.1.1、USB转串口
CONFIG_USB_SERIAL=y
CONFIG_USB_SERIAL_WWAN=y
CONFIG_USB_SERIAL_OPTION=y
Symbol: USB_SERIAL_WWAN [=y] │
│ Type : tristate │
│ Defined at drivers/usb/serial/Kconfig:555 │
│ Depends on: USB_SUPPORT [=y] && USB [=y] && USB_SERIAL [=y] │
│ Selected by [y]: │
│ - USB_SERIAL_OPTION [=y] && USB_SUPPORT [=y] && USB [=y] && USB_SERIAL [=y] │
│ Selected by [n]: │
│ - USB_SERIAL_IPW [=n] && USB_SUPPORT [=y] && USB [=y] && USB_SERIAL [=y] │
│ - USB_SERIAL_QUALCOMM [=n] && USB_SUPPORT [=y] && USB [=y] && USB_SERIAL [=y]
Symbol: USB_SERIAL_OPTION [=y] │
│ Type : tristate │
│ Prompt: USB driver for GSM and CDMA modems │
│ Location: │
│ -> Device Drivers │
│ -> USB support (USB_SUPPORT [=y]) │
│ (1) -> USB Serial Converter support (USB_SERIAL [=y]) │
│ Defined at drivers/usb/serial/Kconfig:558 │
│ Depends on: USB_SUPPORT [=y] && USB [=y] && USB_SERIAL [=y] │
│ Selects: USB_SERIAL_WWAN [=y]
1.1.2、USB网卡驱动
USB_USBNET=y
USB_NET_CDCETHER=y
USB_NET_RNDIS_HOST=y
Symbol: USB_NET_CDCETHER [=y] │
│ Type : tristate │
│ Prompt: CDC Ethernet support (smart devices such as cable modems) │
│ Location: │
│ -> Device Drivers │
│ -> Network device support (NETDEVICES [=y]) │
│ -> USB Network Adapters (USB_NET_DRIVERS [=y]) │
│ (1) -> Multi-purpose USB Networking Framework (USB_USBNET [=y]) │
│ Defined at drivers/net/usb/Kconfig:210 │
│ Depends on: NETDEVICES [=y] && USB_NET_DRIVERS [=y] && USB_USBNET [=y] │
│ Selected by [y]: │
│ - USB_NET_RNDIS_HOST [=y] && NETDEVICES [=y] && USB_NET_DRIVERS [=y] && USB_USBNET [=y] │
│ - USB_NET_ZAURUS [=y] && NETDEVICES [=y] && USB_NET_DRIVERS [=y] && USB_USBNET [=y] │
│ Selected by [n]: │
│ - USB_NET_RNDIS_WLAN [=n] && NETDEVICES [=y] && WLAN [=y] && USB [=y] && CFG80211 [=y]
Symbol: USB_NET_RNDIS_HOST [=y] │
│ Type : tristate │
│ Prompt: Host for RNDIS and ActiveSync devices │
│ Location: │
│ -> Device Drivers │
│ -> Network device support (NETDEVICES [=y]) │
│ -> USB Network Adapters (USB_NET_DRIVERS [=y]) │
│ (1) -> Multi-purpose USB Networking Framework (USB_USBNET [=y]) │
│ Defined at drivers/net/usb/Kconfig:390 │
│ Depends on: NETDEVICES [=y] && USB_NET_DRIVERS [=y] && USB_USBNET [=y] │
│ Selects: USB_NET_CDCETHER [=y] │
│ Selected by [n]: │
│ - USB_NET_RNDIS_WLAN [=n] && NETDEVICES [=y] && WLAN [=y] && USB [=y] && CFG80211 [=y]
1.1.3、iptables配置


1.1.4、USB转串口驱动修改
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
old mode 100644
new mode 100755
index fb337ba..69cd524
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -250,6 +250,7 @@ static void option_instat_callback(struct urb *urb);
#define QUECTEL_PRODUCT_EP06 0x0306
#define QUECTEL_PRODUCT_EM12 0x0512
#define QUECTEL_PRODUCT_RM500Q 0x0800
+#define QUECTEL_PRODUCT_EC200A 0x6005
#define CMOTECH_VENDOR_ID 0x16d8
#define CMOTECH_PRODUCT_6001 0x6001
@@ -1114,6 +1115,7 @@ static const struct usb_device_id option_ids[] = {
.driver_info = RSVD(4) },
{ USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96),
.driver_info = RSVD(4) },
+ { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200A) },
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0xff, 0xff),
.driver_info = RSVD(1) | RSVD(2) | RSVD(3) | RSVD(4) | NUMEP2 },
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0, 0) },
@@ -2081,6 +2083,9 @@ static struct usb_serial_driver option_1port_device = {
#ifdef CONFIG_PM
.suspend = usb_wwan_suspend,
.resume = usb_wwan_resume,
+#if 1 //Added by Quectel
+ .reset_resume = usb_wwan_resume,
+#endif
#endif
};
@@ -2116,6 +2121,55 @@ static int option_probe(struct usb_serial *serial,
if (device_flags & NUMEP2 && iface_desc->bNumEndpoints != 2)
return -ENODEV;
+#if 1 //Added by Quectel
+ //Quectel UC20's interface 4 can be used as USB Network device
+ if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) && serial->dev->descriptor.idProduct == cpu_to_le16(0x9003)
+ && serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
+ return -ENODEV;
+
+ //Quectel EC20(MDM9215)'s interface 4 can be used as USB Network device
+ if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) && serial->dev->descriptor.idProduct == cpu_to_le16(0x9215)
+ && serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
+ return -ENODEV;
+
+ if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C)) {
+ __u16 idProduct = le16_to_cpu(serial->dev->descriptor.idProduct);
+ struct usb_interface_descriptor *intf = &serial->interface->cur_altsetting->desc;
+
+ if (intf->bInterfaceClass != 0xFF) {
+ //ECM, RNDIS, MBIM, ACM, UAC
+ if (idProduct == 0x6004
+ && intf->bInterfaceNumber > 1
+ && intf->bInterfaceClass == 0x0A) {
+ //EG060V cdc-acm interface force bind option
+ }
+ else {
+ return -ENODEV;
+ }
+ }
+ else if (intf->bInterfaceSubClass == 0x42) {
+ //ADB
+ return -ENODEV;
+ }
+ else if ((idProduct&0xF000) == 0x6000) {
+ //ASR
+ }
+ else if ((idProduct&0xF000) == 0x8000) {
+ //HISI
+ if (intf->bInterfaceNumber == 0)
+ return -ENODEV;
+ }
+ else if ((idProduct&0xFF00) == 0x0900) {
+ //UNISOC
+ }
+ else if ((idProduct&0xF000) == 0x0000) {
+ //MDM interface 4 is QMI
+ if (intf->bInterfaceNumber == 4 && intf->bNumEndpoints == 3)
+ return -ENODEV;
+ }
+ }
+#endif
+
/* Store the device flags so we can use them during attach. */
usb_set_serial_data(serial, (void *)device_flags);
diff --git a/drivers/usb/serial/usb_wwan.c b/drivers/usb/serial/usb_wwan.c
old mode 100644
new mode 100755
index 4b98458..6d21240
--- a/drivers/usb/serial/usb_wwan.c
+++ b/drivers/usb/serial/usb_wwan.c
@@ -479,6 +479,20 @@ static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port,
if (intfdata->use_zlp && dir == USB_DIR_OUT)
urb->transfer_flags |= URB_ZERO_PACKET;
+#if 1 //Added by Quectel for Zero Packet
+ /*Quectel 2C7C modules: add the zero packet mechanism*/
+ if(dir == USB_DIR_OUT){
+ if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) && serial->dev->descriptor.idProduct == cpu_to_le16(0x9090))
+ urb->transfer_flags |= URB_ZERO_PACKET;
+ if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) && serial->dev->descriptor.idProduct == cpu_to_le16(0x9003))
+ urb->transfer_flags |= URB_ZERO_PACKET;
+ if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) && serial->dev->descriptor.idProduct == cpu_to_le16(0x9215))
+ urb->transfer_flags |= URB_ZERO_PACKET;
+ if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C))
+ urb->transfer_flags |= URB_ZERO_PACKET;
+ }
+#endif
+
return urb;
}
1.2、openWRT添加iptables
SymbOl:IP NF FILTER [=n]
Type :tristate
Prompt: Packet filtering
Location:
-> Networking support(NET [=y])
-> Networking options->Network packet filtering framework (Netfilter)(NETFILTER [=n])-> IP:Netfilter Configuration-> IP tables support (required for filtering/maSq/NAT)(IP NF IPTABLES [=n])Defined at net/ipv4/netfilter/Kconfig:175DependS On: NET [=y]&& INET [=y]&& NETFILTER [=N] && IP NF IPTABLES [=n]
二、FCS950R配置
2.1、修改配置文件
2.1.1、drivers/net/wireless/Makefile
根据指导文档,FCS950R模块添加,+obj-$(CONFIG_RTL8821CS) += wlan_src/,而SDK已经自带8821cs驱动,需要屏蔽
--- a/drivers/net/wireless/Makefile
+++ b/drivers/net/wireless/Makefile
@@ -32,8 +32,9 @@ obj-$(CONFIG_VIRT_WIFI) += virt_wifi.o
obj-$(CONFIG_XR829_WLAN) += xr829/
obj-$(CONFIG_XR819_WLAN) += xr819/
-obj-$(CONFIG_RTL8821CS) += rtl8821cs/
+# obj-$(CONFIG_RTL8821CS) += rtl8821cs/
obj-$(CONFIG_RTL8723DS) += rtl8723ds/
obj-$(CONFIG_SPARD_WLAN_SUPPORT) += uwe5622/
obj-$(CONFIG_BCMDHD) += bcmdhd/
obj-$(CONFIG_AIC_WLAN_SUPPORT) += aic8800/
+obj-$(CONFIG_RTL8821CS) += wlan_src/
2.1.2、drivers/net/wireless/Kconfig
--- a/drivers/net/wireless/Kconfig
+++ b/drivers/net/wireless/Kconfig
@@ -49,11 +49,12 @@ source "drivers/net/wireless/zydas/Kconfig"
source "drivers/net/wireless/quantenna/Kconfig"
source "drivers/net/wireless/xr829/Kconfig"
source "drivers/net/wireless/xr819/Kconfig"
-source "drivers/net/wireless/rtl8821cs/Kconfig"
+# source "drivers/net/wireless/rtl8821cs/Kconfig"
source "drivers/net/wireless/rtl8723ds/Kconfig"
source "drivers/net/wireless/uwe5622/Kconfig"
source "drivers/net/wireless/bcmdhd/Kconfig"
source "drivers/net/wireless/aic8800/Kconfig"
+source "drivers/net/wireless/wlan_src/Kconfig"
config PCMCIA_RAYCS
tristate "Aviator/Raytheon 2.4GHz wireless support"
2.2、编译FCS950R驱动错误
头文件找不到

解决措施:修改头文件宏(EXTRA_CFLAGS)
diff --git a/drivers/net/wireless/wlan_src/Makefile b/drivers/net/wireless/wlan_src/Makefile
index 56e76b3..6929d9b 100755
--- a/drivers/net/wireless/wlan_src/Makefile
+++ b/drivers/net/wireless/wlan_src/Makefile
@@ -20,7 +20,8 @@ ifeq ($(GCC_VER_49),1)
EXTRA_CFLAGS += -Wno-date-time # Fix compile error && warning on gcc 4.9 and later
endif
-EXTRA_CFLAGS += -I$(src)/include
+EXTRA_CFLAGS += -I$(srctree)/$(src)/include
+EXTRA_CFLAGS += -I$(srctree)/$(src)/hal/phydm
EXTRA_LDFLAGS += --strip-debug
@@ -271,10 +272,10 @@ _HAL_INTFS_FILES := hal/hal_intf.o \
hal/led/hal_$(HCI_NAME)_led.o
-EXTRA_CFLAGS += -I$(src)/platform
+EXTRA_CFLAGS += -I$(srctree)/$(src)/platform
_PLATFORM_FILES := platform/platform_ops.o
-EXTRA_CFLAGS += -I$(src)/hal/btc
+EXTRA_CFLAGS += -I$(srctree)/$(src)/hal/btc
########### HAL_RTL8188E #################################
ifeq ($(CONFIG_RTL8188E), y)
@@ -2427,7 +2428,7 @@ ifeq ($(CONFIG_SDIO_HCI), y)
rtk_core += core/rtw_sdio.o
endif
-EXTRA_CFLAGS += -I$(src)/core/crypto
+EXTRA_CFLAGS += -I$(srctree)/$(src)/core/crypto
rtk_core += \
core/crypto/aes-internal.o \
core/crypto/aes-internal-enc.o \
2.3、failed to insert
/lib/modules/5.4.61/8821cs.ko
root@TinaLinux:/# insmod /lib/modules/5.4.61/8821cs.ko
[ 58.980094] 8821cs: module uses symbol (kernel_read) from namespace VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver, but does not import it.
[ 58.995252] 8821cs: Unknown symbol kernel_read (err -22)
[ 59.001367] 8821cs: module uses symbol (kernel_write) from namespace VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver, but does not import it.
[ 59.016592] 8821cs: Unknown symbol kernel_write (err -22)
[ 59.022939] 8821cs: module uses symbol (kern_path) from namespace VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver, but does not import it.
[ 59.037878] 8821cs: Unknown symbol kern_path (err -22)
failed to insert /lib/modules/5.4.61/8821cs.ko
内核命名空间未导入的原因,添加如下修改
diff --git a/drivers/net/wireless/wlan_src/core/rtw_mem.c b/drivers/net/wireless/wlan_src/core/rtw_mem.c
index d42a4fb..0e7bb70 100755
--- a/drivers/net/wireless/wlan_src/core/rtw_mem.c
+++ b/drivers/net/wireless/wlan_src/core/rtw_mem.c
@@ -21,6 +21,9 @@ MODULE_DESCRIPTION("Realtek Wireless Lan Driver");
MODULE_AUTHOR("Realtek Semiconductor Corp.");
MODULE_VERSION("DRIVERVERSION");
+MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver);
+MODULE_IMPORT_NS(CRYPTO_INTERNAL);
+
/* for MAX_RECVBUF_SZ */
#if defined(CONFIG_RTL8188E)
#include <rtl8188e_hal.h>
diff --git a/drivers/net/wireless/wlan_src/os_dep/linux/os_intfs.c b/drivers/net/wireless/wlan_src/os_dep/linux/os_intfs.c
index 3f03174..fb99801 100755
--- a/drivers/net/wireless/wlan_src/os_dep/linux/os_intfs.c
+++ b/drivers/net/wireless/wlan_src/os_dep/linux/os_intfs.c
@@ -22,6 +22,9 @@ MODULE_DESCRIPTION("Realtek Wireless Lan Driver");
MODULE_AUTHOR("Realtek Semiconductor Corp.");
MODULE_VERSION(DRIVERVERSION);
+MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver);
+MODULE_IMPORT_NS(CRYPTO_INTERNAL);
+
/* module param defaults */
int rtw_chip_version = 0x00;
int rtw_rfintfs = HWPI;
重新编译,驱动加载没问题

2.4、打印太多
修改输出等级
+++ b/drivers/net/wireless/wlan_src/Makefile
@@ -106,7 +106,7 @@ endif
CONFIG_RTW_DEBUG = y
# default log level is _DRV_INFO_ = 4,
# please refer to "How_to_set_driver_debug_log_level.doc" to set the available level.
-CONFIG_RTW_LOG_LEVEL = 4
+CONFIG_RTW_LOG_LEVEL = 2
# enable /proc/net/rtlxxxx/ debug interfaces
CONFIG_PROC_DEBUG = y
2.5、添加firmware文件
2.5.1、添加WiFi射频功率文件
WiFi驱动默认读取/lib/firmware/里面的功率文件,如果要改路径直接修改Makefile文件
EXTRA_CFLAGS += -DREALTEK_CONFIG_PATH=\"/lib/firmware/\"
文件存储仓库路径:platform/allwinner/wireless/firmware

编译时拷贝的规则仓库路径:openwrt/openwrt
diff --git a/package/firmware/linux-firmware/Makefile b/package/firmware/linux-firmware/Makefile
old mode 100644
new mode 100755
index be1a937..b7f66ee
--- a/package/firmware/linux-firmware/Makefile
+++ b/package/firmware/linux-firmware/Makefile
@@ -67,6 +67,9 @@ PKG_FILE_DEPENDS += $(XR819_FW)
XR819A_FW := $(LICHEE_CBBPKG_DIR)/allwinner/wireless/firmware/xr819a
PKG_FILE_DEPENDS += $(XR819A_FW)
+FCS950R_FW := $(LICHEE_CBBPKG_DIR)/allwinner/wireless/firmware/fcs950r
+PKG_FILE_DEPENDS += $(FCS950R_FW)
+
include $(INCLUDE_DIR)/package.mk
define firmware/config
diff --git a/package/firmware/linux-firmware/fcs950r.mk b/package/firmware/linux-firmware/fcs950r.mk
new file mode 100755
index 0000000..2e679fd
--- /dev/null
+++ b/package/firmware/linux-firmware/fcs950r.mk
@@ -0,0 +1,11 @@
+Package/fcs950r-firmware = $(call Package/firmware-default,QUECTEL FCS950R firmware)
+
+SRC_CODE_DIR:=$(FCS950R_FW)
+
+define Package/fcs950r-firmware/install
+ $(INSTALL_DIR) $(1)/$(FIRMWARE_PATH)
+ $(INSTALL_DATA) $(SRC_CODE_DIR)/PHY_REG_PG.txt $(1)/$(FIRMWARE_PATH)/PHY_REG_PG.txt
+ $(INSTALL_DATA) $(SRC_CODE_DIR)/TXPWR_LMT.txt $(1)/$(FIRMWARE_PATH)/TXPWR_LMT.txt
+endef
+
+$(eval $(call BuildPackage,fcs950r-firmware))
返回SDK路径,执行make menuconfig

2.5.2、缺少/etc/udhcpd.leases
udhcpd: can't open '': No such file or directory
执行udhcpd -fS /etc/udhcpd.conf后报错
root@TinaLinux:/# ap.sh
udhcpd: started, v1.33.2
udhcpd: max_leases=235 is too big, setting to 155
udhcpd: can't open '': No such file or directory
[ 207.425003] start_addr=(0x8000), end_addr=(0x10000), buffer_size=(0x8000), smp_number_max=(4096)
[ 207.452595] RTW: nolinked power save leave
VLAN: vlan_set_name_type: SET_VLAN_NAME_TYPE_CMD name_type=2 failed: Package not installed
[ 207.787132] RTW: assoc success
[ 207.791508] RTW: set group key camid:0, addr:90:cd:1f:06:ed:92, kid:1, type:TKIP
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED
udhcpd.conf配置文件没有配置lease_file导致,添加
# The location of the leases file
-#lease_file /var/lib/misc/udhcpd.leases
+lease_file /etc/udhcpd.leases
可以在执行udhcpd.conf文件之前用.sh脚本文件判断/etc/udhcpd.leases文件
+#!/bin/sh
+
+if [[ ! -f "/etc/udhcpd.leases" ]];then
+ touch /etc/udhcpd.leases
+fi
三、4G模块拨号上网
usb0网卡接口默认不会启动,可以使用ifconfig -a查看是否存在,存在则说明4G模块驱动正常,使用ifconfig usb0 up启动,然后使用udhcpc -i usb0自动分配ip和dns,拨号成功就可以访问外网
使用busybox microcom -t 5000 /dev/ttyUSB*,具体要看系统生成的节点,-t 5000是无操作5秒后退出命令行模式,如下/dev/ttyUSB0无法输入命令,/dev/ttyUSB1可以
root@TinaLinux:/# busybox microcom -t 5000 /dev/ttyUSB0
root@TinaLinux:/# busybox microcom -t 5000 /dev/ttyUSB1
at
OK
# 根据SIM卡运营商输入,移动:CMNET,电信:CTNET,联通:3GNET
# 如下是移动卡的拨号指令,返回OK说明配置成功
AT+CGDCONT=1,"IP","CMNET"
OK
AT+QNETDEVCTL=3,1,1
OK
# 可以使用AT+QNETDEVCTL?指令,查看是否联网成功(如下最后一个参数为1,表示联网成功)
AT+QNETDEVCTL?
+QNETDEVCTL: 3,1,1,1
# 也可以使用ping测试
root@TinaLinux:/# ping -I usb0 -c 1 baidu.com
PING baidu.com (110.242.68.66): 56 data bytes
64 bytes from 110.242.68.66: seq=0 ttl=49 time=105.210 ms
--- baidu.com ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 105.210/105.210/105.210 ms
四、连接WiFi上网
使用iptables转发,使手机等设备连接WiFi后能够正常上网
2.4GHz频段配置
+++ b/package/network/Test/files/etc/hostapd.conf
@@ -0,0 +1,13 @@
+interface=wlan0
+driver=nl80211
+ieee80211n=1
+ctrl_interface=/var/run/hostapd
+hw_mode=g
+channel=6
+ssid=TestWiFi
+
+wpa=2
+wpa_passphrase=12345678
+wpa_key_mgmt=WPA-PSK
+rsn_pairwise=CCMP TKIP
+wpa_pairwise=TKIP CCMP
5GHz频段配置
+++ b/package/network/Test/files/etc/hostapd_5g.conf
@@ -0,0 +1,18 @@
+interface=wlan0
+driver=nl80211
+ctrl_interface_group=0
+ctrl_interface=/var/run/hostapd
+beacon_int=100
+ssid=TestWiFi_5G
+
+country_code=CN
+channel=149
+hw_mode=a
+ieee80211n=1
+ht_capab=[HT20][HT40+][HT40-][SHORT-GI-40][SHORT-GI-20]
+
+wpa=2
+wpa_passphrase=12345678
+wpa_key_mgmt=WPA-PSK
+rsn_pairwise=CCMP TKIP
+wpa_pairwise=TKIP CCMP
iptables网络地址转发,和hostapd配置,调用时执行wifiApMode.sh hostapd.conf
+++ b/package/network/Test/files/usr/bin/wifiApMode.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+if [[ ! -f "/etc/udhcpd.leases" ]];then
+ touch /etc/udhcpd.leases
+fi
+ifconfig wlan0 192.168.2.1 netmask 255.255.255.0 up
+udhcpd -fS /etc/udhcpd.conf&
+iptables -A FORWARD -s 192.168.2.0/24 -o usb0 -j ACCEPT
+iptables -A FORWARD -d 192.168.2.0/24 -j ACCEPT
+iptables -t nat -A POSTROUTING -s 192.168.2.0/255.255.255.0 -o usb0 -j MASQUERADE
+echo 1 > /proc/sys/net/ipv4/ip_forward
+
+hostapd -B $1
+echo "set ap mode($1)!"

被折叠的 条评论
为什么被折叠?



