🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 一、操作系统简介 DHG系列物联网关运行基于Linux深度定制的嵌入式操作系统,具有灵活的扩展性,并提供完整的SDK开发包和交叉编译工具链,用户可以方便地进行二次开发。 ### 1.1 访问网关操作系统 #### WEB方式 若通过WiFi或LAN口连接网关,用浏览器访问`http://192.168.1.1`即可登录WEB管理界面,默认用户密码:`admin`;若通过WAN口连接,需要访问`http://wan.ip:8080`,WAN口IP默认为动态获取,因此最好先用WiFi登录后改为静态再用WAN口连接。 #### 命令行方式 通过WiFi或LAN口连接,`ssh admin@192.168.1.1`; 若通过WAN口,则需要访问10022端口:`ssh -p10022 admin@x.x.x.x` 。 ### 1.2 网关上的文件系统 为了保证系统稳定可靠,网关上采用的是**只读**文件系统,系统启动时会把固件加载到内存运行,并初始化一些RAMDISK用于存放运行时产生的临时文件等。因此,对于二次开发的应用程序无法直接保存在网关上,我们提供两种选择: 1. 应用开发调试完成后,由我们来集成到固件中,此法适用于用户应用比较纯粹,依赖外部库不多的情形。 2. 增加外部存储(TF卡),在外部存储上运行一个完整的应用环境(标准C库和其它第三方软件库等),然后把用户应用完全部署在外部存储上。这样的好处是用户环境与系统固件完全分开,容易集成第三方软件包,用户程序可以单独升级。如果用户的应用较为复杂,依赖第三方软件包,或者需要本地存储支持的情况。 ### 1.3 网关固件自带的软件资源 * uClibc标准C库 * 常用Linux命令 * libpthread, libiconv, openssl-devel * libcurl, libghttp(可选) ### 1.4 网关硬件资源 #### 串口 * RS232-1,设备名:/dev/ttyS1 * RS232-2,设备名:/dev/ttyS2 * RS485-1,设备名:/dev/ttySC0 * RS485-2,设备名:/dev/ttySC1 #### DIO 可通过命令控制开关量输入输出,命令行如下: ``` Usage: mtk_gpio -d <pin> <in/out> - gpio pin set direction (in=0, out=1) mtk_gpio -r <pin> - gpio pin read value mtk_gpio -w <pin> <value> - gpio pin write value (0/1) mtk_gpio -m <bit> - gpio mode get bit mtk_gpio -s <bit> <value> - gpio mode set bit (0/1) ``` 也可以通过C程序实现,我们可提供接口函数和调用示例。 开关量接口与GPIO引脚对应关系如下表: | FUNC | GPIO | | ------- | ---- | | IN1 | 29 | | IN2 | 26 | | IN3 | 28 | | OUT1 | 25 | | SYS LED | 31 | ## 二、交叉编译用户应用 由于网关采用了MIPS架构的CPU,不同于PC的X86架构,因此需要把用户程序在开发机上交叉编译为MIPS架构的可执行程序才能在网关上运行。 ### MIPS交叉编译工具链使用说明 以下步骤需要在Linux开发机上执行。 1. 下载toolchain-3.4.x.tgz 链接:http://pan.baidu.com/s/1eSIR6mQ 密码:l4x1 2. 解压安装 `tar xzf toolchain-3.4.x.tgz -C /opt` 3. 交叉编译 `/opt/toolchain-3.4.x/bin/mipsel-linux-uclibc-gcc -o hello hello.c` 4. 在网关上运行程序 ```bash # scp user@192.168.1.8:hello /tmp # /tmp/hello ``` ## 三、在外部存储部署用户应用 前面提到,若用户应用相对复杂、体积较大,不太适合集成到固件中时,可以采用在外部存储部署一个独立的运行环境,具体做法如下: ### 3.1 安装并启用外部存储 网关支持TF卡扩展,插入TF卡后,还需要配置一下Entware才能在TF卡上部署运行环境,可通过WEB界面实现: ![entware](https://box.kancloud.cn/c773fa2830e1c11f1ba7fd25136b9a50_937x558.png) ### 3.2 初始化Entware运行环境 以下代码中,以#号开头的表示在Linux命令行输入的命令,其它为命令的输出。 1. 通过SSH登录到网关 2. 格式化TF卡为ext4格式: ```bash # umount /dev/mmcblk0p1 -- 卸载TF卡,如未安装请忽略 # mkfs.ext4 -L SD /dev/mmcblk0p1 -- 格式化 mke2fs 1.42.8 (20-Jun-2013) Filesystem label=SD OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 972944 inodes, 3889280 blocks 194464 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=3984588800 119 block groups 32768 blocks per group, 32768 fragments per group 8176 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done # ``` 3. 初始化Entware(此步需要连接外网) ```bash # mdev_mmc mmcblk0p1 add -- 自动mount TF卡 EXT4-fs (mmcblk0p1): mounted filesystem with ordered data mode. Opts: (null) event signal: User defined signal 1 rc notification: on_hotplug_mass_storage # mount -- 确认SD卡已mount ... /dev/mmcblk0p1 on /media/SD type ext4 (rw,noatime,data=ordered) # cd /media/SD -- 进SD # mkdir opt -- 建opt目录 # opt-mount.sh /dev/mmcblk0p1 /media/SD -- mount opt文件系统 # mount -- 确认/opt已mount ... /dev/mmcblk0p1 on /media/SD type ext4 (rw,noatime,data=ordered) /dev/mmcblk0p1 on /opt type ext4 (rw,noatime,data=ordered) # opt-opkg-upd.sh -- 初始化基本Entware运行环境 Downloading http://pkg.entware.net/binaries/mipsel/Packages.gz Updated list of available packages in /opt/var/opkg-lists/entware-ng Installing ldconfig (1.0.17-1) to root... Downloading http://pkg.entware.net/binaries/mipsel/ldconfig_1.0.17-1_mipselsf.ipk Installing findutils (4.6.0-1) to root... Downloading http://pkg.entware.net/binaries/mipsel/findutils_4.6.0-1_mipselsf.ipk Installing libc (1.0.17-1) to root... Downloading http://pkg.entware.net/binaries/mipsel/libc_1.0.17-1_mipselsf.ipk Installing libgcc (5.4.0-1) to root... Downloading http://pkg.entware.net/binaries/mipsel/libgcc_5.4.0-1_mipselsf.ipk Installing libssp (5.4.0-1) to root... Downloading http://pkg.entware.net/binaries/mipsel/libssp_5.4.0-1_mipselsf.ipk Configuring ldconfig. Configuring libgcc. Configuring libc. Configuring libssp. Configuring findutils. # reboot -- 完成,重启后确认是否能自动mount opt文件系统。 ``` ### 3.3 Entware软件包管理 Entware可以认为是安装于/opt下,独立于网关固件的一套运行环境,包括了基本的libc库、busybox命令集以及简单的软件包管理功能。通过软件包管理工具,用户可以方便地在线安装(已经移植并且交叉编译好的二进制)软件包,常用的开源软件包基本都有,详细列表参见:http://pkg.entware.net/binaries/mipsel/Packages.html. 另外,Entware还有一个完善的buildroot交叉编译环境,在这个buildroot下,不论是移植开源软件包或是交叉编译用户自己的应用,都是非常方便的(我们有单独的buildroot使用说明)。 下面是常用的软件包管理命令: #### 1. 更新软件包列表 ```bash # /opt/bin/opkg update Downloading http://pkg.entware.net/binaries/mipsel/Packages.gz Updated list of available packages in /opt/var/opkg-lists/entware-ng # ``` #### 2. 查找/安装软件包 ```bash # /opt/bin/opkg find "curl*" curl - 7.57.0-1 - A client-side URL transfer utility curlftpfs - 0.9.2-3 - CurlFtpFS is a filesystem for accessing FTP hosts based on FUSE and libcurl. # /opt/bin/opkg install curl Installing curl (7.57.0-1) to root... Downloading http://pkg.entware.net/binaries/mipsel/curl_7.57.0-1_mipselsf.ipk Installing libcurl (7.57.0-1) to root... Downloading http://pkg.entware.net/binaries/mipsel/libcurl_7.57.0-1_mipselsf.ipk Installing libopenssl (1.0.2n-1) to root... Downloading http://pkg.entware.net/binaries/mipsel/libopenssl_1.0.2n-1_mipselsf.ipk Installing zlib (1.2.11-1) to root... Downloading http://pkg.entware.net/binaries/mipsel/zlib_1.2.11-1_mipselsf.ipk Configuring zlib. Configuring libopenssl. Configuring libcurl. Configuring curl. # ```