新闻详情

新闻详情

首页 / 资讯中心 / 详情

GSL1680/GSL1688触摸驱动移植实战:解包、编译与固件下载排错

发布时间:2026/10/1 10:57:36来源:尧图网络
GSL1680/GSL1688触摸驱动移植实战:解包、编译与固件下载排错
简介这份RAR压缩包是面向安卓驱动开发与嵌入式移植工程师的GSL1680与GSL1688电容屏驱动源码资料适合需要理解触摸屏控制器工作原理、完成内核模块编译或设备驱动调试的开发者。包内一共两个文件分别是C语言源码文件和配套的头文件压缩后大小仅22KB结构十分精简便于直接展开分析驱动初始化、中断处理、数据读取等核心逻辑。已有175人学习下载可作为安卓Linux输入子系统与硬件抽象层交互机制的学习样例。研读源码可掌握GSL系列芯片的多点触控上报流程、驱动与用户空间通过系统调用或控制指令的通信方式以及适配不同电容屏时关键参数的调整思路。此外源码还展示了驱动框架在安卓系统内的典型落地路径对实际项目中的移植调试、性能优化和问题定位都有直接参考价值。1. GSL1680-Driver.rar 是什么解压它之前先搞懂 GSL1680 driver 和 GSL1688 download 的关系拿到 GSL1680-Driver.rar 这个压缩包很多 Android 主板方案商会随手丢给你文件往往只有几十兆但里面真正能编译的 Linux 触摸驱动代码不到一兆。GSL1680 driver 负责让 Linux 内核把 Silead 触控芯片的原始电容信号转成 input 子系统上报的触摸坐标而 GSL1688 download 则是指驱动在 probe 阶段把固件写入芯片内部 flash 的动作。装上它之后Android 侧不用改 SDK 就能等来触摸事件。这篇文章适合正在给平板、一体机或车载屏移植电容触摸方案、又不想被 vendor 黑匣子卡住的人。下面从解包、Kconfig、dts 绑定一直写到固件刷写和排错尽量完整跑一遍。2. 从 .rar 解压到能编译的驱动文件识别、Kconfig 和 dts 绑定2.1 驱动包里的文件长什么样先认出真正需要的 C 文件网上流出的 GSL1680-Driver.rar 解压后通常是一堆文件名混在一起常见的有 gsl_ts.c、gsl_ts.h、gsl1680.h、gsl1688.h、gslX680.c、tp_xxx.c以及一些 .hex、.bin 或 .txt 的固件导出文件。这里面真正能进内核编译的核心文件一般只有 gsl_ts.c 和对应的头文件固件头文件里是一个很大的 buf 数组存着驱动要刷进触控芯片的 bootloader 和 app 固件。我一般会在解压后先搜一下“probe”关键字确认哪个文件是 platform_driver 或 i2c_driver 的注册入口。只要看到static int gsl_ts_probe(struct i2c_client *client, const struct i2c_device_id *id)那基本就是核心驱动。其他文件很多是根据平台裁剪过的中间产物比如给全志、RK、高通各自改过的适配版本不用全部塞进内核。实际操作时把整个 gsl_ts 相关源文件复制到内核源码目录cp gsl_ts.c gsl_ts.h gsl1680.h gsl1688.h $KERNEL_DIR/drivers/input/touchscreen/复制之后先别急着编译。这几个文件之间一般通过 #include 相互引用比如 gsl_ts.c 里会#include gsl1680.h而且固件数组可能非常大一个头文件几百 KB 很正常。如果驱动包里带了 .bin 固件还会有工具把它转成 C 数组。先确认 gsl1680.h 和 gsl1688.h 里有static const unsigned char GSLX680_FW[]这类定义没有的话后面 probe 时会找不到固件直接返回失败。2.2 Kconfig 和 Makefile让内核编译系统认账复制完源文件下一步是在触摸屏子系统的 Kconfig 和 Makefile 里注册它。这里最怕的是直接改 arch/.../configs/xxx_defconfig 加了 CONFIG 项但 Kconfig 里根本没有对应条目编译时 CONFIG 变量无效驱动自然编不进去。在$KERNEL_DIR/drivers/input/touchscreen/Kconfig里加一段config TOUCHSCREEN_GSLX680 tristate Silead GSL1680/GSL1688 touchscreen driver depends on I2C INPUT help Support for Silead GSL1680/GSL1688 series capacitive touchscreen controllers. This driver downloads firmware to the controller via I2C and reports events to input core.然后在同目录 Makefile 里加一行obj-$(CONFIG_TOUCHSCREEN_GSLX680) gsl_ts.o注意有些驱动包会把固件单独编译成gsl_ts_fw.o或者在同目录下还有其他 .o 依赖。这时候 Makefile 要写成gsl_ts-y : gsl_ts.o gsl_ts_fw.o的形式不能只写一个目标文件。判断标准是看看 gsl_ts.c 里有没有#include gsl_ts_fw.c如果有就是单文件编译如果在链接时才用到就得拆开。Kconfig 里tristate表示可以编成模块但 Android 内核里触摸驱动几乎都是直接编进内核不要选 m。还有depends on最好带上I2C和INPUT否则设备树里配了 i2c 节点也不会 probe。2.3 设备树 dts 绑定第一个拦路虎GSL1680 驱动是 i2c_client 驱动Linux 内核只有 dts 里存在匹配的 compatible 字符串时才会调用 probe。常见驱动里 compatible 写的是silead,gsl1680或silead,gsl1688如果你板级 dts 里写成silead,gslx680之类驱动挂在 i2c 总线上却永远不 probedmesg 里什么都没有。给 RK 平台或全志平台做移植dts 节点通常这样写i2c2 { status okay; clock-frequency 200000; gsl40 { compatible silead,gsl1680; reg 0x40; interrupt-parent gpio1; interrupts 13 IRQ_TYPE_EDGE_FALLING; reset-gpio gpio1 14 GPIO_ACTIVE_LOW; irq-gpio gpio1 13 GPIO_ACTIVE_LOW; avdd-supply vcc3v3_lcd; touchscreen-max-x 1024; touchscreen-max-y 600; }; };这里reg 0x40是 i2c 从机地址GSL1680 常见地址是 0x40 或 0x41GSL1688 多为 0x40。中断触发方式也很关键老驱动要求IRQ_TYPE_EDGE_FALLING如果你配成高电平触发中断会被反复触发导致 input 上报错乱。reset-gpio不能省驱动 probe 时先拉低复位脚让芯片进入等待下载状态再拉起来执行固件下载没配 GPIO 的后果是驱动卡在请求 gpio 失败。3. 把 GSL1680 驱动编进 Android 内核操作步骤与 4 个必设参数3.1 手把手编译进 boot.imgAndroid 内核编译不像 PC 上直接 make 就行需要先设定交叉编译器和输出目录。假设你已经把内核源码放在kernel-5.10并且用 ARM64 平台export ARCHarm64 export CROSS_COMPILEaarch64-linux-android- export PATH$PATH:/opt/toolchain/bin cd kernel-5.10 make rk3568_defconfig make menuconfig在 menuconfig 里进入 Device Drivers - Input device support - Touchscreens找到 Silead GSL1680/GSL1688 touchscreen driver按 Y 选中。保存退出后确认 .config 里有grep CONFIG_TOUCHSCREEN_GSLX680 .config输出CONFIG_TOUCHSCREEN_GSLX680y之后正式编译make -j8 boot.img如果内核和 Android 源码是分开的boot.img需要回到源码根目录用 mkbootimg 或者make bootimage来打包。很多人在这一步翻车因为编译出的 zImage 没有和 ramdisk 合成直接烧了 zImage 当然没反应。我的习惯是先在 kernel 目录单独编译出zImage再用脚本打包成 boot.img这样可以单独验证驱动有没有编进去。3.2 4 个必设参数改错一个触摸就不工作下面的参数表来自这批 GSL 驱动最常见的配置适用于 GSL1680 和 GSL1688参数常见值改错会怎样reg0x40 / 0x41i2c 地址不对probe 失败reset-gpioGPIO_ACTIVE_LOW固件无法下载触摸无响应irq-gpio 触发方式IRQ_TYPE_EDGE_FALLING中断风暴或收不到中断avdd-supplyLCD 3.3V 电源供电管理失败复位后芯片掉电reg地址要跟板子原理图上 I2C 地址上拉电阻一致。GSL1680 地址由 AD0 引脚电平决定悬空是 0x40拉高是 0x41。不要只看设备树就烧先拿 i2cdetect 扫一遍adb shell i2cdetect -y 2如果看到 0x40 或 0x41 有地址说明芯片在总线上是活的再查驱动。reset-gpio除了引脚号GPIO 极性也要对驱动里一般会gpio_set_value(reset_gpio, 0)拉低再延时如果你的硬件 reset 脚是高有效这段代码恰好反了。irq-gpio在部分驱动里不显式配置而是用interrupts属性直接绑定。要注意的是 client-irq 可能来自设备树interrupts不要去手动 request_irq 两次。我见过有人同时配置了interrupts和irq-gpio导致驱动申请中断失败。avdd-supply和vdd-supply只在驱动调用regulator_get时需要。一些从全志平台搬过来的驱动是直接gpio_set_value控制电源不需要 dts 里配但从主线内核合入的版本往往依赖 regulator 框架。看到 probe 日志里regulator_get failed就说明 dts 少了供电属性。3.3 编译后怎么确认 probe 成功烧录 boot.img 后先看 dmesgadb shell dmesg | grep -i gsl正常日志会看到类似gsl_ts i2c-gsl40: gsl_ts probe ok input: gsl_ts as /devices/platform/.../input/input2同时可以用 getevent 确认设备节点adb shell getevent -i如果看到了gsl_ts或gslX680说明 input 设备注册成功。如果 dmesg 什么都没打先确认 i2c 节点 status 是否为 okay再确认 compatible 和驱动里的i2c_device_id表匹配。这类驱动经常用的是silead,gsl1680但 of_match_table 里也可能只有silead,gslx680两个不一致的时候把 dts 改成驱动中存在的那个 compatible 就好。4. 固件下载与初始化时序从 GSL1680 到 GSL1688 的 flash download fail 排查4.1 固件是驱动的一部分为什么 probe 时会刷 MCUGSL1680 和 GSL1688 内部都有一颗小 MCUCortex-M3 或 Cortex-M4 内核专门处理电容扫描和坐标计算。这颗 MCU 自己不带可执行程序上电后要么从内部 flash 跑已经烧录好的固件要么由主控通过 I2C 把固件下载进去。GSL 驱动的做法粗暴且有效probe 时先读芯片 ID和驱动里固件头文件预期的不一致就直接把整段固件刷进去。驱动里通常有一段类似这样的下载流程static int gslX680_load_fw(struct i2c_client *client) { /* 1. 读取芯片 ID确认当前固件版本 */ if (gsl_fw_check_id(client) 0) return 0; /* 2. 写入 bootloader 段切换到下载模式 */ gsl_fw_set_bootloader(client); /* 3. 按 block 写 app 固件 */ gsl_fw_write_app(client); /* 4. 软复位让新固件跑起来 */ gsl_fw_restart(client); return 0; }这段逻辑说明固件下载不是可选项而是驱动正常工作的前提。gsl_fw_check_id在部分版本里只是比较寄存器地址上的魔数不是真正的 flash 校验所以偶尔出现“下载成功但触摸乱跳”的问题其实是固件和驱动头文件数组不完全匹配。一般一个驱动包里 gsl1680.h 和 gsl1688.h 分别对应两个型号千万别把 GSL1688 的固件数组编译进 GSL1680 的驱动里。4.2 初始化时序reset 引脚的每次拉低都是信号不同厂商的 Android 平板原理图设计习惯不一样有的把 reset 脚接了 RC 延时电路有的直接接 GPIO。驱动执行时序大体如下probe 入口请求 reset-gpio输出 1 让芯片退出复位。延时 10ms 等待晶振稳定。输出 0 拉低 reset让芯片进入固件下载模式。延时 20ms 后开始通过 I2C 写 bootloader。下载完成后输出 1芯片复位运行新固件。我在移植时会把延时函数从msleep临时改成usleep_range并打点测量因为很多翻车来自晶振起振慢。你可以这样验证时序gpio_set_value(reset_gpio, 1); usleep_range(10000, 15000); gpio_set_value(reset_gpio, 0); usleep_range(20000, 25000); gsl_fw_set_bootloader(client);如果手上没有示波器就靠日志判断。驱动里有打印的话看到enter gslX680_set_bootloader说明已经走到写固件阶段。若日志停在这一步后面什么东西都没有多半是 I2C 通信失败尤其是速率设置过高。GSL1680 的 I2C 最大规范是 400KHz不少板子在 dts 里配了 1MHz下载固件时就会偶发失败。4.3 flash download failed cortex-M3 / M4现象、原因、解决很多人在日志里看到flash download faild cortex-m3或flash download failed cortex-M4这其实是驱动里打印的错误字符串不是编译工具链报错。它表示驱动尝试向触控芯片写固件时芯片没有正确响应写命令。现象有三种第一是上电第一次能触摸重启后失灵第二是每次开机 log 都出现这句但触摸偶尔又正常第三是永远出现这句触摸完全无反应。原因最常见的是供电不稳。触控芯片内部写 flash 时需要较大瞬时电流如果板子的 2.8V/3.3V 电源纹波过大或串了电感写 flash 就会失败。解决方法是检查avdd-supply对应的 regulator必要时在触控芯片供电脚并联 10uF 0.1uF 电容。其次是复位时序太短。GSL1688 下载固件前要求 reset 拉低至少 20ms很多驱动只给了 5ms。把延时改大之后问题通常消失。还有一种情况是 I2C 地址和芯片 ID 不匹配。GSL1680 驱动里访问内部寄存器地址用的是 16 位地址如果 i2c 传输层把地址当成 8 位前几次通信是失败的等到下载失败后驱动退回到轮流扫描模式才会偶然成功。遇到这种直接看驱动里I2C_RW宏实现确认是i2c_transfer还是smbus_write_byte后者在部分 i2c 控制器上不支持 16 位地址。5. GSL1680 驱动避坑指南5 条血泪经验5.1 触摸没反应dmesg 里却有 probe success现象驱动 probe 正常input 设备也注册了但 Android 界面点任何地方都没反应。原因中断没有真正触发。很多 GSL 驱动依赖client-irq但设备树里interrupts配的 GPIO 和实际触摸中断脚不是同一个驱动注册了中断却等不到电平变化。另一个常见原因是指纹识别或按键驱动把同一个 GPIO 占用了导致 request_threaded_irq 返回失败但驱动没有打印错误。解决先用cat /proc/interrupts看 gsl 对应的中断次数有没有增加。如果始终为 0用示波器量触摸脚有没有脉冲。没有脉冲就是触摸屏排线或芯片供电问题有脉冲但中断计数不变就是 GPIO 复用冲突把 dts 里的pinctrl改成只让 i2c 和 irq 引脚复用去掉按键、耳机检测等共享配置。5.2 触摸坐标 X Y 完全反了现象触摸右上角指针跑到左下角。原因驱动里的TP_X_MAX/TP_Y_MAX和屏幕实际分辨率不一致或者没有启用坐标翻转。GSL 固件里有一组x_max、y_max、x_pixel、y_pixel参数和驱动头文件里的宏必须匹配。驱动上报坐标前会用input_report_abs(dev, ABS_X, x)直接上报原始值如果固件扫描方向和 LCD 面板安装方向相反就会翻转。解决不要硬改驱动里的宏。先把touchscreen-max-x和touchscreen-max-y配成实际分辨率然后看驱动里有没有GSL_TS_EXCHANGE或swap_x_y这类开关。我一般会在gsl_ts_probe里加打印dev_info(client-dev, x_max%d y_max%d\n, x_max, y_max);如果打印值正确但方向反就在 input 上报前做一次坐标交换int tx input_x; int ty input_y; input_x ty; input_y tx;如果只是单轴反对应改input_x x_max - input_x或input_y y_max - input_y。这是移植里最容易改错的地方记得改完要重新刷固件因为 GSL 驱动会在 probe 时把固件参数写入芯片只改 dts 不一定生效。5.3 休眠唤醒后触摸失效必须重启现象Android 息屏再亮屏触摸完全不工作只有重启设备才恢复。原因驱动没有实现suspend和resume或者实现里把触控芯片复位后没有重新下载固件。GSL 芯片在系统休眠时如果掉电内部 flash 里的固件可能丢失或进入异常状态。很多从非 Android 平台扒来的驱动只写了 probe没写电源管理裸奔上系统就会这样。解决给驱动补上标准 PM 回调static int gsl_suspend(struct device *dev) { disable_irq(client-irq); gpio_set_value(reset_gpio, 0); return 0; } static int gsl_resume(struct device *dev) { gpio_set_value(reset_gpio, 1); usleep_range(20000, 25000); gslX680_load_fw(client); enable_irq(client-irq); return 0; } static SIMPLE_DEV_PM_OPS(gsl_pm_ops, gsl_suspend, gsl_resume);然后i2c_driver里加.pm gsl_pm_ops。注意resume里必须重新下载固件因为芯片经历了完整掉电不能只拉高 reset。5.4 固件下载成功后中断风暴CPU 占用高现象probe 成功后系统 CPU 占用率飙高/proc/interrupts里 gsl 中断每秒几千次。原因中断触发方式配成了水平触发而 GSL 中断引脚是下降沿脉冲。水平触发时引脚低电平期间 CPU 会不断进入中断处理函数即使驱动读完数据中断标志没清照样再来。解决确认 dts 里interrupts是IRQ_TYPE_EDGE_FALLING。如果硬件上 GSL 芯片的中断脚默认就是低电平需要检查固件参数里的INT_EN配置。另外一个原因是在读取数据后没有调用input_sync以外的数据清除寄存器导致芯片以为自己还有数据要发反复拉低中断脚。此时需要对照 datasheet 看 GSL1680 数据寄存器读取时序通常在读完坐标后要写一个清中断寄存器。5.5 校准工具跑了但还是斜 45 度现象驱动能触摸getevent 坐标范围也对但在 Android 里画线总是斜 45 度横竖滚动不跟手。原因这不是驱动坐标问题而是 input 设备上报的 ABS 参数和 Android 层的InputReader不匹配。触摸屏驱动注册为 input 设备时如果absinfo里的input_abs_set_res没设置或者max值比真实像素大很多Android 会按比例缩放结果就是触摸轨迹斜向拉伸。解决在gsl_ts_probe里设置 input 设备的绝对参数input_set_abs_params(input_dev, ABS_X, 0, x_max, 0, 0); input_set_abs_params(input_dev, ABS_Y, 0, y_max, 0, 0); input_abs_set_res(input_dev, ABS_X, x_res); input_abs_set_res(input_dev, ABS_Y, y_res);x_res通常是x_max / 物理宽度毫米设成 0 或漏设会让 Android 用默认缩放。还有一点部分 GSL 驱动上报ABS_MT_POSITION_X时带 errtype B协议要求使用input_mt_slot如果驱动里直接input_report_abs没走input_mt_report_slot_state多点手势就会飘。把驱动改成完整的input_mt_init_slotsinput_mt_slot上报是一劳永逸的办法。6. 进阶验证用 getevent 和自定义脚本确认坐标映射与休眠唤醒6.1 先用 getevent 看原始事件流驱动编译烧录后不要急着点亮屏幕先用 getevent 确认原始上报链路adb shell getevent -lt /dev/input/event2其中 event 节点号按实际输出调整。触摸屏幕任意位置应该看到类似EV_ABS ABS_MT_TRACKING_ID 0000a8b0 EV_ABS ABS_MT_POSITION_X 000003ff EV_ABS ABS_MT_POSITION_Y 0000015f EV_SYN SYN_REPORT 00000000通过对比POSITION_X最大值和你的屏幕分辨率能快速判断坐标缩放是否正常。正常情况上报值应该落在0 ~ x_max范围内如果明显超出或最大值只有一半说明驱动内部GSL_TS_MAX_X配错。6.2 用 python 脚本验证 X/Y 是否反向getevent 手动按几组点不够直观可以写个小脚本辅助判断。常见做法是让触摸分别画横线和竖线再用 python 解析采集到的坐标import subprocess import sys points [] proc subprocess.Popen( [adb, shell, getevent, -t, /dev/input/event2], stdoutsubprocess.PIPE ) for line in iter(proc.stdout.readline, b): text line.decode().strip() if ABS_MT_POSITION_X in text: x int(text.split()[-1], 16) points.append((x, x)) elif ABS_MT_POSITION_Y in text: y int(text.split()[-1], 16) points.append((y, y)) if len(points) 20: break xs [p[1] for p in points if p[0] x] ys [p[1] for p in points if p[0] y] print(fx_min{min(xs)} x_max{max(xs)} y_min{min(ys)} y_max{max(ys)})脚本只用来做快速判断如果手指从左上滑到右下采到的 x 和 y 应该同向增长如果 x 越来越大而 y 越来越小就是单轴反向需要回到第 5.2 节改上报逻辑。这套方法也用得上休眠唤醒验证让设备休眠再唤醒后重复上面脚本坐标不飘、能正常采集就说明 suspend/resume 没问题。运行完这批验证我心里才敢把 boot.img 交付给工厂。移植 GSL1680/GSL1688 驱动最怕的从来不是代码复杂而是 dts 里少一个 GPIO、i2c 频率快一档、固件数组放错型号这些零零碎碎的问题往往要在现场靠日志和示波器耗掉半天。我现在每次接手新板子第一件事就是把 reset、irq、i2c 三条链路用打印确认一遍再谈其他优化。希望这一套从解包到校准的流程能帮你少走一段弯路。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Codex远程开发终极方案:程序员必看的5款远控软件深度适配横测 2026/10/1 15:02:06

Codex远程开发终极方案:程序员必看的5款远控软件深度适配横测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Agent Skills 工作机制拆解:从 SKILL.md 到场景探索的完整链路 2026/10/1 15:02:05

Agent Skills 工作机制拆解:从 SKILL.md 到场景探索的完整链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
提示工程 for 程序员:用 TaoToken 统一 Key 写出让 AI 理解的完美 Prompt 2026/10/1 15:02:05

提示工程 for 程序员:用 TaoToken 统一 Key 写出让 AI 理解的完美 Prompt

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Agent应用实践之四十六 - 专栏总结:用TaoToken统一Key复盘OpenClaw与AgentScope工程实践 2026/10/1 15:02:04

Agent应用实践之四十六 - 专栏总结:用TaoToken统一Key复盘OpenClaw与AgentScope工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
实验之外的第二曲线:文献、数据、代码如何有效提速科研 2026/10/1 15:02:04

实验之外的第二曲线:文献、数据、代码如何有效提速科研

实验室的灯还亮着,你又是一个人在等仪器预热。屏幕上的课题进度表已经三个月没动过,汇报PPT里那句“正在进行实验验证”连你自己都看烦了。这不是你的课题难,也不是你不努力,而是你只盯着实验这一条主线在跑,忽略了科研…

阅读更多 →
ESP32-CAM图像传输实战:从硬件接线到完整可运行代码 2026/10/1 15:01:58

ESP32-CAM图像传输实战:从硬件接线到完整可运行代码

拿到一块ESP32-CAM,你大概率是想让它把摄像头画面传回手机或电脑上看一眼。这块板子十几二十块钱,集成了WiFi、摄像头、SD卡槽,还带两个LED,做成入门级图像传输项目再合适不过。网上教程不少,但大部分都停留在“烧个Ca…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉