物联网基础技术8_第1页
物联网基础技术8_第2页
物联网基础技术8_第3页
物联网基础技术8_第4页
物联网基础技术8_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章

UbuntuLinux应用开发基础Linux开放的源代码效率比较高、成本低廉和高度的可设置性,特别适合嵌入式物联网应用系统。目前,Linux主要发行版本有两大系列:面向服务器的RedHat和以桌面应用为主的Ubuntu,而针对目前物联网终端嵌入式设备多以Ubuntu作为首选开发平台。7.1嵌入式开发的基本命令Linux常用操作命令,针对物联网嵌入式工程师来说必须熟练掌握,并且能通过手册寻求帮助,特别是在无法启动图形界面的情况下,使用命令行就是唯一选择。对普通用户来说,他能操作的目录只有当前用户目录,root用户没有限制,可以操作任意目录和文件。7.1.1Linux常用命令(1)mkdir、mv、touch、rm、find命令(2)rar归档管理7.1.1Linux常用命令(3)cal、date、ps、kill、du、df命令7.1.1Linux常用命令(3)cal、date、ps、kill、du、df命令(4)useradd、passwd、su、sudo、exit、whoami、userdel命令LInux是多用户多任务系统,而Windows是单用户多任务系统。①useradd命令用来建立用户帐号和起始目录,使用权限是超级用户,如果带-m参数,系统将会在home目录下同事创建同名的文件夹,以被该用户存放自己的文件。②passwd命令用来设置或修改使用者的密码。③su命令用来变更为其它使用者的身份,超级用户除外,需要键入该使用者的密码,如果想切换到超级用户root,可使用命令sudo-s实现。④exit命令用于退出目前的shell。⑤sudo指以超级用户的方式执行命令,这里的超级用户指的就是root用户,我们在Linux中有时会遇到permissiondenied的情况,如以ubuntu用户的身份查看/etc/shadow的内容,因为它是只有root用户才能查看的,这个时候就可以使用sudo。⑥whoami命令用于显示自身用户名称。userdel命令用来删除指定用户,以及用户相关的文件。如不加选项则仅删除用户账号,而不删除相关文件。(5)chmod修改文件权限chmod命令来修改文件属性,修改权限有两种方法:①字母法字母u表示该文件的拥有者,g表示与该文件的拥有者属于同一个群体(group)者,o表示其他以外的人,a表示这三者皆是;r表示可读取,w表示可写入,x表示可执行,X表示只有当该文件是个子目录或者该文件已经被设定过为可执行。比如chmodu=rwx,g=r,o=r-xtestqt.out,即可设置testqt.out权限为-rwxr--r-x②数字法chmod可以使用数字来代表各权限,语法为chmodabcfile。其中,a、b、c各为一个数字,分别表示User、Group及Other的权限。设r=4、w=2、x=1,若要rwx属性则4+2+1=7;若要rw-属性则4+2=6;若要r-x属性则4+1=5。比如chmod666testqt.out,即可设置testqt.out权限为-rw-rw-rw-(6)reboot和shutdown命令操作Linux服务器时,肯定会有需要重启系统或者关闭系统等操作。reboot与shutdown命令都可以用来作为关机重启操作。reboot使用方法:直接在权限用户下输入reboot命令就可以看到ThesystemisgoingdownforrebootNOW的提示,目前就重启系统,reboot工作过程差不多跟halt一样,不过它是引发主机重启而halt是关机(7)pwd、clear、ifconfig、ping、apt-get等其他命令针对嵌入式物联网应用系统开发,其他的一些常用命令如下:①pwd命令用于显示工作目录②clear这个命令将会刷新屏幕③ifconfig命令配置和修改IP,并查看网络接口情况ifconfigens33192.168.205.139#修改ens33的IP④ping可以用来测试本机与目标主机是否联通、联通速度如何、稳定性如何。⑤apt-get命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。一般需要root权限执行,所以一般跟着sudo命令,格式比如为sudoapt-getinstallupdate。读者可以不用记住所有命令选项,但要学会查询Linux命令使用用法,如find-help。7.1.2编辑器之神-vim编辑器vim是从vi发展出来的一个基于控制台文本编辑器。在代码补完、编译等方面,功能特别丰富。它有命令、插入及底行等三种模式,在不同模式下有不同的操作功能,一定要时刻注意屏幕最下方的提示,分清当前所在的模式,模式间切换快捷键如图7-8所示。切换模式功能键7.1.3编译器gcc和arm-linux-gcc编译器gcc可以在多种硬体平台上编译出可执行程序,其执行效率与一般编译器相比平均效率要高20%~30%。gcc能将C、C++语言源程序和目标程序编译、连接成可执行文件,如果没有给出可执行文件名,gcc将生成一个名为a.out的文件。在Linux系统中,可执行文件没有统一后缀,系统从文件属性来区分可执行文件和不可执行文件。对于编译源码,会用到大量的gcc选项,以hello.c文件为例,常见的使用编译的参数如下。gcc–ohellohello.c:将hello.c文件编译成hello的可执行文件gcc–chello.c:将hello.c文件生成hello.o文件gcc-Ehello.c:只是激活预处理,不生成文档,需要把它重定向到另外一个文档里gcc–Shello.c:将hello.c文件生成hello.s文件的汇编代码gcc–pipe–ohellohello.c:使用管道代替编译中临时文档gcchello.c–include/root/hello.h:包含某个代码,相当于在代码中使用#include<hello.h>7.1.4Makefilemake命令执行时,需要一个Makefile文件,以告诉命令怎样去编译和链接程序。(1)Makefile里有什么Makefile里主要包含显式规则、隐晦规则、变量定义、文件指示和注释等内容。①显式规则。显式规则说明如何生成一个或多的的目标文件,这是由Makefile的书写者明显指出要生成的文件、文件的依赖文件、生成的命令。②隐晦规则。由于make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写Makefile,这是由make所支持的。③变量的定义。在Makefile中要定义一系列的变量,变量一般都是字符串,这个有点像C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。④文件指示。包括三个部分,一个是在一个Makefile中引用另一个Makefile,就像C语言中的include一样;另一个是指根据某些情况指定Makefile中的有效部分,就像C语言中的预编译#if一样;还有就是定义一个多行的命令。⑤注释。Makefile中只有行注释,和Shell脚本一样,其注释是用“#”字符,就像C/C++中的“//”一样。如果要在Makefile中使用“#”字符,可用反斜框进行转义,如“/#”。最后,还值得一提的是在Makefile中的命令,必须要以Tab键开始。7.2嵌入式Linux应用程序开发在进行应用程序开发前,准备好固化好Linux系统网关平台,还需要保证Ubuntu所在主机与网关平台正常通信。验证方法:交叉网线和交叉串口线连接好主机和网关,在Ubuntu终端上用ifconfigethx192.168.1.xxx命令设置IP地址。确保主机IP和网关IP地址为同一个网段。例如,网关IP地址若为192.168.1.205,主机网卡IP地址可为192.168.1.100。7.2.1文件读写(1)基本任务在Ubuntu嵌入式Linux环境中,编写文件读写及上锁的程序。(2)工作原理标准I/O库以及其他头文件提供了一个到底层I/O系统调用的一个万能接口,这个库并不是标准C的一部分,但这个库却提供了许多复杂的函数用来处理格式化输出以及描述输入,例如fopen()、fread()、fwrite()和fcntl()等函数的使用,同时也会小心的处理设备所要求的缓冲区。当需要打开文件建立访问路径时,会返回一个值,并会作为一个调用其他I/O库函数的参数。这个与低层文件描述符等同的被称之类流,并且作为一个指向结构的指针FILE*来实现。当程序启动时会自动打开在stdio.h中定义标准输入stdin、标准输出stdout、标准错误输出stderr三个文件流,也与底层文件描述符0、1和2相对应。7.2.2进程控制(1)基本任务在Ubuntu嵌入式Linux环境中,编写多进程及进程间通信的程序。(2)工作原理进程作为构成系统的基本细胞,不仅是系统内部独立运行的实体,而且是独立竞争资源的基本实体。在Linux系统中,用户创建一个进程的唯一方法就是使用系统调用fork。内核为完成系统调用fork要进行几步操作。7.2.3

线程控制(1)基本任务在Ubuntu嵌入式Linux环境中,编写多线程程序。(2)工作原理使用多线程的理由之一是和进程相比,它是一种非常节俭的多任务操作方式。我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种“昂贵”的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。7.2.4

计时器控制(1)基本任务在Ubuntu嵌入式Linux环境中,编写计时器程序。(2)工作原理在程序当中常要输出系统当前时间,比如使用date命令,这时可使用两个函数。#include<sys/time.h>time_ttime(time_t*tloc);char*ctime(consttime_t*clock);函数time返回从1970年1月1日0点以来的秒数,存储在time_t结构之中,主要目的是给第二个函数使用,将秒数转化为字符串,第二个函数返回类型是固定的,一个可能值为ThuDec714:58:592000,这个字符串的长度是固定的为26。有时要计算程序执行的时间,比如要对算法进行时间分析,可能用到以下这些结构体和函数。7.2.5

TCP和UDP通信(1)基本任务在Ubuntu嵌入式Linux环境中,编写TCP和UDP通信过程以及实现方法的程序。(2)TCP工作原理双方建立连接时,发送方给接收方TCP数据报,然后等待对方的确认TCP数据报,如果没有就重新发,如果有就发送下一个数据报。接收方等待发送方的数据报,如果得到数据报并检验无误,就发送ACK确认数据报,并等待下一个TCP数据报的到来。直到接收到FIN发送完成数据报。为了建立一个TCP连接,系统可能会建立一个新的进程来进行数据的传送。7.2.6

SQLite数据库移植(1)基本任务在Ubuntu嵌入式Linux环境中,编写SQLite数据库应用程序。(2)工作原理SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统。它的设计目标是嵌入式的,目前已经在很多嵌入式产品中使用。SQLite占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了并且处理速度快。它能够支持Windows/Linux/Unix等主流的操作系统。7.3

嵌入式Linux驱动程序开发在进行嵌入式Linux驱动程序开发前,准备好固化好Linux系统网关,还需要保证Ubuntu所在主机与网关正常通信。Linux设备驱动与底层硬件直接打交道,按照硬件设备的具体工作方式,读写设备的寄存器,完成设备的轮询、中断处理、DMA通信,进行物理内存向虚拟内存的映射等,最终让通信设备能收发数据,让显示设备能显示文字和画面,让存储设备能记录文件和数据。本节驱动程序开发主要内容包括Linux简单字符驱动、LED控制、串口通信、LCD显示、触摸屏控制、SD卡读写、GPS通信、3G通信等。7.3.1简单字符驱动(1)基本任务在Ubuntu嵌入式Linux环境下的简单字符驱动程序的编写、编译和运行。(2)工作原理Linux下设备驱动分为字符设备、块设备、网络设备三类驱动。其中,字符设备是指设备发送和接收数据以字符的形式进行。设备驱动程序被组织为一组完成不同任务的函数的集合,通过这些函数使得Windows的设备操作犹如文件一般。Linux字符设备驱动的结构图7.3.2基于GPIO的LED驱动(1)基本任务在Ubuntu嵌入式Linux环境下的LED驱动程序的编写、编译和运行。(2)工作原理Linux下的设备驱动程序即是对具体硬件进行操作的程序,是操作系统内核和机器硬件之间的接口。A8网关开发板的LED部分硬件原理图如图7-25所示。LED电路7.3.3

按键驱动设计(1)基本任务在Ubuntu嵌入式Linux环境下的按键驱动程序的编写、编译和运行。(2)工作原理按键同样使用A8网关的GPIO接口,但按键本身需要外部的输入,按键硬件驱动原理图如图7.26所示。在图的1×6矩阵按键SW4~SW9电路中使用EINT2、EINT3、EINT4、EINT8、EINT9和EINT11等6个输入。按键电路按键入口对应于A8网关核心板的GPHO接口,当其中一个SW按键被按下,通过查询方式就可以检测到是哪一个接口有输入信号,从而控制相应的操作。7.3.4串口通信设计(1)基本任务在Ubuntu嵌入式Linux环境下的串口(UART)通信程序的编写、编译和运行。(2)工作原理A8网关UART单元提供了三个独立的异步串行通信接口,如图7-27所示,皆可工作于中断和DMA模式。使用系统时钟最高波特率达230.4Kbps,如果使用外部设备的时钟,可以达到更高的速率。每一个串口单元包含一个16字节的FIFO,用于数据的接收和发送。支持可编程波特率、红外发送/接收、一个或两个停止位、5~8bit数据宽度和奇偶校验。串口电路7.3.5

LCD显示驱动(1)基本任务在Ubuntu嵌入式Linux环境下的LCD显示驱动程序的编写、编译和运行。(2)工作原理要使一块LCD正常显示文字或图像,不仅需要其驱动器,而且还需要相应的控制器。在通常情况下,生产厂商把驱动器会以COF/COG的形式与LCD玻璃基板制作在一起,而控制器则是由外部的电路来实现,现在很多的MCU内部都集成LCD控制器,如S5PV210等。通过LCD控制器就可以产生其驱动器所需要的控制信号来控制STN/TFT屏了。控制器可以通过编程支持不同LCD屏的要求,例如行和列像素数,数据总线宽度,接口时序和刷新频率等。控制器主要作用是将定位在系统存储器中的显示缓冲区中的图像数据传送到外部驱动器,并产生必要的控制信号,例如RGB_VSYNC、RGB_HSYNC、RGB_VCLK等。7.3.6触摸屏采集驱动(1)基本任务在Ubuntu嵌入式Linux环境下的触摸屏采集驱动程序的编写、编译和运行。(2)工作原理电容式触摸屏是利用人体电流感应进行工作。电容式触摸屏的感应屏是一块四层复合玻璃屏,玻璃屏的表面和夹层各涂有一层导电层,最外层是一薄层矽土玻璃保护层。当用手指触摸在感应屏上的时候,人体的电场让手指和和触摸屏表面形成一个耦合电容,对于高频电流来说,电容是直接导体,于是手指从接触点吸走一个很小的电流。这个电流分从触摸屏的四角上的电极中流出,并且流经这四个电极的电流与手指到四角的距离成正比,控制器通过对这四个电流比例的精确计算,得出触摸点的位置。Touch外部接口从图中可以看到,既可以工作的SPI的接口方式,也可以工作在I2C的接口方式,不管工作在SPI,还是工作在I2C,从硬件的接口设计上来说,控制口都是需要要接的。7.3.7

SD卡存储驱动(1)基本任务在Ubuntu嵌入式Linux环境下的SD卡存储驱动程序的编写、编译和运行。(2)工作原理SD卡(SecureDigitalCard)是一种为满足安全性、容量、性能和使用环境等需求而设计的一种新型存储器件,卡允许在SD模式和SPI模式工作,接口电路如图7-29所示。SD卡接口电路7.3.8

CMOS摄像头驱动(1)基本任务在Ubuntu嵌入式Li

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论