gec6818平台嵌入式linux开发指导手册_第1页
gec6818平台嵌入式linux开发指导手册_第2页
gec6818平台嵌入式linux开发指导手册_第3页
gec6818平台嵌入式linux开发指导手册_第4页
gec6818平台嵌入式linux开发指导手册_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

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

文档简介

所有,并保留一切权利,非经粤嵌同意(形式),任何单位及个人不得擅自摘录本文分或者全部内容,违者将其。作日版更新内粤............................................................................................................................................目 第1 嵌入式Linux开发环境搭 安装VmwareWorkstation软 新建虚拟计算 安装 安装文本编辑器 安装 安装TFTP服 文件到6818(串口传输&NFS服务 NFS挂 安装交叉编译工具 第2 嵌入式Linux系统开 编译u- 编译内 根文件系 利用现有系统源码制作镜 一步步制作根文件系 第3 嵌入式Linux应用开发示 o 文件 进程间通 多线程通 网络编 第4 Qt介 Qt简 Qt历 Qt5.7for 安 o 移植QtEmbedded 配 编译、安 拷贝QtEmbedded库到 设置环境变 公司地址:广州科学城光谱西路69号TCL文化产业园B Copyright©公司 1嵌入式Linux发环境安装VmwareWorkstation软VMwareWorkstation(中文名“威睿工作站”)是一款功能强大的桌面虚拟计算机软件,提供用户可在单一的桌面上同时运行不同的操作系统,和进行开发、测试、部署新的应用程序的最佳解决方案。VMwareWorkstation可在一部实体机器上模拟完整的网络环境,以及可便于携带的虚拟机器,其更好的灵活性与先进的技术胜过了市面上其他的虚拟计算机软件。在软件版本选择方面,如果您的桌面系统是Windows10,请最好自行寻找VmwareWorkstation12以上的版本。因为之前的版本都对Windows10兼容性不大好,容易出现各种问题,典型的问题就是无法建立桥接网络给虚拟操作系统。因为现在的计算机大多数是64位的了,现在以笔者的Windows操作系统64位Windows7来利用Vmwareorksaton12进行安装示范,其它版本安装过程差别不大。但是建议使用一样的版本,以免出现各种问题而没法自己解决。从网上或在6818配套资料中找到VMware-workstation-full-12.5.2- .exe安装选择安装路径,可以默认安装到系统 盘,也可以点击“更改”指定安装到其它方取消软件启动时检查更新版本接下来就是长时间的解压安装过程了,完了在完成安装之前需要输入正版软件密匙,输入您的密匙即可激活软件。安装完成新建虚拟计算安装完虚拟工作站VMwareWorkstation软件后,打开的窗口是这样的下面开始新建一个虚拟机不用默认配置,选择自定义选项选择“稍后安装操作系统”后,选择Linux类型系统64位Ubuntu给新建的虚拟机起个名称,并选择保存的路径接下来的处理器配置需要根据您实际的情况选择,如果不知道自己的电脑CPU是什么型号和几的,应全部选一个。笔者的电脑CPU是I54590,所以选择4个数。Ubuntu虚拟机的内存量,可以根据自己电脑的实际配置情况,配置大一点或者小一点都没多大问题,但建议至2GB。创建一个新的虚拟磁因为编译Android系统需要的磁盘空间比较大,而且还有其它乱糟糟的文件,建议最大磁盘大小至少100GB,我这里选择200GB。虽然分配了200GB,但是实际上没有占用这么大,200GB。选择保存路径接下来配置ISO镜像点击“浏览”找到Ubuntu14的系统镜像最后点击启动此虚拟机即可开始安装Ubuntu了安装启动虚拟机后,这是就会像真实的装机一样进入光驱引导安装系统进入了Ubuntu的开始安装界面点击继续,进入下一步,配置分区大Androidswap分区,所以默认的点击选中“空闲”,然后点击左下角的“+”号创建交换分区,如下图设置其它参点击确定后,在剩余的空间中添加新分区,作为主分区并挂载在 下分好区的样子如下图,两个分区就可以了完成后点击“现在安装”,“继续”选择时区键盘布局类型下面为Ubuntu设置一个系统用户,并设置开始最后的安装工作,这一步骤大概需要一盏茶的时间出现下面的界面,立即重启重启后,出现下面界面,按回车键即输入登录,下面就是登录进入Ubuntu的桌面了安装VMwareVMwareools是VMwareorksation中自带的一种增强工具,安装后能实现Windows主机与虚拟机之间的文件共享,同时可支持自由拖拽的功能,鼠标也可在虚拟机与主机之前自由移动(不用再按ctr+alt),而且虚拟机屏幕也可实现全屏。VMwareWorkstation软件菜单栏的“虚拟机”→“安装VMwareTools”开始安装VMwaretools。 kitty@kitty-machine:~$ ./vmware- //输入命令后需要用 授予权把图上选中的压缩 到主文件夹。打开终端输入命令解压安装输入“yes”然后一路回车安装即可完成,最后重启Ubuntu让VMwareTools生效是否安装成功,可以体现在Ubuntu是否可以自适应屏幕大小(如果无法自适应屏幕,在VMwareWorkstation菜单栏的查看→自动调整大小→自动适应客户机)和从Windows系统桌面上用鼠标拖曳一个文件是否可以拷贝到Ubuntu中。安装文本编辑器进和增加了很多特性,Vim更符合我们的操作习惯,更加易用。大多数时候,在Ubuntu系统下安装软件,是通过apt-get命令完成的。apt-get是一在保证联网正常的环境下,打开终端后运行以下命令kitty@kitty-machine:~$ apt- 出现硬盘请求提示有输入“y”确认安装输入“y”回车后系统会联网安装Vim,我们稍等片刻即可。具体的Vim命令的常安装进行Linux界面开发和编译Android源码,均需要g++kitty@kitty- apt- 安装TFTP服TFTP(TrivialFileTransferProtocol,简单文件传输协议)是TCP/IP协议族中基于UDP1tftp服务器和tftp客户kitty@kitty- apt- tftpd- tftp- 2、修改配置文kitty@kitty- /etc/default/tftpd- TFTP_OPTIONS="-l-cTFTP_OPTIONS="-l-c-笔者的用户名是kitty,在主文件夹下建立共享文件夹tftp_share,路径自然是kitty@kitty-machine:~$ kitty@kitty- /home/kitty/tftp_share,下kitty@kitty-machine:~$ kitty@kitty- 重启启动服务,让配置生kitty@kitty-machine:~$ tftpd- 3、测试kitty@kitty- kitty@kitty- 在/home/kitty/tftp_share文件夹kitty@kitty- kitty@kitty- 回到主文件夹,并用tftptest文件到主文件 [root@GEC6818/]# [root@GEC6818/]# Ubuntu的IP地 6818 -l要上传的文件名Ubuntu的IP地 安装NFS服TCP/IPNFSNFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像本地文件一样。1、安装软kitty@kitty-machine:~$ apt- nfs-kernel- 修改配置文kitty@kitty-machine:~$ 在末行加入内容保存退出,内容表示任意网络主机均可/home/kitty/nfs_share 2、创建共享文件夹,修改权kitty@kitty-machine:~$kitty@kitty-machine:~$ kitty@kitty- kitty@kitty-machine:~$kitty@kitty-machine:~$ /etc/init.d/nfs-kernel- 4测kitty@kitty-machine:~$ -kitty@kitty-machine:~$ kitty@kitty-machine:~$ -kitty@kitty-machine:~$ kitty@kitty-machine:~$ 6818(&NFS服务SecureCRT功能比较强大,而且用的比较普遍,所以以此为例。当然也可以用简单的超级连连接电脑主机和6818,并把6818上电开机运行Linux系统1、开发工具中找 SecureCRT6.6.1.rar,安 。安装完成打开后是这样2、单File→QuickConnect选按照下图设置,其中COM1是要根据具体情况的,一般来说如果是台式机默认已经有串口的,一般COM1。点击connect后,继续回车,就可以3、现在是要把Windows桌面的test.txt文本到6818,先在6818控制台输入接收令 /]#rx NFS在之前的章节中,我们已经帮Ubuntu安装了NFS服务器,也验证了NFS服务的正运行,下面就对如何实现6818上传、文件进行探讨1设置6818的IP,可以用udhcpc命令自动获取IP或者ifconfig手动设置,下面用ifconfig手动设6818上电Linux系统SecureCRT6818控制台,设置IP地址9[root@GEC6818/]#ifconfigeth0 现在UbuntuIP39,如果不知ifconfig查看eth0网[root@GEC6818[root@GEC681839(39):56data64bytesfrom39:seq=0ttl=64time=1.648ms64bytesfrom39:seq=1ttl=64time=0.864ms64bytesfrom39:seq=2ttl=64time=0.879ms64bytesfrom39:seq=3ttl=64time=0.912ms64bytesfrom39:seq=4ttl=64time=0.819[root@GEC6818/]#mount [root@GEC6818/]#ls 2、[root@GEC6818/]#mount [root@GEC6818/]#ls 安装交叉编译工具▲关于交叉编译在一种平台上编译出能在另一种平台(体系结构不同)上运行的程序在PC平台(X86CPU)上编译出能运行在arm平台上的程序,编译得到的程序X86为了不跟本地编译器,交叉编译器的名字一般都有前缀。例如:arm-linux-gcc需要交叉开发环境(CrossevelopmentEnv的支持是嵌入式应用软件开发时的一个显著特点。交叉编译器只是交叉开发环境的一部分。交叉开发环境是指编译、和调试嵌入交叉编译环境所需工具的集合体搭建编译环境所需软件(binuntials、gccglibc等)的安装载体。交叉编译器,例如arm-linux-交叉汇编器,例如arm-linux-交叉器,例如arm-linux-所依用于处理可执行程序和库的一些基本工具。例 arm-linux-通常,编译机程序、引导程序(bootloader)、内核、文件系统及应用程序,是用不同的工具链的。现在以应用开发用到的工具链arm-linux-gnueab-5.40.axz为例安装它,将这个压缩包拷贝到Ubuntu任意下。解压:exportkitty@kitty:~$ kitty@kitty:~$ Jxvfarm-linux-gnueabi-5.4.0.tar.xz- exportkitty@kitty:~$ kitty@kitty:~$ Jxvfarm-linux-gnueabi-5.4.0.tar.xz- kitty@kitty:~$ 立即生效kitty@kitty:~$ 查看是不是成kitty@kitty:~$arm-linux-kitty@kitty:~$arm-linux- -2嵌入式Linux统开编译u-编译内利用现有系统源码制作镜像首先安装镜像制作工kitty@kitty:~$sudoapt-getinstallandroid-tools-fsutils 在板子配套资料中找到根文件系统源码包rootfs-6818-src.tar.bz2,解压到主文件夹中。kitty@kitty:~$tarjxvfrootfs-6818-src.tar.bz2 生成可烧写的系统镜像rootfs-6818.ext4。kitty@kitty:~$sudomake_ext4fs-l500mrootfs-6818.ext4rootfs-6818- 一步步制作根文件系统1、FHS(FilesystemHierarchyStandard)标准介像Ubuntu、Redhat等Linux版系统在对根文件系统布局上都遵循FHS标准的建议规定,在嵌Linux里面也是同样的。该标准规定了根下各个子的名称及其存放的名存放的内必备的用户命令,例如ls、cp必备的系统管理员命令,例如ifconfig、reboot设备文件,例如mtdblock0、tty1系统配置文件,包括启动文件,例如inittab必要的库,例如C库、内核模普通用户非必备的用户程序,例如find、du非必备的管理员程序,例如chroot、inetd守护程序和工具程序所存放的可变,例如日志文用来提供内核与进程信息的虚拟文件系统,由内核自动生下的内用来提供内核与设备信息的虚拟文件系统,由内核自动生下的内文件系统挂接点,用于临时安装文件临时性的文件,重启后将自动清2、创建基 结 /lib/modules/3.4.39-- /lib/modules/3.4.39--在光盘资料的Linux平台开发工具或资源包里面的busybox-1.25.1.tar.bz2拷贝到如果之前没有安装libncurses5-dev apt- libncurses5- 配置时,我们基于默认配置,另外安装时不要 路径,指定一个安装路径,如下Busybox ---[*]Don’tuse/usrInstallationOptions (/home/kitty/nfs_share/rootfs))BusyBoxinstallationprefixkitty@kitty:~$make PILE=arm-linux- 4、拷贝系统配置文件因为linux的通用配置文件基本都是在/etc 明。我们备份了一份在光盘Linux 资源里面,文件是etc.tar.bz2。只要把该压缩包解压到 下即可5、拷贝动态库因为我们的busybox是用动态编译的,所以就算做最小的根文件系统也要拷贝基本的glibc库,更何况以后的C/C++程序的开发,更需要的库,下面我们做个,把交叉 kitty@kitty:~$ /usr/local/arm/5.4.0/usr/arm-none-linux- 新建一个文件 forfileinforfileinlibclibcryptlibdllibmlibpthreadlibresolvlibutilsudocplib/$file*.so/home/kitty/nfs_share/rootfs/libsudocp-dlib/$file.so.*/home/kitty/nfs_share/rootfs/libsudocp-dlib/ld*.so*sudocp-dusr/lib/libstdc++.so*/home/kitty/nfs_share/rootfs/libsudocp-dlib/libgcc_s*/home/kitty/nfs_share/rootfs/libsudocp-dlib/libnss*.so*sudocp-dlib/librt*执行拷贝 5、打包生成系统镜像经过上面的操作,恭喜你已经完成了最简根文件系统的制作。一般高阶,就是6818内核启NFS挂载这个根文件系统rootfsLinux系统的启动,但是现阶rootfs源码生成可烧写的系统镜像文件。kitty@kitty:~$ - rootfs- 3嵌入式Linux用开发3.1o码文件o.cintint{ return0;}(2)kitty@kitty:~$kitty@kitty:~$arm-linux- - [root@GEC6818 [root@GEC6818 ointmain(intargc,char{intfdt,fds;charbuf[20];intnum=0;{}{return1;}{{return1;}{return1;}}return}编在PC机上使用arm-linux-gcc工具对源文件进行交叉编译kitty@kitty:~/nfs_share$kitty@kitty:~/nfs_share$arm-linux- - 会产生一个新的文件ioinit,文件ioinit内容和/etc/profile #include<unistd.h>#include<unistd.h>#include<errno.h>#include<stdio.h>#include<stdlib.h>#include<string.h>intmain(intargc,char{pid_tpid;charchar* ointr_num=0;{printf("pipeprintf("pipecreateerror\n");return-1;}{{printf("%dnumbersreadfromthepipeis\"%s}}else{printf("parentwrite\"%s\"success!\n",p_wbuf);}}2)kitty@kitty:~/nfs_share$kitty@kitty:~/nfs_share$arm-linux- - [root@GEC6818/mnt]#./pipe_rwparentwrite" oworld!"success!12numbersreadfromthepipe[root@GEC6818/mnt]#./pipe_rwparentwrite" oworld!"success!12numbersreadfromthepipeis oworld!(1)intvar=0;int{intret;perror("Failedtocreatearet=pthread_create(&id2,NULL,(voidperror("Failedtocreateathread1\n");}{{{}perror("Thread1lockfailure\n");{}perror("Thread1unlockfailure\n");}}{int{printf("Thevariableislockedby{{}printf("Thread2gotlock\n");printf("vat=%d\n",var);}}}2)[root@GEC6818在pc机上使用arm-linux-gcc工具对源文件进行交叉编[root@GEC6818kitty@kitty:~/nfs_share$kitty@kitty:~/nfs_share$arm-linux- - -TheThevariableislockedbypthread1Thread1lockfailure:Thread1lockthevariableThread1unlockfailure:Thread2gotlockvat=Thread1lockfailure:Thread1locktheThevariableislockedbypthread1Thevariableislockedbypthread1Thread1unlockfailure:Thread2gotlock网络编1)编写代#include<stdio.h>#include<stdlib.h>#include<errno.h>#include#include<stdio.h>#include<stdlib.h>#include<errno.h>#include#include int {{ } { printf("\n------------GEC6818TCPNetwork ( /*socket连接 -{ } /*设置sockaddr_in /* -{ } /*调用listen函数*/ { } { /*调用accept {perror("Server:Accept");}printf("Server: /*调用recv { } }} { (This {printf("Client:PleaseenterIPoftheserveryouwanttoconnect!\n");}{ }/*socket连接 -{ } /*设置sockaddr_in /*调用connect { } /*发送文件名给服务器端 -{ } }}编在PC的终端上交叉编译以上代码源文件,生成可执行程序。命令如下kitty@kitty:~/nfs_share$kitty@kitty:~/nfs_share$arm-linux- -o 运行服务器将可执行程序拷贝到实验箱中先作为服务器运行,由于实验箱只有一个终端,故使用“&”参数让程序行。命令、参数及行结果如下:[root@GEC6818 [root@GEC6818 [root@GEC6818 ( ) 服务器循环 次,目前处在第一次循环中,阻塞并等待第一个客户端发来的连接请求运行客户端在实验箱的同一个终端,让程序作为客户端再次运行另外,还需要通过参数指定其所要连接的服务器IP地址(本机)以及要发送给服务器的消息“o_Serve 命令、参数及运行结果如下c结果如( "由于客户端与服务器运行在同一终端下,二者所打印的文本输出会出现交错穿插,因此须 每次打印开头的字样区分。以上运行结果,以“Client:”字样开头的输出文本均由客 client:"o_Serve 运行结果中以“Server:”字样开头的输出文本均由服务器打印。通过这些文TCP连接,并成功接收和打印客户端发来消息。随后,服务器进入第二次循环,再次阻塞并等待第二个客户端发来的连接请求。4嵌入式LinuxGUIQtQt用程序,当然也可以开发非图形令行(CommandUserInterface,CUI)应用程序。Qt支持众多的操作系统平台,如通用操作系统Windows、Linux、Unix,智能系统Android、iOS、WindowsPhone,嵌入式系统QNX、VxWorks等等,应用广泛。当然Qt结合特别紧密的,如驱动开发,需要利用操作系统本身的函数库实现之外,其他大部分的应用程序开发都可以用Qt实现的。QtQt1991EirikChambe-EngHaavardNord开发的,他们随后于1994年正式成立奇趣科技公司(Trolltech)。Qt原本是商业的跨平台开发库,在2000年奇趣科技公司为开源社区发布了遵循GPL(GNUGeneralPublicLicense)证的开源版本。在2008年,诺基亚公司收购了奇趣科技公司,并增加了LGPL(GNULesserGeneralPublicLicense)的模式。诺基亚联合英特尔利用Qt开发了全新的智能系统MeeGo,由于,诺基亚被迫放弃了MeeGo,而Qt商业业务也于20113IT服务公Digia。目前Qt5.2版本发布以来,Qt公司都在大力推广移动平台开发和商业应用,增加对Android、iOS等移动系统的开发支持。Qt5.7for安Ubuntu系统中开发Qt程序,是需要X11桌面环境的Qt集成开发环境的。Qt已经为我们打包好了一个工具包,我们只要安装即可获得到Qt的集成开发环境。注意:安装前,请确定Ubuntu已经安装了g++编译器,如果没有,请先安装。从配套资料或从Qt官网上找到安装包qt-opensource-linux-x64-5.7.0.run,拷贝到系统的主文件夹中,并双击文件运行安装o安装完了Qt开发环境后,看看是否可以正常进启动QtCreator后,文件—>新建文件或项目,选择一个工程模版,如下图所示选择后便提示下面窗口,按提示操作,一路中文,无压力QtEmbedded植QtEmbedded库,可以查看下一章节。kitty@kitty:~$sudovim/usr/local/Qt-Embedded-5.7.0-拷贝现成的库Qt-Embedded-5.7.0.tar.xz到Ubuntukitty@kitty:~$sudovim/usr/local/Qt-Embedded-5.7.0-添加内容exportQTDIR=/usr/local/Qt-Embedded-5.7.0/exportQTDIR=/usr/local/Qt-Embedded-5.7.0/exportQMAKEDIR=$QTDIR/binexportexportPATH=$QMAKEDIR/bin:$QTDIR/bin:/usr/local/arm/5.4.0/usr/bin:$PATH#exportQT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins#export kitty@kitty:~$source/usr/local/Qt-Embedded-5.7.0-用source命令让其在当前终端kitty@kitty:~$source/usr/local/Qt-Embedded-5.7.0-看看是否起效下下面利 oworld进行交叉编译,进oworld工程所在 kitty@kitty:~$cd kitty@kitty:~$qmakekitty@kitty:~$makecleankitty@kitty:~$移植QtEmbeddedQtEmbedded是图形化界面开发工具Qt的嵌入式版本,它通过QtAPI与linuxI/O以及ramebuferQt6818平台上运行Qt一是6818平台上具有由QtEmbedded开放源码包经过交叉编译移植后的Qt动态运行库,二是我们自己开发编写的Qt应用程序也经过交叉编译。配kitty@kitty:~$tarJxvfqt-everywhere-opensource-src-kitty@kitty:~$tarJxvfqt-everywhere-opensource-src-kitty@kitty:~$cdqt-everywhere-opensource-src-编辑平台相关的qmake.conf配置kitty@kitty:~/qt-everywhere-opensource-src-kitty@kitty:~/qt-everywhere-opensource-src- qtbase/mkspecs/linux-arm-gnueabi-修改以下红色字体内=+=QMAKE_INCREMENTAL_STYLE=QT_QPA_DEFAULT_PLATFORM= QMAKE_CXXFLAGS_RELEASE -march=armv7-mon/g++-#modificationsto#modificationsto=arm-l

温馨提示

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

评论

0/150

提交评论