# mytry6 **Repository Path**: zucllinux/mytry6 ## Basic Information - **Project Name**: mytry6 - **Description**: No description available - **Primary Language**: HTML - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: https://gitee.com/LCXIN_1/mytry6 - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2022-04-04 - **Last Updated**: 2022-04-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 简介 致力于4G、5G工业路由器的开发, 针对此行业的软件及硬件做适应市场多样化的定制需求。 - 研发**软件基础开发平台**,对嵌入式硬件进行统一封装, 向上提供统一并且高可扩展性的接口 - 研发高度集成且接口丰富的**路由模块**, 基于路由模块开发针对性的终端产品 # 硬件产品 ## LTE/NR路由模块 路由模块用于嵌入于客户的设备或产品中帮助其接入互联网 - **4G路由模块** --- [D218](./doc/product/d218/spec.md) 满足LTE(4G), WIFI(2.4G)300M双天线, 100M以太网的有线接入的多功能高可扩展的路由模块, 支持RS485/RS232/TTL的串口及多路IO口控制 - **5G路由模块** --- [D228](./doc/product/d228/spec.md) 满足NR(5G)及LTE(4G), WIFI(5.8G)800M双天线,, 1000M以太网的有线接入的多功能高可扩展的路由模块, 支持RS485/RS232/TTL的串口及多路IO口控制 ## LTE/NR路由器 路由器用于各种应用场合的网络接入 - **两口4G路由器** --- [2218](./doc/product/2218/spec.md) 提供LTE(4G)接入能力, 拥有2个RJ45以太网口, 2.4G无线(300M), 一个SIM卡槽(大卡), 一个串口(RS485), 双供电口(DC头或4PIN头供电)可选,GPS定位可选 - **三口4G路由器** --- [3218](./doc/product/3218/spec.md)(*资料暂暂未上传*) 提供LTE(4G)接入能力, 拥有3个RJ45以太网口, 2.4G无线(300M), 双SIM卡槽(大卡), 双串口(RS232/RS485), 2路IO口, 双供电口(DC头或四PIN带卡扣供电头)可选,GPS定位可选 - **五口4G路由器** --- [5218](./doc/product/5218/spec.md)(*资料暂暂未上传*) 提供LTE(4G)接入能力, 拥有5个RJ45以太网口, 2.4G无线(300M), 双SIM卡槽(大卡), 双串口(RS232/RS485), 2路IO口, 双供电口(DC头或四PIN带卡扣供电头)可选,GPS定位可选 - **三口5G路由器** --- [3228](./doc/product/3228/spec.md)(*资料暂暂未上传*) 提供NR/LTE(5G/4G)接入能力, 拥有3个RJ45千兆以太网口, 2.4G无线(300M), 5.8G无线(866M), 双SIM卡槽(大卡), 双串口(RS232/RS485), 6路IO口, 可选内置GPS, 双供电口(DC头或四PIN带卡扣供电头)可选, GPS北斗定位可选 - **五口5G路由器** --- [5228](./doc/product/5228/spec.md)(*资料暂暂未上传*) 提供NR/LTE(5G/4G)接入能力, 拥有5个RJ45的千兆以太网口, 2.4G无线(300M), 5.8G无线(866M), 双SIM卡槽(大卡), 双串口(RS232/RS485), 6路IO口, 可选内置GPS, RTC, 双供电口(DC头或四PIN带卡扣供电头)可选, GPS北斗定位可选 # 软件基础开发平台 使用Linux操作系统提供的各项功能, 将嵌入式硬件的各种资源包装成相对更统一的 **开发环境** 致力在嵌入式硬件与嵌入式软件之间插入 **开发环境** 中间层 剥离出两种方向的开发: - **开发环境** 的开发: 移植更多的嵌入式硬件平台, 包装更多硬件资源, 提供更多的API - **嵌入式软件** 的开发: 基于开发环境提供的API开发更多的应用逻辑(即**FPK包**), 且应用逻辑也可以方便的以API的方式向其它应用提供接口, 各种应用逻辑可以很方便的相互叠加, 满足客户的各种个性需求 通过以上方式使得基于本 **开发环境** 开发的 **嵌入式软件**, 据有很多优势: - 可以无代码级修改的移植到本开发环境支持的任意嵌入式硬件平台中, 改变嵌入式中重复开发及移植或适配现状 - 可以非常方便的向外提供各种调用接口 - 基于系统向外提供的协议直接实现对应管理配置或调用其接口 - 并在未来的嵌入式芯片更新换代中节约非常大的研发成本 **软件基础开发平台** 包含有 **开发环境** 跟产品对应的的 **嵌入式软件**, 我们称之为 **FarmOS** ***注意: 本软件基础开发平台不支持升级到未援权的硬件上, 否则将造成硬件的损坏*** ## 软件基础开发平台下载或更新 #### 1. 开发环境下载 在Ubuntu 18.04下执行以下命令下载开发环境(请先下载git及make) ```shell git clone https://gitee.com/ashyelf/mytry6.git ``` 以上指令成功完成后会生成mytry6目录, 此目录是开发环境的顶层目录, 进入此目录 ```shell cd mytry6 ``` 执行以下指令可在Ubuntu下自动安装一些编译需要的工具 ```shell make ubuntu_preset ``` 在开发环境的顶层目录下执行以下指令来指定要开发的产品型号 ```shell make pid gBOARDID=产品完整型号 # 如D218的产品输入以下指令指定产品型号: # make pid gBOARDID=mtk-mt7628-d218 # 如D228的产品输入以下指令指定产品型号: # make pid gBOARDID=mtk-mt7621-d228 # 如V520的产品输入以下指令指定产品型号: # make pid gBOARDID=mtk-mt7621-v520 # 如H721的产品输入以下指令指定产品型号: # make pid gBOARDID=mtk-mt7621-h721 ``` 其中 **产品完整型号** 在产品(需要[打开设备的开发者选项](./doc/dev/打开设备的开发者选项.md))管理界面的 **调试** 菜单下的 **SDK下载** 菜单项页面上会有对应的示例, 之后再执行以下指令来更新产品型号对应的编译环境及嵌入式软件 ```shell make update ``` 通过以上三步即可更新产品型号对应的完整的编译环境及嵌入式软件 ***注意: 以后所有未指名目录的执行命令都表示在开发环境的项层目录执行*** #### 2. 选择编译指定的软件包 执行 ```shell make menu ``` 将会更新菜单项, 之后再执行 ```shell make menuconfig ``` 将会显示出产品型号对应的软件包菜单, 可进去勾选或去勾选软件包, 所有本系统的项目都会在Farm system菜单项下 ***注意: 如果不需要调整产品上的功能请不要勾选或去勾选操作, 直接退出即可*** #### 3. 编译固件 执行 ```shell make dep make ``` 即可编译产品型号对应的固件 #### 4. 固件升级 编译完成后会在build目录下生产一个.zz结尾固件升级包 #### 5. 更新固件 通过在设备管理界面中的 **系统=>软件管理=>软件更新** 来点选.zz结尾的固件升级包来更新固件 如需升级的同时恢复出厂设置可将固件的后缀名(.zz)修改为.default后现通过网页管理界面升级即可 ***注意: 开发固件升级后可能导致不启动,如果不启动而系统灯慢闪请手动通过长按复位按键5-8秒复位设备即可*** ------ ## 软件基础开发平台目录介绍 #### doc --- 文档目录 * doc/use: 使用说明 * doc/com: 组件接口文档 * doc/dev: 开发文档及API介绍 #### project --- 存放项目的目录 * 以下为时间管理(clock)项目示例说明项目下的各种文件 - [project/clock](./project/clock/): 系统的时间管理项目 - [project/clock/prj.json](./project/clock/prj.json): 项目信息文件, 里面对项目非常重要的信息, 通常在创建项目时会自动生成, 通常不需要用户手动编辑, [fpk.md](./doc/com/land/fpk.md)对其有更详细的描述 - [project/clock/date](./project/clock/date): 时间管理组件代码目录, 在运行系统中通过clock@date组件名可定位到此组件并对其管理 - [project/clock/date.cfg](./project/clock/date.cfg): 项目配置, 为时间管理组件的默认配置 - [project/clock/restart](./project/clock/restart): 定时重启组件代码目录, 在运行系统中通过clock@restart组件名定位 *注: 项目下所有组件,在运行系统(设备)中通过 项目名@组件名 可定位到此组件并对其调用或管理* - [project/clock/restart.cfg](./project/clock/restart.cfg): 项目配置, 定时重启组件的默认配置 *注: 项目下所有.cfg结尾的文件都是同名组件的默认配置* - [project/clock/date.md](./project/clock/date.md): 时间管理组件的说明(Markdown语法) - [project/clock/restart.md](./project/clock/restart.md): 定时重启组件的说明(Markdown语法) *注: 项目下所有.md结尾的Markdown文档都是同名组件对应的功能及接口说明* - [project/clock/ntpclient](./project/clock/ntpclient): 开源C语言的NTP协议对时可执行程序目录 - [project/clock/Makefile](./project/clock/Makefile): 项目的编译文件, 通常在创建项目时会自动生成 #### config: 产品定制目录 * config/<厂商>, 厂商配置目录: 基于原厂SDK编译时的一些特性形成的一些差异文件, 如: - 联发科系列的配置目录存放在[config/mtk](./config/mtk/)中 - Atheros系列的配置目录存放在[config/ath](./config/ath/)中 - 高通系列的配置目录存放在[config/qca](./config/qca/)中 - 博通系列的配置目录存放在[config/bcm](./config/bcm/)中 * config/<厂商>/<芯片>, 芯片配置目录: 基于芯片型号或硬件型号的一些特性形成的一些差异文件, 如: - 联发科MT7628的芯心的配置目录存放在[config/mtk/mt7628](./config/mtk/mt7628/)中 - 高通的qca9531芯心的配置目录存放在[config/qca/qca9531](./config/qca/qca9531/)中 * config/<厂商>/<芯片>/<型号>, 产品型号配置目录: 基于硬件PCBA的型号版本的一些特性形成的一些差异文件, 如: - 联发科的MT7628的芯心形成的R103的型号的产品的配置目录存放在[config/mtk/mt7628/d218](./config/mtk/mt7628/d218/)中 - Atheros的ar9331的芯心形成的r100的型号的产品的配置目录存放在[config/ath/ar9331/r100](./config/ath/ar9331/r100/)中 * config/<厂商>/<芯片>/<型号>/<定制号>, 产品型号特别定制配置目录: 基于某些特定用户定制的差异文件 #### tools: 编译或开发项目时可能用到的工具 #### Makefile: Makefile编译脚本文件 #### readme.md: 说明文档, 即当前文档 ------ ## 编译时的宏 #### 重要的配置宏 - gBOARDID : 当前要编译的产品的完整型号, 可以在[Makefile](./Makefile)中指定, 也可编译时命令行指定, 示例使用的是在命令行中给出 - gPLATFORM : 当前编译的厂商标识, 从gBOARDID宏可获取 - gHARDWARE : 当前编译的芯片标识, 从gBOARDID宏可获取 - gCUSTOM : 当前编译的产品型号(PCBA)标识, 从gBOARDID宏可获取 - gSCOPE : 当前编译的定制标识, 从gBOARDID宏可获取 - gVERSION : 版本标识 - gMAKER : 编译人员名称 #### 常用的目录宏 - gTOP_DIR : 顶层目录, 整个编译环境的根目录 - gSDK_DIR : 当前芯片平台编译目录, 对应的底层源代码的目录 - gPLATFORM_DIR : 当前厂商配置目录 - gHARDWARE_DIR : 当前芯片配置目录 - gCUSTOM_DIR : 当前产品型号配置目录 - gPROJECT_DIR : 存放项目的目录, 即project - gTOOLS_DIR : 工具目录 - gBUILD_DIR : 编译过程中产生的中间文件 - gINSTALL_DIR : 编译时软件项目输出的根目录 - gosROOT_DIR : 运行系统的根目录, 在编译过程中创建, 在里面的所有文件及目录都被放到目标系统上去 - gosPRJ_DIR : 运行系统的下的存放项目资源的目录, 在编译过程中创建, 所有项目资源都在此目录下 #### 常用的文件宏 - gMAKEFILE_CFGFILE : Makefile配置文件, 可用于定义一些编程过程中都要用到的全局宏 ------ ## 编译固件及升级的方法 1. 在顶层目录下输入make dep;make后回车即可开始编译 2. 编译完成后在顶层目录下的build目录下会产生对应的.zz结尾的固件升级包 3. 通过产品的网页中 系统=>软件管理=>软件更新 升级.zz结尾的固件升级包即可 ---- ## 软件系统相关名词解释 #### 顶层目录 此文件存在的目录即为顶层目录, 也是整个编译环境的最高层目录 #### 项目 * 所有的应用都以项目的形式存在, 项目以目录的方式存放于project目录下, 每一个项目目录中都必须包含: - 项目信息文件, 即prj.json - 项目编译Makefile, 使用芯片原厂或Openwrt的编译体系(如果芯片原厂基于Openwrt的SDK) * 每一个项目目录中都可包含: - 可执行程序代码 - 库代码 - 内核驱动代码 - 组件源代码 - 默认配置文件 - 界面文件 - 语言文件 - 脚本文件及其它资源文件 * 所有的开发者都应以项目的方式开发自已的应用程序 *在[prj.md](./doc/com/land/prj.md)中有对项目及FPK安装包有更详细的介绍* #### 项目目录 每一个项目都有一个项目名同名的目录, 用来存放项目相关的资料, 通常放在顶层目录下的[project](./project)目录中 #### FPK安装包 * FPK安装包即相当于windows中的软件安装包, 安卓中的apk文件 * 项目开发完成后都将编译成以.fpk结尾的FPK安装包 * FPK安装包可以通过系统界面安装到系统中 * 每一个FPK安装包中都必须包含: - 项目信息文件, 即prj.json * 每一个FPK安装包都可包含: - lib下的库 - bin下的可执行文件 - 驱动文件 - .com结尾的组件文件 - .cfg结尾的配置文件 - .html结尾的界面文件 - .json结尾的语言文件 - .sh结尾的SHELL脚本文件 - 其它的资源文件 - install/include下开发用的库头文件(编译时用到) - install/lib下开发用的库(编译时用到) #### 组件 * 位于项目中, 使用C代码开发, 与Linux下的普通程序一样,可包含linux下的头文件调用Linux的库 * 项目的所有功能接口都以组件的方式实现, 放在对应的项目目录下 * 组件提供统一接口方便其它模块或用户管理及使用 * 组件跟普通的可执行程序的区别是有多个入口, 会被其它程序调用, 提供统一的接口, 系统对其有统一的管理方式 * 组件有对应的配置属性, 是一个JSON对象, 其掉电后可保存 * 开发者也可以以传统的可执行程序的方式开发应用, 但必须以组件的形式开发对应的接口以方便与其它项目或系统管理层交互 #### 运行系统: 即编译出来后的映像在目标机器(设备)上运行时的系统 ------ ## 软件系统分层简介 组件为本系统设计的核心, 它存在于项目中, 相似功能的组件或是相互配合的组件通常归类到一个项目中, 对于系统来说组件是核心部件, 项目只是组件的容器, 以下以组件视角将系统从上到下分为五层 #### 第五层 * 第三方应用组件, 用户自行开发各种应用组件, 如: - ddns@phddns的花生壳客户端 - ddns@oray的花生壳内网版客户端 - portal@wifidog的wifidog的客户端 - printer@p910nd网络打印机 - uart@jtt808部标定位上报客户端 - lte@ztem7520中兴微7520的LTE模块的拨号及管理组件 * 常用应用组件, 系统中常用的功能, 通常固件会集成与产品特性相关的一些此类组件, 如: - vpn@pptpclient的PPTP客户端 - uart@dtu串口透传组件 - gnss@gps全球定位系统组件 * 基础应用组件,系统运行中经常被调用的组件, 通常会集成在固件中, 如: - tui@dropbear的SSH服务器 - tui@telnet的Telnet服务器 - wui@admin的WEB管理服务器 - clock@date时间管理组件 - network@frame网络管理组件 - land@syslog日志管理组件 #### 第四层 * 框架基础组件, 基于框架库或是一些C库开发的框架必须的组件, 如: - land@serivce服务进程组件 - land@joint事件组件 - land@fpk包管理组件 - land@auth用户管理组件 - land@reg全局寄存器组件 - land@machine设备信息管理组件 * 平台底层组件, 通过这些组件统一与底层硬件的接口, 通常移植到新的平台时只需要重新开发此类组件即可, 如: - arch@data配置管理组件 - arch@firmware固件管理组件 - arch@reggpio IO口操作组件 - arch@ethernet网口组件 - wifi@nssid无线2.4G SSID组件 #### 第三层 * 系统框架库, 如: land库, landnet库, uart库, modem库 * 系统框架工具, 如: he, hetui #### 第二层 * Linux优秀的应用程序, 如: openvpn, pptpclient, proftpd, samba等 * Linux常用的应用及工具, 如: busybox, wget, mtd, ip, tc等 * Linux C库及一些常用基础库或应用库, 如: libc库, math库, json库, zlib库, openssl库 #### 第一层 * Linux内核驱动或内核驱动模块 * Linux内核 ------ ## 开发应用程序 在FarmOS中开发应用程序是通过创建项目来完成的, 下图给出在FarmOS项目的所有部件, 其中项目描述文件prj.json是必须的, 它在创建项目时会自动创建 ![avatar](./doc/dev/项目结构.png) 上图中组件是项目的核心部件, 通过组件将项目组成一个整体对外提供统一的接口, 也可以把组件看成是项目与系统的粘合剂, 它通过统一的接口与系统粘在一起 ###### 参见: [项目及组件开发介绍](./doc/dev/项目及组件开发介绍.md) 介绍FarmOS中以组件为中心的项目开发步骤及逻辑, 为其编写网页界面, 并为项目组件提供默认配置等 ###### 参见: [在项目中编写Linux可执行程序](./doc/dev/项目及组件开发介绍-编写可执行程序.md) 介绍在FarmOS的项目中开发Linux的可执行程序 ###### 参见: [在项目中编写共享库](./doc/dev/项目及组件开发介绍-编写共享库.md) 介绍在FarmOS的项目中开发共享动态库 ###### 参见: [在项目中编写内核模块](./doc/dev/项目及组件开发介绍-编写内核模块.md) 介绍在FarmOS的项目中开发内核模块 ###### 参见: [在项目中编写脚本程序](./doc/dev/项目及组件开发介绍-编写脚本程序.md) 介绍在FarmOS的项目中编写Shell等脚本程序 ###### 参见: [编写基于已有Linux程序可执行程序的项目](./doc/dev/项目及组件开发介绍-编写基于二进制程序的项目.md) 介绍在FarmOS中围绕已有的Linux二进制程序开发安装包(项目) ###### 参见: [自定义默认配置](./doc/dev/系统开发-自定义默认配置.md) 介绍在如何自定义产品的默认配置, 允许自定义设备在恢复出厂后的原始配置 ###### 参见: [在lte项目下添加LTE/NR模块驱动](./doc/dev/系统开发-加入支持新的LTE模块.md) 介绍在如何加入新的LTE/NR模块的驱动, 让FarmOS支持更多的4G或5G模块的驱动 ###### 参见: [自定义网络连接模式](./doc/dev/系统开发-开发新的工作模式.md) 介绍在自定义网络连接策略, 实现更复杂的连接逻辑 ###### 参见: [编写基于移植开源程序的项目](./doc/dev/项目及组件开发介绍-编写基于移植的开源程序的项目.md) 介绍在FarmOS中如何移植传统的Linux开源程序 ###### [开发文件所在的目录](./doc/dev) 中可以查找到更多的开发相关的文档 ------ ## 运行系统管理 1. 设备启动后, FarmOS将正常运行, 此时设备上的FarmOS简称为运行系统 2. 运行系统内的管理是通过对项目中组件的操作来实现的 2. 多个相关或类似的组件组成一个项目 3. 项目内可能包含各种文件, 但对于外界来说是一个整体, 通过其下的组件提供统一的交互接口 5. 每个组件都可以有配置及接口 6. 用户对于项目的知识可以只限于组件的配置及接口的使用即可, 组件内部的实现细节不用关心 7. 通过telnet/ssh或设备串口可以连接到运行系统的命令行, telnet及ssh需要输入正确的用户名及密码将进入命令行终端 8. 终端命令简介 - @ ------------------------------------------ 列出所有项目组件 - 组件名 ----------------------------------- 列出组件的配置 - 组件名:属性 ---------------------------- 显示组件配置内某项属性的值 - 组件名:属性=值 ----------------------- 设置组件配置内某项属性的值 - 组件名. ---------------------------------- 列出组件的接口 - 组件名.接口名 ------------------------- 调用组件的接口 - 组件名.接口名[ 参数1, 参数2, ... ] - 调用组件的接口, 并给出参数 ------ ## 在设备中直接开发项目 在设备中我们可以直接开发简单的脚本类的项目(不需要编译, 如Shell脚本等) ###### 参见: [运行系统中在线开发](./doc/dev/运行系统中在线开发.md) 在Shell脚本开发中可以调用HE指令查询或设置系统中的组件配置及调用组件接口实现更实用的功能, 通过HE指令可以管理系统中所有的功能及配置 ###### 参见: [运行系统中终端HE指令使用说明](./doc/com/tui/he_command.md) ## 系统中常用的组件配置及组件接口 **以下为系统中常用的组件配置及接口介绍的文档** - [设备基本信息](./doc/com/land/machine.md) --- 设备信息相关的操作接口 - [设备时间管理](./doc/com/clock/date.md) --- 设备时间相关的操作接口 - [LTE网络](./doc/com/ifname/lte.md) --- 获取LTE网络相关的信息及管理其配置的接口 - [LTE模块](./doc/com/modem/lte.md) --- 获取LTE模块相关的信息及管理其配置的接口 - [WAN口](./doc/com/ifname/wan.md) --- 获取有线WAN口相关的信息及管理其配置的接口 - [LAN口](./doc/com/ifname/lan.md) --- 获取有线LAN口相关的信息及管理其配置的接口 - [无线SSID](./doc/com/arch/nssid.md) --- 获取无线WIFI的信息及管理其配置的接口 - [SSH服务](./doc/com/tui/ssh.md) --- 管理SSH服务器相关的接口及配置 - [Telnet服务](./doc/com/tui/telnet.md) --- 管理Telnet服务器相关的接口及配置 - [内置GPS](./doc/com/uart/gnss.md) --- 管理内置GPS相关的接口及配置 - [串口](./doc/com/uart/serial.md) --- 管理串口相关的接口及配置 - [网页服务](./doc/com/wui/admin.md) --- 管理网络服务器相关的接口及配置 - [用户名密码等认证相关](./doc/com/land/auth.md) --- 管理用户各密码等权限相关的接口及配置 可以通过终端连接(Telnet/SSH/串口)设备使用 [运行系统中终端HE指令使用说明](./doc/com/tui/he_command.md) 来管理组件配置或调用组件接口 可以通过编程的方式来 [管理组件配置](./doc/dev/项目及组件开发介绍-管理组件配置.md) 和 [调用组件接口](./doc/dev/项目及组件开发介绍-调用组件接口.md) 全部组件接口文档请查询以下目录参见[组件文档目录](./doc/com) ----