基于linux无线点菜系统毕业论文内容摘要:

格式的文件。 2)— 二进制 bin 文件,纯粹的 Uboot 二进制执行代码,不保存 ELF格式和调试信息,这个文件用于烧录到用户开发板中。 3)— Motorola SRecord 格式,可以通过串行口下载到开发板中。 第四步 :下载 Bootloader 并启动 就是本系统需要的 bootloader 文件,通过 JTAG 将它烧写到 flash的零地址,然后重新启动,以下是我们从 mini中看到的信息,说明 Bootloader己经运行了。 移植嵌入式 Linux 操作系统 随着微处理器的发展,价格低廉、结构小巧。 它和外设连接提供了稳定可靠的硬件架构,那么限制嵌入式手持设备发展的瓶颈就突出表现在软件方面。 尽管开发环境的搭建 9 从二十世纪八十年代末开始,陆续出现了一些手持嵌入式操作系统,比较著名的有 Plam os, winCE, packet pc 和 window mobile 等,但这些操 作系统都是商业化产品,其高昂的价格使许多制作低端产品的小公司望而却步,而且其源代码的封闭性大太限制了开发者的积极性。 同时对上层应用开发者而言,嵌入式手持设备需要的是一套高度简练、界面友善、质量可靠、应用广泛、易开发、多任务,并且价格低廉的操作系统,除此以外还可能要求许多高级的功能,如图形用户界面和网络支持等,同时,其他一些功能较弱的操作系统比如 uC/OS II 等又比较难达到用户的要求。 嵌入式 Linux 操作系统的出现,为开发者提供了一个合适的选择,它以低廉的价格、功能强大又易于移植而被广泛采用。 本文从高性价 比出发,选择了嵌入式 Linux 操作系统。 配置和编译 Linux 内核 Linux 内核主要由 5 个子系统组成 :进程调度、内存管理、虚拟文件系统、网络接口、进程间通信。 一般在 Linux 系统中的 /usr/src/Linux*. *. *(*. *.*代表内核版本,如 )目录下就是内核源代码。 /arch 子目录包含了所有硬件结构特定的内核代码。 如 i386, alpha 和 arm。 /drivers 子目录包含了内核中所有的设备驱动程序。 如 char 和 block。 /fs 子目录包含了所有的文件系统的代码。 如 cramfs 和 ext3。 /init 子目录包含了内核的初始化代码。 /ipc 子目录包含了进程间通信代码。 /kernel 子目录包含内核管理的核心代码,与平台相关的一部分放在arch/*/kernel 目录下。 / 子目录包含了和网络有关的代码,实现了各种常见的网络协议。 一般在每个目录下都有一个 depend 文件和一个 Makefile 文件。 这两个文件都是编译时需要使用的辅助文件。 其中, Makefile 文件中指出了编译时需要用到的编译器,它也是移植内核过程中不可缺少的。 实验箱上自带的 Linux 系统内核是 Linux ,我们要对它进行重新配置和编译,目的是使其成为本系统专用内核,去除一些用不到的功能项,使内核进一步变小,适应嵌入式系统的要求,降低对存储器大小的要求,从而降低成本。 从 MagicARM2410 配套的软件包中得到 Linux 源代码压缩包,执行 tarxf Linux 命令,内核被解压到 Linux 文件夹下。 然后就可以进行内核配置工作了。 制作根文件系统 根文件系统为 1inux 提供了 init 程序、命令、设备文 件节点和运行时的库文件等。 内核在没有正确的根文件系统的情况下运行会出现 panic 错误信息而终止。 淮安信息职业技术学院毕业设计论文 10 Linux 可以使用多种文件系统作为根文件系统,在开发过程中一般使用 ramdisk作为根文件系统。 下面介绍基于 BusyBox 的 ramdisk 制作过程。 BusyBox 被人们形象的称为嵌入式 1inux 中的“瑞士军刀”,它将许多常用的Unix 命令和工具集中到一个可执行文件中,通过不同的符号连接来确定到底要执行哪个操作。 采用单一执行文件的方式最大限度地共享了程序代码,减少了占用空间,这个特点使其非常合适嵌入式系统。 BusyBox 用得比较多的版本是 ,可以从 下载源码压缩包。 解压后进入 BusyBox 根目录中,运行 make menuconfig 打开它的配置界面。 在 Build Options 菜单中填写本文交叉编译器的路径 /usr/local/arm/,在 Installation Options 菜单中选择安装目录 ./install。 配置完成后用 make 命令对其编译,成功编译后的可执行文件和各个命令的连接都存放在当前目录中的 install目录里。 下面来制作根文 件系统所需要的其它文件。 首先要建立一个文件 ,该文件需要指定块大小以及块数,里面的数据都是 0。 生成一个大小为 4M 的命令为 : dd if= /dev/zero of= bs=lk count=4096 接着,将该文件格式化为 ext2 类型的文件系统 : mke2fs 然后将这个文件挂载至当前目录的 rootfs 中 : mount rootfs/o loop 挂载之后,对目录 rootfs 的操作就相当于对 的操作了。 可以根据一般 Linux 系统的目录结构和设备节点创建根文件系统,例如根目录下的几个文件夹 bin、 dev、 etc、 lib、 usr、 proc 等。 本文把创建根文件系统的目录结构和设备节点的操作写到一个名为 的脚本文件中,方便重复执行。 创建了根文件系统的目录结构后,我们还需要往该文件系统中复制初始化脚本文件、 BusyBox、运行时库文件以及开发过程中所产生的大量文件。 复制文件后还需要卸载 : amount 压缩 ramdisk: gzip 从第一行可以看到,系统初始化会执行 rcS 脚本文件,可以把一些配置或者系统服务的命令编辑到这个文件中,让系统启动时自动执行。 点菜终点应用软件设计 11 第四章 点菜终端应用软件设计 图形用户界面一直是计算机软件系统的重要组成部分,在具有人机界面的嵌入式系统中也如此。 嵌入式系统对图形界面基本要求包括轻型、占用资源少、高性能、高可靠性、可配置等。 Qt/Embedded 是一个专门为嵌入式系统设计图形用户界面的工具包,它满足嵌入式系统开发要求。 此章介绍了本课题建立Qt/Embedded 开发环境和 使用 Qt/Embedded 进行点菜终端应用程序开发的过程。 Qt/Embedded 的介绍 Qt/Embedded 是挪威 Trolltech 公司的一个标志性产品,是一个专门为嵌入式系统设计图形用户界面的工具包。 它支持 Linux、 Windows 等多种操作系统平台,而且,它是模块化和可裁剪的,开发者使用它可以达到嵌入式系统小而快的要求。 通过裁剪, Qt/Embedded 的共享库文件最小只有 600KB 左右,很好地满足嵌入式的条件。 使用 Qt/Embedded,开发者可以 :  当移植 Qt/Embedded 程序到不同 平台时,只需要重新配置重新编译,不需要修改代码。  随意设置程序界面的外观。  方便地为程序连接数据库。  使程序本地化。  将程序与 java 集成。 使用 Qt/Embedded 编程时需要熟悉 Qt 的一个核心机制 — 信号 /槽 ( signal/slot)机制。 信号和槽是一种高级接口,应用于对象之间的通信,它独立于标准 C/C++的语言,因此要正确处理信号 /槽,必须借助一个称为 moc(MetaObject Compiler)的 Qt 工具,它根据定义有信号与槽的头文件生成所需要的附加代码。 信号和槽都是声明在以 h 为后缀的头文件的类 定义中。 关键字 signals 指出进入了信号声明区,随后即可以声明自己的信号。 信号声明其实就是一个函数声明,只是它的返回值类型都是 void,它不需要函数体。 例如下面定义了三个信号Signals: void mySignal()。 void mySignal(int x)。 void mySignal(int x,int y)。 定义的信号是用于发射出去的,否则信号一无是处。 开发者需要在一定的条件下把自己定义的信号发送出去,发射信号的关键字是 emit。 槽可以跟多个信号连接在一起,当这些跟槽连接的信号被发射时, 这个槽就被调用。 只有信号与槽连接起来才能发挥信号槽机制的优势,用于连接的函数是connect,它的定义如下 : Bool Qobject:connect(const Qobject *sender,const char *signal,const 淮安信息职业技术学院毕业设计论文 12 Qobject*receiver,const char *member) 这个函数有四个参数,第一个是发送信号的对象的指针,第二个是要连接的信号,第三个是接收信号的对象指针,第四个是要连接的槽。 其中,信号和槽参数的书写有规定的格式,当指定信号时必须使用宏 SIGNAL(),指定槽时需要SLOT()宏。 下面是一个连接的例子 : connect(sender,SIGNAL(mySignal(int)),receiver,SLOT(mySlot(int)))。 connect 函数还能把信号与信号连接起来,这样做在函数中的第一个信号被发射的时候将引起第二个信号的发射。 使用 Qt/Embedded 编写图形程序的时候,接触得最多的类可能就是 QWidget了,一个小部件如按钮、编辑框等都可以是一个 QWidget,一整个大型复杂的图形界面也可以是一个 QWidget,它的使用范围非常广泛。 Qt/Embedded 还有强大的内存管理功能,在编程的时候可以指定一个对象的父对象,当父对象被删除时子对象将自动被删除,它们所占用的内存空间将被回收,减少了手工回收的麻烦。 Qt/Embedded 与数据库的连接 Qt 中与 SQL 相关的类可以让 Qt 应用程序完美地与数据库结合,它的 SQL模块分成三层,从上到下依次是用户接口层,该层提供浏览和编辑数据库中数据的控件,如 QdataTable。 SQLAPI 层,提供访问数据库的类,如 QsqlDatabase。 驱动层,是连接具体数据库与 Qt 的 SQL 类的桥梁,该 层包含有三个类: QSqlResult, QsqlDriver 和 QsqlDriverFactoryInterface。 Qt/Embedded 的 SQL 模块可以编译到 Qt 的库文件中,也可以作为一个插件单独编译出来,这取决于配置的命令,使用 qtsqlmysql配置选项把 SQL 代码编译到 文件中;使用 pluginsqlmysql配置选项把 SQL 有关的代码独立编译成一个 共享文件,名字叫 ,位于 Qt/Embedded 此路径下的plugins/sqldrivers 目录中。 Qt/Embedded 在使用数据库的数据之前必须创建并打开一个数据库连接。 Qt/Embedded 的 SQL 模块中,用到许多数据库提供的函数接口,因此,在Qt 库文件生成过程中,需要 MySQL 客户端的库文件用于链接。 MySQL 客户端 客户端的 SQL 编程 本文需要连接的是 MySQL 数据库,连接一个数据库分为三个步骤,首先传递“ QMYSQL3”字符串参数给 QSqlDatabase:addDatabase()创建应用程序与数据库服务器的连接;第二依次调用 setDatabaseName ( mysql ) , setUserName ( root ) ,setPassword(“” )和 setHostName ( )来初始化连接信息;最后,调用 open()打开数据库的连接。 具体可以通过以下一段程序来实现: bool createConnection() 点菜终点应用软件设计 13 { QsqlDatabase *db= QsqlDatabase:addDatabase(QMYSQL3)。 ( )。 (mysql)。 (); if (!dbopen()) { ().showMessage()。 return false。 } } 打开数据库连接之后,就可对数据库进行各种各样的操作了。 系统的执行流程如图 41 所示: 图 41 系统执行流程图 开始 初始化图形界面 初始化数据连接 等待用户事件 有用户事件。 响应用户事件 执行 SQL 例程 更新数据显示 结束。 结束 否 无 数据 数据库服务器 是 淮安信息职业技术学院毕业设计论文 14 客户端的设 计 客户端程序运行在手持设备上,点菜的所有功能都通过客户端程序来完成。 用户界面是基于 Qt/Embedded 实现的,客户端与数据库服务器交互部分的代码被封装在 QdEmbedded 的 SQL 模块中,这个模块中所使用到的与 MySQL 有关的函数则保存在 库文件中。 图形设计 本文采用 Qt Designer 设计用户图形界面,先用 progen 工具生成工程文件。 这个工程文件并不能直接使用,还需要为该工程添。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。