| 玩转 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 配置、系统配置、系统日志等。 webserver 网关开发环境搭建首页展示: 
 CPU、内存、空间的使用情况,默认 5s 刷新一次,可以设置表格形式展示系统版本、编译日期、gcc 编译器版本以及网络信息等支持系统时间显示,每隔一定时间与系统同步一次,间隔可设置支持网络状态监测,与 CPU、内存等的刷新频率一致 
用户管理: 
 表格形式展示系统所有用户支持修改密码支持删除用户支持增加用户 
LED控制: 
 支持对 LED 进行开关操作支持对 LED 状态实时显示,刷新频率可设置 
系统日志: 
系统设置: 
 设置首页的系统信息刷新频率设置 LED 状态刷新频率设置时间同步间隔频率 
 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 网关” 。 |