驱动程序开发:基于EC20 4G模块自动拨号联网的两种方式(GobiNet工具拨号和PPP工具拨号)
目录
- 一、EC20 4G模块简介
- 二、根据移远官方文档修改EC20 4G模组驱动
- 1、因为EC20 4G模组min-pice接口其实就是usb接口,因此需要修改Linux内核源码drivers/usb/serial/option.c文件,如下图:
- 2、根据USB协议的要求,需要在drivers/usb/serial/usb_wwan.c 文件下添加在批量处理期间处理零数据包的机制输出传输的代码,如下图:
- 3、当MCU进入暂停/休眠状态时,某些USB主机控制器/USB集线器将断电或重置并且当MCU从暂停/休眠模式退出时,它们不能恢复USB设备;相反,他们将操作复位恢复。在 drivers/usb/serial/option.c 文件下添加以下语句,如下图:
- 4、如果您使用的是UC20/EC25/EC21/EC20/EC20R2.0/EG91/EG95/EG06/EP06/EM06/BG96,并且需要GobiNet或QMI WWAN,必须在drivers/usb/serial/option.c文件下添加以下语句以防止这些模块的接口4防止用作USB串行设备,如下图:
- 5、使能 USB 串口 GSM、 CDMA 驱动,配置路径如下:
- 6、使能 USB 的 CDC ACM 模式,配置路径如下:
- 7、看看是否使能 USBNET 功能,路径如下:
- 8、插入EC20 4G模块,查看是否已经启动USB驱动和虚拟出该模组的网卡:
- 三、使用PPP工具拨号联网
- 1、配置 Linux 内核,打开 Linux 内核的 ppp 功能,配置路径如下:
- 2、移植pppd软件
- 3、测试pppd软件的ppp自动拨号上网
- 4、拓展:
- 四、使用GobiNet工具拨号上网
- 1、添加移远官方的GobiNet驱动
- 2、quectel-CM拨号工具移植:
- 3、使用quectel-CM软件来调用Gobi驱动自动拨号上网,ping通百度
- 4、拓展:
与EC20 4G模组所需的文件,下载链接,请点击即可
一、EC20 4G模块简介
关于 EC20 4G 模块的详细资料请找卖家索要!
EC20 有多种不同的配置,比如全网通纯数据版本、语音版、带 GNSS 版等等,建议大家购买的时候至少要选择全网通数据版,因为我们使用 4G 模块主要还是用于数据通信的。移远的EC20 4G 模块采用 LTE 3GPP Rel.11 技术,支持最大下行速率 150Mbps,最大上行速率 50Mbps。
EC20 4G 模块特性如下:
①、一路 USB2.0 高速接口,最高可达 480Mbps。
②、一组模拟语音接口(可选)。
③、 1.8V/3.0V SIM 接口。
④、 1 个 UART 接口。
⑤、 W_DISABLE#(飞行模式控制)。
⑥、 LED_WWAN#(网络状态指示)。
上图这个文档是移远官方的文档,它提供了mini-pcie接口的模组驱动的指导,大家可以参考。
二、根据移远官方文档修改EC20 4G模组驱动
1、因为EC20 4G模组min-pice接口其实就是usb接口,因此需要修改Linux内核源码drivers/usb/serial/option.c文件,如下图:
上图左边的是文档,右边是我修改的驱动源程序,大家会发现怎么我添加的比文档要多,这是左边文档是EC20旁系列的驱动匹配表,我是添加了移远比较全的系列,而我们用的EC20只使用到了上图的红色框框一行。
{ USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC20 R2.0/EC20 R2.1/EC25/EG25-G/EM05 */{ USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21/EG21-G */{ USB_DEVICE(0x2C7C, 0x0191) }, /* Quectel EG91 */{ USB_DEVICE(0x2C7C, 0x0195) }, /* Quectel EG95 */{ USB_DEVICE(0x2C7C, 0x0306) }, /* Quectel EG06/EP06/EM06 */{ USB_DEVICE(0x2C7C, 0x0512) }, /* Quectel EG12/EM12/EG18 */{ USB_DEVICE(0x2C7C, 0x0296) }, /* Quectel BG96 */{ USB_DEVICE(0x2C7C, 0x0700) }, /* Quectel BG95/BG77/BG600L-M3/BC69 */{ USB_DEVICE(0x2C7C, 0x0435) }, /* Quectel AG35 */{ USB_DEVICE(0x2C7C, 0x0415) }, /* Quectel AG15 */{ USB_DEVICE(0x2C7C, 0x0452) }, /* Quectel AG520R */{ USB_DEVICE(0x2C7C, 0x0455) }, /* Quectel AG550R */{ USB_DEVICE(0x2C7C, 0x0620) }, /* Quectel EG20 */{ USB_DEVICE(0x2C7C, 0x0800) }, /* Quectel RG500Q/RM500Q/RG510Q/RM510Q */
2、根据USB协议的要求,需要在drivers/usb/serial/usb_wwan.c 文件下添加在批量处理期间处理零数据包的机制输出传输的代码,如下图:
if (dir == USB_DIR_OUT) {struct usb_device_descriptor *desc = &serial->dev->descriptor;if (desc->idVendor == cpu_to_le16(0x05c6) && desc->iProduct == cpu_to_le16(0x9090))urb->transfer_flags |= URB_ZERO_PACKET;if (desc->idVendor == cpu_to_le16(0x05c6) && desc->iProduct == cpu_to_le16(0x9003))urb->transfer_flags |= URB_ZERO_PACKET;if (desc->idVendor == cpu_to_le16(0x05c6) && desc->iProduct == cpu_to_le16(0x9215))urb->transfer_flags |= URB_ZERO_PACKET;if (desc->idVendor == cpu_to_le16(0x2c7c))urb->transfer_flags |= URB_ZERO_PACKET;}
3、当MCU进入暂停/休眠状态时,某些USB主机控制器/USB集线器将断电或重置并且当MCU从暂停/休眠模式退出时,它们不能恢复USB设备;相反,他们将操作复位恢复。在 drivers/usb/serial/option.c 文件下添加以下语句,如下图:
.reset_resume = usb_wwan_resume,
4、如果您使用的是UC20/EC25/EC21/EC20/EC20R2.0/EG91/EG95/EG06/EP06/EM06/BG96,并且需要GobiNet或QMI WWAN,必须在drivers/usb/serial/option.c文件下添加以下语句以防止这些模块的接口4防止用作USB串行设备,如下图:
if (dev_desc->idVendor == cpu_to_le16(0x05c6) && dev_desc->idProduct == cpu_to_le16(0x9003) && iface_desc->bInterfaceNumber >= 4)return -ENODEV;if (dev_desc->idVendor == cpu_to_le16(0x05c6) && dev_desc->idProduct == cpu_to_le16(0x9215) && iface_desc->bInterfaceNumber >= 4)return -ENODEV;if (dev_desc->idVendor == cpu_to_le16(0x2c7c) && iface_desc->bInterfaceNumber >= 4)return -ENODEV;
5、使能 USB 串口 GSM、 CDMA 驱动,配置路径如下:
6、使能 USB 的 CDC ACM 模式,配置路径如下:
7、看看是否使能 USBNET 功能,路径如下:
8、插入EC20 4G模块,查看是否已经启动USB驱动和虚拟出该模组的网卡:
步骤:
编译Lnix内核“make -j6”,然后将/arch/arm/boot/zImage放到开发板重新加载,如果开发板识别出USB口的EC20,那么就会打印出以下红色框框信息:
三、使用PPP工具拨号联网
1、配置 Linux 内核,打开 Linux 内核的 ppp 功能,配置路径如下:
然后重新编译Linux内核,得到新的zImage,使用新的zImage启动开发板即可。
2、移植pppd软件
将 ppp-2.4.7.tar.gz 拷贝到 Ubuntu 下并解压,解压以后会生成一个名为 ppp-2.4.7 的文件夹。进入到 ppp-2.4.7 目录中,然后编译 pppd 源码,命令如下:
cd ppp-2.4.7/
./configure //配置
make CC=arm-linux-gnueabihf-gcc //编译
如果编译失败,提示 bison 和 flex 这两个“not found”的话就安装这两个库,命令如下:
sudo apt-get install bison
sudo apt-get install flex
编译完成以后就会在当前目录 下生成 chat/chat、 pppd/pppd、 pppdump/pppdump 和pppstats/pppstats 这四个文件,将这个四个文件拷贝到开发板根文件系统中的/usr/bin 目录下,令如下:
sudo cp chat/chat /home/djw/linux/nfs/rootfs/usr/bin/ -f
sudo cp pppd/pppd /home/djw/linux/nfs/rootfs/usr/bin/ -f
sudo cp pppdump/pppdump /home/djw/linux/nfs/rootfs/usr/bin/ -f
sudo cp pppstats/pppstats /home/djw/linux/nfs/rootfs/usr/bin/ -f
完成以后输入“pppd -v”查看一下 pppd 的版本号,如果 pppd 版本号显示正常的话就说明pppd 移植成功,如图下图所示:
然后将/EC20自动拨号文件/gosuncn文件拷贝到/etc目录下,有两个文件需要根据实际情况修改的:
①gosuncn_options文件:
第 1 行,如果是联通或移动的卡就是用 ttyUSB2,如果是电信的卡就是用 ttyUSB0。
第 11~12 行,这两行内容和所使用的卡有关,如果是联通或者移动的卡就按照上面的写,如果是电信的卡,要改为如下所示内容:
②gosuncn_ppp_dialer文件:
第 9 行,后面的 3GNET 是网络的 APN 码,这个要根据自己所使用的手机卡来确定,联通卡的 APN 为 3GNET,移动卡的 APN 为 CMNET。因为我使用的是联通卡进行测试的,所有这里设置 APN 为 3GNET,如果使用的移动卡,那么要将 APN 设置为 CMNET。如果是电
信的卡,那么第 9 行要改为:
第 10 行,如果是联通或移动的卡,那么第 10 行就不变。如果是电信的卡,那么第 10 行要改为:
gosuncn文件夹下:
3、测试pppd软件的ppp自动拨号上网
①输入如下命令连接 4G 网络:
在EC20连接 4G 网络的过程中,可能会出现如下图所示的错误提示:
从图上图可以看出,提示不能创建“Can’t create lock file /var/lock/LCK…ttyUSB2”,检查根文件系统是否存在/var/run 和/var/lock 这两个目录,如果没有的话就手动创建这两个文件夹,命令如下:
然后再输入拨号上网命令:
./ppp-on &,
会输出一下信息:
ppp 拨号成功以后就会生成一个名为“ppp0”的网卡,如下图所示:
但发现,怎么ping百度都不通,如下图所示:
出现以上的问题,这里有两点原因:
①路由上并没有把EC20 4G模组生成的网络地址添加进去,那么Linux系统只会调用添加进默认的路由中:
如下图所示,4G网卡并没有添加到默认的路由中:
命令:ip route show
解决办法,将4G网卡生成的网络地址添加进默认路由中,如下图:
命令:route add default gw ip地址
②IP地址解析失败原因是并没有解析出其对应的 IP 地址。因此我们需要配置域名解析服务器的 IP 地址一般域名解析地址可以设置为所处网络的网关地址,比如 192.168.1.1。也可以设置为运营商的域名解析服务器地址。
解决办法,在/etc目录下创建resolv.conf_back文件,内容下图所示:
然后在/etc目录下创建ppp0脚本文件,并赋予可执行权限,内容如下图所示:
最后就可以上网ping通百度了,如下图所示:
4、拓展:
上面讲的是使用gosuncn文件下的脚本文件启动ppp拨号的方式,现在再讲使用peers文件下的脚本文件启动ppp拨号。
将peers文件夹拷贝到/etc/ppp/目录下,并在 quectel-ppp 里修改你的串口设备名,pppd 拨号使用的 username,password。
在 quectel-chat-connect 里修改你的 APN。APN/username/password 是从你的网络提供商那里获取的。(上面已经讲过了)
然后使用下面的命令启动 ppp 拨号上网,ping通百度,如下图所示:
四、使用GobiNet工具拨号上网
1、添加移远官方的GobiNet驱动
①先将 Quectel_WCDMA<E_Linux&Android_GobiNet_Driver_V1.3.0.zip压缩包解压,然后将Quectel_WCDMA<E_Linux&Android_GobiNet_Driver_V1.3.0/src 下的所有.c 和.h 文件都拷贝到 Linux 内核中的/driver/net/usb 目录下,如下图所示:
②打开 Linux 内核的 drivers/net/usb/Makefile 文件,添加如下图内容,让Linux系统启动是自动连接.ko文件,并自动加载。
③打开Linux内核的drivers/net/usb/Kconfig 文件,添加如下图内容,目的是在make menuconfig图形化界面添加GobiNet驱动使能项。
config USB_GOBI_NETtristate"Gobi USB Net driver for Quectel module"helpSupport Quectelmodule.A modemmanager with support for GobiNet is recommended.Tocompile this driver as a module, choose M here: the module will be calledGobiNet.
④打开 Linux 内核配置界面,使能前面添加的 Gobi 驱动,配置路径如下:
配置完成以后就重新编译一下 Linux 内核,然后使用新的 zImage 启动开发板。启动以后检查一下“/dev/qcqmi2”这个文件是否存在,如果存在的话就说明 Gobi 驱动工作成功。
如下图所示:
Ⅰ:启动时打印信息
Ⅱ:查看/dev目录下是否生成了qcqmi2设备节点,如下图所示:
2、quectel-CM拨号工具移植:
将WCDMA<E_QConnectManager_Linux&Android_V1.1.34.zip 这个压缩包进行解压,得到quectel-CM 这个文件夹,然后将 quectel-CM 文件夹拷贝到 Ubuntu 中。拷贝完成以后进入到Ubuntu 中的 quectel-CM 文件夹,使用如下命令进行交叉编译:
make CROSS_COMPILE=arm-linux-gnueabihf-
编译完成以后得到一个名为“quectel-CM”软件,如下图所示:
将 quectel-CM 软件拷贝到开发板根文件系统的/usr/bin 目录下,命令如下:
sudo cp quectel-CM /home/zuozhongkai/linux/nfs/rootfs/usr/bin/ -f
3、使用quectel-CM软件来调用Gobi驱动自动拨号上网,ping通百度
①输入如下命令完成 EC20 的 4G 网络连接:
quectel-CM -s cenet &
4、拓展:
我们也可以将Quectel_WCDMA<E_Linux&Android_GobiNet_Driver_V1.3.0整个文件夹拷贝到Linux内核下的/drivers/net/usb目录下,修改makefile文件,手动生成GobiNet.ko文件,然后自己手动加载GobiNet.ko驱动程序也是可以的。
相关文章:

驱动程序开发:基于EC20 4G模块自动拨号联网的两种方式(GobiNet工具拨号和PPP工具拨号)
目录一、EC20 4G模块简介二、根据移远官方文档修改EC20 4G模组驱动 1、因为EC20 4G模组min-pice接口其实就是usb接口,因此需要修改Linux内核源码drivers/usb/serial/option.c文件,如下图: 2、根据USB协议的要求,需要在drive…...
Web自动化测试——常见问题篇
文章目录一、什么是自动化测试二、为啥进行自动化测试(优点)三、Webdriver 的工作原理四、显示等待和隐式等待的区别五、什么样的项目适合做自动化六、自动化测试的流程七、如何分析生成的自动化测试报告一、什么是自动化测试 所谓的自动化测试就是使用…...

快速实现Modbus TCP转BACnet IP协议的方案
一、需求背景 BACnet是用于智能楼宇自控系统的主流通信协议,可用在暖通空调系统(HVAC,包括暖气、通风、空气调节),也可以用在照明控制、门禁系统、火警侦测系统及其相关的设备。楼宇中的受控设备都通过BACnet协议连接到…...

Unity CircleLayoutGroup 如何实现一个圆形自动布局组件
文章目录简介实现原理Editor 编辑器简介 Unity中提供了三种类型的自动布局组件,分别是Grid Layou Group、Horizontal Layout Group、Vertical Layout Group,本文自定义了一个圆形的自动布局组件Circle Layout Group,如图所示: Ra…...

springcloud+nacos+gateway案例
一、先搭建好springcloudnacos项目地址:https://javazhong.blog.csdn.net/article/details/128899999二、spring cloud gateway简述Spring Cloud Gateway 是Spring Cloud家族中的一款API网关。Gateway 建立在 Spring Webflux上,目标是提供一个简洁、高效的API网关&a…...
实习这么久,你知道Maven是如何从代码仓库中找到需要的依赖吗?
目录 碎碎念 Maven是如何找到代码仓库里需要的依赖的? 如何根据坐标在本地仓库中寻找所需要的依赖? 如何根据坐标在远程仓库中寻找所需要的依赖? Maven 如何使用 HTTP 或 HTTPS 协议从远程仓库中获取依赖项,请详细解释其原理…...

低代码/零代码的快速开发框架
目前国内主流的低代码开发平台有:宜搭、简道云、明道云、云程、氚云、伙伴云、道一云、JEPaaS、华炎魔方、搭搭云、JeecgBoot 、RuoYi等。这些平台各有优劣势,定位也不同,用户可以根据自己需求选择。 一、阿里云宜搭 宜搭是阿里巴巴集团在20…...
C# 中常见的设计模式
设计模式是一套被广泛应用于软件设计的最佳实践,它们可以帮助开发者解决特定的问题,提高代码的可重用性、可读性和可维护性。本文将介绍 C# 中常见的几种设计模式,并提供相应的示例代码。 工厂模式 工厂模式是一种创建型设计模式,…...
promethues/servicemonitor
目录 1.promethues 能保证源源不断地采集/metrics 信息吗?每次都是最新的吗 2.部署servicemonitor 的作用是什么? 3.pod 部署采集数据直接上报promthues ,不通过servicemonitor 可以吗? 4.你说的"此外,如果部署…...

postman使用简介
1、介绍 postman是一款功能强大的网页调试和模拟发送HTTP请求的Chrome插件,支持几乎所有类型的HTTP请求 2、下载及安装 官方文档:https://www.getpostman.com/docs/v6/ chrome插件:chrome浏览器应用商店直接搜索添加即可(需墙&…...
@DS注解在事务中实现数据源的切换@DS在事务中失效【已解决】
在Springboot的application.yml中的配置: spring:datasource:url: jdbc:mysql://localhost:3306/test2?serverTimezoneUTC&useUnicodetrue&characterEncodingutf8driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: rootdynamic:primar…...
Java I/O之文件系统
一、全文概览 在学习文件系统之前,需要了解下Java在I/O上的发展史:在Java7之前,打开和读取文件需要编写特别笨拙的代码,涉及到很多的InputStream、OutputStream等组合起来使用,每次在使用时或许都需要查一下文档才能记…...

Mysql元数据获取方法(information_schema绕过方法)
前提:如果waf或其它过滤了information_schema关键字,那我们该如何获取元数据呢?能够代替information_schema的有:sys.schema_auto_increment_columnssys.schema_table_statistics_with_bufferx$schema_table_statistics_with_buff…...
Eclipse快捷键
* 1.补全代码的声明:alt /* 2.快速修复: ctrl 1 * 3.批量导包:ctrl shift o* 4.使用单行注释:ctrl /* 5.使用多行注释: ctrl shift / * 6.取消多行注释:ctrl shift \* 7.复制指定行的代码:ctrl a…...

java ssm自习室选座预约系统开发springmvc
人工管理显然已无法应对时代的变化,而自习室选座预约系统开发能很好地解决这一问题,既能提高人力物力,又能提高预约选座的知名度,取代人工管理是必然趋势。 本自习室选座预约系统开发以SSM作为框架,JSP技术,…...

分享我从功能测试转型到测试开发的真实故事
由于这段时间我面试了很多家公司,也经历了之前公司的不愉快。所以我想写一篇文章来分享一下自己的面试体会。希望能对我在之后的工作或者面试中有一些帮助,也希望能帮助到正在找工作的你。 找工作 我们总是草率地进入一个自己不了解的公司工作…...

TypeScript快速入门———(二)TypeScript常用类型
文章目录概述1 类型注解2 常用基础类型概述3.原始类型4 数组类型5 类型别名6.函数类型7 对象类型8 接口9 元组10 类型推论11 类型断言12 字面量类型13 枚举14 any 类型15 typeof概述 TypeScript 是 JS 的超集,TS 提供了 JS 的所有功能,并且额外的增加了…...

Mac M1 使用Centos8➕VMware Fusion进行静态网络配置
大部分的流程网络上面都有当我们已经下载好mac m1版的Centos8链接: https://pan.baidu.com/s/1UTl4Lo-_c17s-PDj3dA6kA 提取码: 7xh2 和VMware Fusionhttps://www.vmware.com/cn/products/fusion.html之后就可以进行安装了在导入过后 记得将硬盘和内存都设置好了 记得在关机状态…...

RadGraph: Extracting Clinical Entities and Relations from Radiology Reports代码
文章来源:NeurIPS 文章类别:IE(Information Extraction) RadGraph主要基于dygie,主要文件为inference.py。 inference.py: 1、get_file_list(data_path) def get_file_list(path):file_list [item for item in glob.glob(f&q…...
13. OPenGL与QT界面元素交互控制图形渲染
1. 说明: 前面文章中讲到的 OPenGL 渲染都是在页面加载完成即立刻渲染的,如果向控制图形渲染的时间,可以在QT界面中添加一些元素来进行控制。此时需要用到OPenGL当中的makeCurrent(),update(),doneCurrent()函数。 效果展示: ope…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...