玩转 ART-Pi Smart -- webserver 网关
webserver 网关简介
在 ART-Pi Smart SDK 里面提供了一个 gnu-app 示例:webserver 网关,并作为 ART-Pi Smart 的出厂 Demo。 即移植 GNU 软件代码(uhttpd、sqlite)交叉编译成目标系统平台可以运行的库或二进制文件,作为 rt-smart 的一个用户 APP,并在 ART-Pi Smart 开发板上运行。 用户也可以根据 文档下面的章节 “用户 APP(gnu-apps): webserver 网关开发环境搭建” 自行尝试编译此 gnu-app 示例中所有的固件。
快速体验 webserver 网关1. 通过将 USB-TypeC 连接到电脑 USB 给开发板供电,ART-Pi Smart 开发板会通过 u-boot 自动加载 emmc 中的 rt-smart 内核固件文件(/kernel/rtthread.bin)到内存去运行。同时也会自动运行 webserver 用户 APP。
2. 通过路由器和网线(或者通过板载的 rw007 wi-fi 模块),将开发板和测试电脑连接在同一个局域网内。
3.rt-smart 内核跑起来后,打开串口调试助手,通过下面命令先查看一下开发板的 IP 地址。 - # 获取开发板 IP 地址
- msh />ifconfig
- network interface device: e1 (Default)
- MTU: 1500
- MAC: a8 5e 45 91 92 93
- FLAGS: UP LINK_UP INTERNET_UP DHCP_ENABLE ETHARP BROADCAST IGMP
- ip address: 192.168.10.168
- gw address: 192.168.10.1
- net mask : 255.255.255.0
- ipv6 link-local: FE80::AA5E:45FF:FE91:9293 VALID
- ipv6[1] address: 0.0.0.0 INVALID
- ipv6[2] address: 0.0.0.0 INVALID
- dns server #0: 192.168.10.1
- dns server #1: 0.0.0.0
复制代码
4.打开浏览器,输入开发板的 IP 地址,显示 webserver 登录界面。 5.在浏览器上,输入默认的帐号:admin 和密码:admin 即可登录到 Webserver 网关主页面。 6.点击网页右边的菜单,分别可以进行不同的操作:用户管理、LED 配置、系统配置、系统日志等。 首页展示:
CPU、内存、空间的使用情况,默认 5s 刷新一次,可以设置 表格形式展示系统版本、编译日期、gcc 编译器版本以及网络信息等 支持系统时间显示,每隔一定时间与系统同步一次,间隔可设置 支持网络状态监测,与 CPU、内存等的刷新频率一致
用户管理:
表格形式展示系统所有用户 支持修改密码 支持删除用户 支持增加用户
LED控制:
支持对 LED 进行开关操作 支持对 LED 状态实时显示,刷新频率可设置
系统日志:
系统设置:
设置首页的系统信息刷新频率 设置 LED 状态刷新频率 设置时间同步间隔频率
webserver 网关开发环境搭建webserver 网关示例中的用户 APP 源码不是采用 scons 编译方式,而是采用 make 编译方式。故仅适用于 Linux 开发环境。 需要了解 Makefile 的基本语法及编译过程。 环境准备(基于 Linux 环境)安装一些必要的软件环境: - $ sudo apt update
- $ sudo apt install git bzip2 wget patch
- $ sudo apt install gcc
- $ sudo apt install scons
- $ sudo apt install make
- $ sudo apt install libncurses-dev
- $ sudo apt install libpng-dev
- $ sudo apt install libncurses5
复制代码
设置环境变量
- # 进入到 rt-smart 目录
- $ cd rt-smart
- # 设置对应的环境变量(rt-smart 工具链、编译器等)
- $ source smart-env.sh
复制代码
编译 gnu-apps libs 依赖库编译之前,确保 rt-smart/userapps/root/bin/ 目录存在。如果不存在,需要自己新建一下目录。或者在 rt-smart/userapps/ 目录下,打开终端先执行一下 scons 命令就会自己编译 rt-smart/userapps/apps 里面的用户 APP 的同时,会自动生成所需要的目录 rt-smart/userapps/root/bin/ 。 ⚠️如果在 Linux 下打开新的终端,记得重新设置一遍环境变量(rt-smart 工具链、编译器等) - # 进入到 rt-smart/userapps/gnu-apps 目录
- $ cd rt-smart/userapps/gnu-apps
- # 编译 gnu-apps 的库 libs
- $ ./build.sh libs
- # 编译成功后:
- # 1)在 rt-smart/userapps/sdk/include 目录下会安装相应的头文件
- # 2)在 rt-smart/userapps/sdk/lib 目录下会生成编译好的 *.a 库文件
- # 3)会显示下面的 Log
- ========= Copy lib and headers =========
- ========= Freetype building finished. =========
复制代码
编译用户 APP:uhttpd
- # 进入到 rt-smart/userapps/gnu-apps/uhttpd 目录
- $ cd uhttpd
- # 编译 用户 APP:uhttpd
- ./build_uhttpd.sh
- # 编译成功:
- # 1)在 rt-smart/userapps/root/bin 下会生成相应 elf 固件文件:uhttpd.elf
- # 2)会显示下面的 Log
- ========= Copy uhttpd to root/bin =========
- ========= uHttpd building finished. =========
复制代码
编译用户 APP:sqlite
- # 进入到 rt-smart/userapps/gnu-apps/sqlite 目录
- $ cd sqlite
- # 编译 用户 APP:sqlite
- ./build_sqlite.sh
- # 编译成功:
- # 1)在 rt-smart/userapps/root/ 目录下面,会新增加一个 var 文件夹
- # 2)在 rt-smart/userapps/root/bin 下会生成相应 elf 固件文件
- # 3)会显示下面的 Log
- ========= Copy sqlite3.elf and sqlite_test.elf to root/bin =========
- ========= Sqlite building finished. =========
复制代码
拷贝 web 网页文件
- # 进入到 rt-smart/userapps/gnu-apps/art-pi-demo-web 目录
- $ cd art-pi-demo-web
- # 执行下面脚本,会将dist下所有内容(网页文件)拷贝到 rt-smart/userapps/root/var/dist 下
- ./build_web.sh
复制代码
到此为止,webserver 网关所需要的所有固件和网页文件都准备好了。将 rt-smart/userapps/ 目录下面的 root 文件夹拷贝到 SD 卡,然后启动 ART-Pi Smart 开发板,确保 SD 卡挂载到 rt-smart 文件系统的 /sd 目录下,启动 uhttpd 服务,就可以把 webserver 网关跑起来。 ART-Pi Smart 上运行 webserver 网关
1.由于 ART-Pi smart 出厂已经自动运行了 emmc 里面的 webserver (uhttpd.elf 用户 APP)。故如果要用 SD 卡里面的固件和网页文件来运行 webserver, 需要先 Kill 掉 webserver(基于uhttpd)进程(开机时从 emmc 自动运行的用户 APP),然后重新运行此 webserver。 - # 通过 list_process 命令列出当前正在运行的所有进程,可以看 uhttpd 对应的 PID 为 1
- msh />list_process
- PID CMD thread pri status sp stack size max used left tick error
- ---- -------- -------- --- ------- ---------- ---------- ------ ---------- ---
- kernel tshell 20 running 0x000001e4 0x00001000 54% 0x00000006 -09
- kernel sd_mount 30 suspend 0x000000e0 0x00000800 27% 0x0000000f 000
- kernel sys_work 23 suspend 0x00000098 0x00001000 34% 0x0000000a -09
- kernel link_d1 30 suspend 0x000000e0 0x00001000 13% 0x00000002 000
- kernel mmcsd_de 22 suspend 0x000000f8 0x00001000 20% 0x0000000d -09
- kernel tcpip 10 suspend 0x00000144 0x00002000 15% 0x00000013 -09
- kernel etx 12 suspend 0x000000f0 0x00002000 04% 0x0000000a -09
- kernel erx 12 suspend 0x000000f8 0x00002000 10% 0x0000000f -09
- kernel tidle0 31 ready 0x00000078 0x00002000 11% 0x0000000f -09
- kernel timer 4 suspend 0x000000d0 0x00001000 07% 0x00000004 000
- 1 uhttpd.e uhttpd.e 25 suspend 0x00000190 0x00004000 07% 0x000000c7 -09
-
- # 通过 kill 命令, 删除 uhttpd 进程,其中 1 为 uhttpd 进程对应的 PID 号
- msh /> kill 1 -s 9
- # 重新运行此 webserver (基于 uhttpd)
- msh />/sd/root/bin/uhttpd.elf -f -p 80 -h /sd/root/var/dist &
复制代码
2.Webserver 运行起来后的其他操作,请参考上面已经介绍过的章节 “快速体验 webserver 网关” 。 |