(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 远程控制
iTOP-4412 WEB SERVER |
|
保存并退出
在/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 < 2; i++) { if (leds[i] == 1) printf("%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,进行远程控制。
还没有评论,来说两句吧...