行业知识
基于ITop-4412的点灯实验Web & QT
(1)设计LED用户控制界面程序,能够控制开发板上灯的点亮和熄灭。
1、我们能看到,内核是默认将led设备编译进内核的,如图。
所以我们直接使用内核的leds字符设备。
2、打开Qt编写应用程序,首先我们添加两个按钮,如图。
3、这里我们使用最简单的添加槽函数的方式,右键,点击转到槽,如图。
这里我们选择点击事件,当点击这个控件的时候会调用对应的槽函数。
4、点击OK后就会转到mainwindow.cpp里,这里多了两个空的函数,在这里编写点击事件产生的动作,
#include "mainwindow.h"#include "ui_mainwindow.h"#include #include #include #include #include #include #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); fb = open("/dev/leds", 0); led1_flag = 0; led2_flag = 0; connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(on_pushButton_clicked())); connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(on_pushButton_2_clicked()));}MainWindow::~MainWindow() { delete ui;}void MainWindow::on_pushButton_clicked(){ led1_flag ^= 1; if (led1_flag) { ioctl(fb, 1, 0); } else { ioctl(fb, 0, 0); }}void MainWindow::on_pushButton_2_clicked(){ led2_flag ^= 1; if (led2_flag) { ioctl(fb, 1, 1); } else { ioctl(fb, 0, 1); }} 5、编写完成后,编译生成可运行文件。
6、使用file XX,查看下是否成功。
7、成功后将文件NFS挂在到开发板。
8、运行程序,查看效果。
通过这次实验,增加了我对Qt的代码编写的熟悉程度,同时也锻炼了我的动手能力。
(2)移植嵌入式WEB服务器,实现灯的远程控制。
配置Web服务器
下载boa文件,解压进入src目录,进行编译
编译完成后,编辑Makefile文件,如下图所示:
之后进行make编译,如果出现报错,如下图所示,修改方式如文件《iTop4412搭建Web服务器.pdf》
编译结束之后如下图所示,存在可执行文件boa
此时查看文件boa的大小,是相对较大的,然后进行文件瘦身,输入:arm-none-linux-gnueabi-stripboa
瘦身之后查看文件大侠如下图所示:
之后通过挂在NFS将生辰大哥boa文件拷贝到开发板的bin目录下:
然后在开发板的/etc目录下创建boa文件,在根目录下创建www文件夹,然后在创建的/www文件下创建文件夹cgi-bin目录
然后将Ubuntu下的boa的配置文件boa.conf通过NFS共享到开发板的/etc/boa目录下
将Ubuntu的/etc下的mime.types文件拷贝到开发板的/etc目录下
进入/etc/boa目录下的boa.conf文件,对其进行修改,如下图所示,找到“Groupnogroup”这一行,修改为“Grouproot”
找到“#ServerNamewww.your.org.here”这一行,修改为“ServerNamewww.your.org.here
“ScriptAlias/cgi-bin//usr/lib/cgi-bin/”这一行,修改为“ScriptAlias/cgi-bin//www/cgi-bin/”,
保存并退出,
然后进行之前创建的/www目录。新建文件vi index.html
文件内容如下:
led 远程控制 body { background-image: url("https://www.52desk.com/bizhi/c332784.html"); background-size: cover; background-repeat: no-repeat; text-align: center; } .ziti { font-size: 32px; } .juzhong { text-align: center; } .hsz { text-align: center; } .hsz td { color: green; font-size: 18px; } .hsz { background-color: #FCC; } .juzhong table { text-align: center; } .juzhong table tr {} #h1 { background-color: #0FC; } #h2 { background-color: #FF9; } .h3 { background-color: #0CF; } .ys1 { font-size: 24px; } .STYLE1 { font-size: 36px } |
iTOP-4412 WEB SERVER | ||||||
| ||||||
|
|
function turnOffAll() { document.getElementById("led1").checked = false; document.getElementById("led2").checked = false; }
保存并退出
在/bin下运行boa服务:
在本地浏览器输入开发板ip地址进行访问如下图所示:
进入开发板的/www/cgi-bin目录,新建文件myled.c,内容如下:
#include #include int main() { char *data; int leds[2] = {0, 0}; long m, n; int exit = 0, i, fd; printf("Content-Type:text/html;charset=gb2312\n\n"); printf("\n"); printf("\n"); printf("iTOP-4412 "); printf("iTOP-4412
"); data = getenv("QUERY_STRING"); printf("receive data:%s
", data); while (*data != '\0') { if (*data == '=') switch (*(data + 1)) { case '1': leds[0] = 1; break; case '2': leds[1] = 1; break; default: exit = 1; break; } if (exit == 1) break; data++; } fd = open("/dev/leds", 0); for (i = 0; i %d\t", i + 1); ioctl(fd, leds[i], i); } printf("\n"); printf("\n"); return 0;} 然后使用命令:arm-none-linux-gnueabi-gcc -o myled.cgi myled.c -static进行编译,生成可执行文件:
然后再开启服务,本地访问:输入169.254.62.230,进行远程控制。