LINUX嵌入式实验报告(DOC)_第1页
LINUX嵌入式实验报告(DOC)_第2页
LINUX嵌入式实验报告(DOC)_第3页
LINUX嵌入式实验报告(DOC)_第4页
LINUX嵌入式实验报告(DOC)_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、LINUX嵌入式实验报告- - TOC o 1-5 h z 目录 1.实验一:嵌入式Linux 开发流程2.实验二:嵌入式Linux 开发环境搭建6.实验三:串行端口程序设计 1.1. HYPERLINK l bookmark4 o Current Document 实验四: A/D D/A 接口实验1.6 HYPERLINK l bookmark6 o Current Document 实验五:图形界面应用程序设计1.8实验六:内核与根文件系统实验2.3 HYPERLINK l bookmark8 o Current Document 实验七:驱动程序设计实验 2.9.实验八:无线通信实验3

2、.3.Linux 开发流程实验目的了解嵌入式Linux 的开发流程,会进行简单的开发。实验内容进行 Linux 的开发流程的简单介绍。实验步骤嵌入式 Linux 开发,根据应用需求的不同有不同的配置开发方法,但是一般都要经过以下过程:建立开发环境,操作系统一般使用REDHAT-LINUX, 版本 7到 9 都可以,选择定制安装或全部安装,通过网络下载相应的 GCC 交叉编译器进行安装(比如arm-linux-gcc 、arm-uclibc-gcc) ,或者安装产品厂家提供的交叉编译器。使用 Linux 的 Red Linux 9 的开发界面截图如下:配置开发主机,配置 MINICOM, 一般参

3、数为波特率115200,数据位 8 位, 停止位 1 , 无奇偶校验,软硬件控制流设为无。在 WINDOWS 下的超级终端的配置也是这样,MINICOM软件的作用是作为调试嵌入式开发板信息输出的监视器和键盘输入的工具;配置网络,只要是配置NFS 网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。系统配置截图如下:建立引导装载程序BOOTLOADER, 从网络上下载一些公开源代码 的 BOOTLOADER, 如 -BOOT 、 BLOB 、 VIVI 、 LILO 、ARM-BOOT 、 RED-BOOT 等, 根据自己具体芯片进行移植修改。有些芯片没有内置引导装载程序,比如三星的A

4、RM7 、 ARM9 系列芯片,这样就需要编写烧写开发板上的flash 的烧写程序,网络上有免费下载的WINDOWS 下通过 JTAG 并口简易仿真器烧写 ARM 外围 flash 芯片程序。ViVi 运行的截图如下:开发应用程序,可以下载到根文件系统中,也可以放在YAFFS、JFFS2文件系统中,有的应用程序不使用根文件系统,而是直接将应用程序和内核设计在一起,这有点类似于UCOS-II 的方式。烧写内核,根文件系统,应用程序,发布产品。Linux 开发环境搭建实验目的了解并且掌握Linux 的开发环境搭建方法。实验内容进行嵌入式Linux 开发环境搭建实验步骤1. REDHAT LINUX

5、 9.0 的安装PC 上安装 RedHat LINUX9.0 ,选择 Custom 定制安装,在选择软件Package时最好2.7G,如果选择最后一项:everything,即完全安装,将安装3张光盘的全部软件,需要磁盘空间大约5G。因此建议提前为REDHAT LINUX 的安装项,5 15G 的空间,具体视用户的磁盘空间大小来确定,在安装完Redhat 后还要安装Linux 的编译器和开发库以及ARM-Linux 的所有源代码,这些包安装后的总共需要空间大800M 。Linux 如下;2. 开发工具软件的安装安装环境搭建如上。3. 开发环境配置配置网络,包括配置IP 地址、 NFS 服务、防

6、火墙。网络配置主要是要安装好以太网卡,对于一般常见的RTL8139 网卡, READHA T9.0 可以自动识别并自动安装好,完全不要用户参与,因此建议使用该网卡。然后配置宿主机IP 为 21 。如果是在有多台计算机使用的局域网环境使用此开发设备,IP 地址可以根据具体情况设置,如图所示:双击设备eth0 的蓝色区域,进入以太网设置界面对于 REDHA T9.0, 它默认的是打开了防火墙,IP 访问它全部拒绝,即无法用NFS mount 它, 许多网络功能都将无Minicom 的配置如下:四、实验总结通过本次实验我学会了关于Linux 配置的一些基本的应用,感觉收获特别大,这就算入一、实验目的

7、了解在 Linux 环境下串行程序的基本方法。掌握终端的主要属性及设置方法,熟悉终端I/O 函数的使用。学习使用多线程完成串口的收发处理。二、实验内容读懂程序源代码,学习终端I/O 函数的使用方法,学习将多线程编程应用到串口的接受和发送程序设计中。三、预备知识有 C 语言的基础掌握在 Linux 下常用编辑器的使用。掌握Makefile 的编写和使用。掌握Linux 下的程序编译与交叉编译过程。四、实验原理异步串行I/O 方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各不同位可以分时使用同一传输通道,因此串行I/O 可以减少信号连接线,最后用一对线即可进行。接收方对于

8、同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。为了恢复发送的信息,双方必须协调工作。在微型计算机中大量使用异步串行I/O 方式, 双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。上图给出异步串行通信中一个字符的传送格式。开始前, 线路处于空闲状态,送出连续“ 1 ”。传送开始时首先发一个“ 0” 作为起始位,然后出现在通信线上的是字符的二进制编码数据。每个字符的数据位长可以约定为5 位、 6 位、 7 位或 8 位,一般采用ASCII 编码。

9、后面是奇偶校验位,根据约定,用奇偶检验位将所传字符中“1 ”的位数凑成奇数个数或偶数个数。也可以也可以约定不要奇偶校验位,这样就取消奇偶校验位。最后是表示停止位的“1”信号,这个停止位可以约定持续1 位、 1.5 位或 2位的时间宽度。至此一个字符传送完毕,线路又进入空闲,持续为 “ 1”。 经过一段随机的时间后,下一个字符开始传送才有发出起始位。每一个数据位的宽度等于传送波特率的倒数。微机异步串行通信中,常用的波特率为50.95,110,150,300,600,1200,2400,4800,9600 等。接收方按约定的格式接收数据,并进行检查,可以查出以下三种错误:奇偶错:在约定奇偶检查的情

10、况下,接收到的字符奇偶状态和约定不符。帧格式错:一个字符从起始位到停止位的总尾数不对。溢出错:若先接收的字符尚未被微机读取,后面的字符又传送过来,则产生溢出错。每一种错误都会给出相应的出错信息,提示用户处理。一般串口调试都使用空的MODEM 连接电缆,其连接方式如下:五、程序分析本实验的代码如下:#include#include#include#include#include#include#define BAUDRATE B115200#define COM1 “ /dev/ttyS0 ”#define COM2 “ /dev/ttyS1 ”define ENDMINITERM 27 /*E

11、SC to quit miniterm*/define FAL SE 0define TRUE 1volatile int STOP=FALSE;volatile int fd;void child_handler(int s)print( “ stop!n ” );STOP=TRUE;/*/Void* keyboard(void* date) Int c;For(;)c=getchar();if(c=ENDMINITERM)STOP=TURE;Break;Return NULL;/*/ /*modem input handle*/Void* receive(void* date) Int c

12、;Printf( “ read modemn ” );While(STOP=FALSE)Read(fd,&c,1);/*com port*/Write(1,&c,1);/*stdout*/Printf( “ exit form reading modemn ” );Return NULL;/*/Void* send(void* date) Int = 0 ;Printf( “ send daten ” );While(STOP=FALSE)/*modem input handler*/ C+;C%=255;Write(fd,&c,1);/*stdout*/Usleep(100000);Retu

13、rn NULL;/*/Int main (int argc,char*argv) Struct termios oldtio,newtio,oldstdio,newstdio;Struct sigaction sa;Int ok;Pthread_t th_a;th_b,th_c;Void *retval*If(argc1)Fd=open(COM2,O_RDWR);ElseFd=open(COM1,O_RDWR);/|O_NOCTTY|O_NONBLOCK);If(fd0)Error(COM1);Exit(-1);Tcgetattr(0,&oldstdio);Tcgetattr(fd,&oldt

14、io); /*save current modem settings*/Tcgetattr(fd,&newstdio); /*get working stdio*/Newtio.c_cflag=BAUDRATE|CRTSCTS|CS8|CLOCAL|CREAD; /*ctrol flag*/ Newtio.c_iflag=IGNPAR; /*input flag*/Newtio.c_oflag=0; /*output flag*/Newtio.c_lfag=0;Newtio.c_ccVMIN=1;Newtio.c_ccVTIME=0;/*now clean the modem line and

15、 activate the settings for modem*/Tcflush(fd,TCIFLUSH);Tcsetattr(fd,TCSANOW,&newtio); /*set attrib*/ Sa.sa_handler=child_handler;Sa.sa_flags=0;Sigaction(SIGCHLD,&sa,NULL);Pthread_creat(&th_a,NULL,keyboard,0);Pthread_creat(&th_b,NULL,receive,0);Pthread_creat(&th_c,NULL,send,0);Pthread_join(th_a,&retv

16、al);Pthread_join(th_b,&retval);Pthread_join(th_c,&retval);Tcsetattr(fd,TCSANOW,&roldtio); /*restore old modem setings*/Tcsetattr(0,TCSANOW,&oldstdio); /*restore old tty setings*/Close(fd);Exit(0);六、实验步骤阅读理解源码进入 expbasic03_tty 目录,使用vi 编辑器或其他编辑器阅读理解源代码。编译应用程序下载调试切换到 minicom 终端窗口,使用NFS mount 开发主机的/arm2

17、410s 到 /host 目录。进入expbasic03_tty 目录,运行term ,观察运行结果的正确性。rootzxt root#minicom/mnt/yaffs mount -t nfs -o nolock 6:/arm2410s /host/mnt/ysffscd/host/exp/basic/03-tty/host/exp/basic/03_tty.termRead modemSend date123456789:;?ABCDEFGHIGHLMNOPQRSTUVWX由于内核已经将串口1 作为终端控制台,所以可以看到term 发出的数据,却无法看到开发主机发来的数据,可以使用另外一

18、台主机连接串口2 进行收发测试。Ctrl+c 可使程序强行退出。注意:如果在执行./term 时出现下面的错误,可以通过我们前文提到的方法建立一个连接来解决。/dev/ttySO:No such file or directory解决方法:/mnt/yaffscd /dev/dev ln -sf /dev/tts/0 ttySO (注意首字母是1,不是数字1)A/D D/A 接口实验AD 部分一 实验目的了解在 LINUX 环境下对S3C2410 芯片的 8 通道 10 位 A/D 的操作与控制二 实验内容学习 AD 接口远离,了解实现AD 系统对于系统的软件和硬件要求,阅读ARM 芯片文件,

19、 掌握 ARM 的 AD 相关寄存器的功能,熟悉 ARM 系统硬件的AD 相关接口uliyong 外部模拟信号编程实现ARM 循环采集全部前4 路通道,并且在超级终端上显示。三 实验步骤.进入/arm2410s/exp/basic/04_ad 目录,使用vi 编辑器或者其他编辑器悦读理解源代码。.变异应用程序运行 make 产生 ad可执行文件rootzxt/#cd/arm2410s/exp/basic/04_ad/rootzxt04_ad#makearmv41-unknown-linus-gcc-c-o main.o main.carmv41-unknown-linux-gcc-o./bin

20、/ad main.o-lpthreadarmv41-unknown-linux-gcc-o ad main.o-lpthreadrootzxt04_ad#1sAd hardware.h main.oMakefile.bak s3c2410-adc.hBin main.cMakefile readme.cxt src下载调试换到 minicom 终端窗口,使用NFSmount 开发主机的/arm2410s到 /host 目录rootzxtroot#minicom/mnt/yaffsmount-tnfs-o nolock 6:/arm2410s/host/mnt/yaffscd/host/esp/

21、basic/04_ad/host/exp/basic/04_ad./adPress Enter key exit!a0=0.0032a1=3.2968a2=3.2968我们可以通过调节开发板上的三个黄色的电位器,来看a0,a1,a2,的变化DA 部分一 实验目的学习DA 转换原理掌握MAX504DA 转换芯片的使用方法掌握不带有DA 的 CPU 扩展 DA 功能的主要方法了解DA 驱动程序加入内核的方法二 实验内容学生DA 接口原理,了解实现DA 系统对于系统的软件和硬件的要求三 实验步骤阅读理解源码进入 /arm2410s/exp/basic/05_da 目录,使用vi 编辑器或者其他编辑器

22、阅读理解源代码. 编译应用程序运行 make 产生 da 可执行文件da_mainrootzxt/#cd/arm2410s/exp/basic/05_ad/rootzxt04_ad#makearmv41-unknown-linus-gcc-c-o main.o main.carmv41-unknown-linux-gcc da_main.o-o da_mainrootzxt05_da#1sda_main da_main.c da_main.o doc driversMakefile s3c44b0-spi.h.下载调试切换到 minicom 终端窗口,使用NFS mount 开发主机的/arm

23、2410s到 /host目录然后进入/host/exp/05_da/drivers 目录,用insmod exio.o 命令插入DA 驱动,并且用1smod 命令查看是否已经插入/mnt/yaffscd/host/esp/basic/05_ad/host/exp/basic/05_adcd drivers/host/exp/basic/05_ad 、 driversinsmod exio.oUsing exio.o/host/exp/basic/05_ad/drivers1smodModule Sive Used bu Not taintedExio 23840(unused)I2c-tops

24、2 141040(unused)进入 /host/exp/basic/05_da 目录,运行./da_main 观察运行结果的正确性,在输入 ./da_main 后会出现下面的提示信息/host/exp/basic/05_da./da_mainError parameterInput as:./ad_main da_id numda_id:select between 0 and 1num:range0.04.096这是由于我们没有制定参数造成的,他的格式为./da_mainda 的 id 号 数字 , 我们可以通过选择 0 或 1 来决定输出到开发板上的哪个DA 接口,同时还需要在0.04.

25、096V 之间来选择一个输出电压,下面的例子是用了开发板上的DA0 且输出 1V 的电压,我们可以使用万用表对其进行测量。/host/exp/basic/05_ad./da_main0 1CurrentVoltage is 1.000000v四实验总结通过本次实验我了解到一些关于DA AD 的相关知识。实验五:图形界面应用程序设计一、实验目的了解在 Linux 下安装 Qt以及 Qt/Embedded 的基本步骤;学会在 Qt/E 平台下使用Virtual framebuffer 显示程序结果。二、实验内容 在 Linnux 下编译和使用Qt/E 平台;在 Qt/E 平台下编译和运行一个程序使

26、用Virtual framebuffer 显示运行结果。三、实验步骤该在 Trolltech 公司的网站上可以下载该公司所提供的Qt/Embedded 的免费版本,在安装产品光盘以后,本次实验目录下已有要下载的文件,在/arm2410s/gui/Qt/src 下。在做实验钱吧本次实验用到的三个文件拷贝到/root/2410sQt 目录下。rootBC root#cd/root/rootBC root#mkdir2410sQtrootBC root#cd/arm2410sQt/gui/Qt/srcrootBC src#cp-arftmake-1.13.tar.gz qt-embedded-2.3

27、.10-free.tar.gzQt-x11-2.3.2tar.gz/root/24110sQt安装编译器arm-linux-gcc-3.4.1:rootBC src #cd/arm2410s/gui/Qt/toolsrootBC tools#tar xjvfarm-linux-gcc-3.4.1.tar.bz2-C./rootBC tools#vi/root/.bash profile/ 打 开 文 件 , 将 该 文 件 中 的 PATH 变 亮 改 为PATH=$PATH:$HOME/bin:/arm2410s/gui/Qt/tools/usr/local/arm/3.4.1/bin/,

28、存盘后退出。rootBC tools#source/root/.bash profile如果要正确安装的话,在任意路径下输入ar 后按Tab 键即可列出编译器文件。Qt/Embedded 平台的搭建需要以下几步:1、安装 Tmakecd/2410Qt tar-xzftmake-1.13.tar.gzexportTMAKEDIR=$PWD/tmake-1.132、安装Qt2.3.2cd/2410sQt tar-xzftqt-2.3.2.tar.gzexportTMAKEDIR=$PWD/qt-2.3.23、安装Qt/Embeddedcd/2410sQt tar-xzftqt-2.3.10-fre

29、e.tar.gzexportTMAKEDIR=$PWD/qt-2.3.10环境变量的设置是非常重要的,它关系到能否正确的安装及编译这些安装包,下面介绍一下这些环境变亮:TMAKEDIR: 只想用于编译Qt/Embedded 的 Tmake 工具QT2DIR: :指向qt-2.3.2 的文件夹QTEDIR: :指向qt-2.3.10 的文件夹第二步,编译Qt/Embedded1.Build Qt2.3.2cd$QT2DIRexport TMAKEPATH=4TMAKEDIR/lib/linux-g+exportQTDIR=$QT2DIRexport PATH=$QTDIR/bin:$PATHex

30、portLD_LIBbin/RARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH/configure-no-xft/ 出 现 选项时都要输入yesmakecp-artbin/uic$QTEDIR/bin/./configure 是对 Qt 进行配置,它包括很多选项,例如可以通过添加“-no-opengl”等,如果想要进一步了解可以通过键入。/configure help 来获得更多的帮助信息。编译完成后需要将生成的/bin/uic 复制到¥QTEDIR 下创建的目录bin,因为在随后的编译 Qt/Embedded 的时候会用到这个工具。Build Qvfbexport T

31、MAKEPATH=$TMAKEDIR/lib/linux-g+export QTDIR=$QT2DIRexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PA TH=$QTDIR/lib:$ LD_LIBRARY_PATHcd $QTESIR/tools/qvfb/root/2410s/tmake-1.13/bin/tmake-o Makefile makemv qvfb $QTEDIR/bin/这一步 build qvfb 并建立了从Qt/Embedded2.3.10 到 Qt/Embedded2.3.2 的静态的链接。其中qvfb 工具用来生成Vir

32、tual framebuffer, 这是一个非常有用的工具,它可以模拟在开发板上的显示情况,如果在Virtual framebuffer 中运行没有问题的话,可以直接通过交叉编译在开发板上运行。Build Qt/Embeddedcd $QTEDIRexport TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g+export QTDIR=$QTEDIRexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PA TH=$QTDIR/lib:$ LD_LIBRARY_PATH ./CONFIGURE-NO-XFT-QVFB-DEPT

33、HS4.8,16,32YESmake 在配置 ./configure 中 -qvfb 用来支持Virtual framebuffer-depths4,8,16,32 支持 4 位, 8位, 16 位, 32 位,的显示深度,此外还可以添加如-syestem-jpeg 和 -gif 来提供对jpeg和 gif 的支持。配置系统同时还支持对特定平台系统选项的添加,但一般来讲,凡是支持 framebuffer 的 linux 系统都可以使用“linux-generic-g+ ”平台。详细的配置信息可以通过运行./configure help 命令来查看。第四步,查看运行结果,如果上面各步都能够成功的

34、编译通过,下面就可以通过运行Qt/Embedded 自带的 demo 来查看结果。在 Virtual framebuffer 上运行 ;export QTDIR=$QTEDIRexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PA TH=$QTDIR/lib:$ LD_LIBRARY_PATHcd $QTESIR/examples/launcher/qvfb-width640-height 480&sleep 10./launcher-qws运行结果如下:将上面的步骤完成后,沃恩就已经建立好了在本机上开发Qt 应用程序的环境,下面我们通过编写一个“he

35、llo embedded”的程序来了解Qt 程序设计。rootBCqt-2.3.10#cd/root/2410sQt/rootBC2410sQt#mkdir exprootBC2410sQt#cd exprootBC exp#vi hello.cpp使用 VI 编写文件hello.cpp,程序代码如下:/hello.cpp#include#includeInt main(int argc,char*argv)QApplication app(argc,argv);QLabel*hello=new QLabei( “hello qt/embedded”,0);App.setMainWidget(

36、hello);Hello-show();Return app.exec();现在开始逐行讲解一下每一句的意思,中我了这些以后可以帮助我们更加了解QT 的程序设计。第 1 行和第二行包含了两个头文件,这两个头文件中包含qapplication 和 qlabel 类的定义。第 5 行创建了一个qapplication 对象,用于管理整个程序的资源,它需要两个参数,因为qt本身需要一些明林行的参数。第 6 行创建了一个用来显示hello qt/embedded! 的部件。在 QT 中, 都是一个可视化的用户接口,按钮,菜单,滚动条都是部件的实例。部件可以包含其他部件,例如,一个应用程序窗口通常是一个

37、包含QMenuBar,QToolBar,QStatusBar 和其他的部件。在 QLable 含糊中的参数0 表示,这是一个窗口而不是嵌入到其他窗口中的部件。第 7 行设置 hello 部件为程序的主部件,当用户关闭主部件后,应用程序将会被关闭。如果没有主部件的话,即使用户关闭了程序也会在后他继续运行。第 8 行使 hello 部件可视,一百年来说部件被创建后都是被隐藏的,因此可以显示在前根据需要来定制部件,这样的好处是可以避免部件创建所造成的闪烁。第 9 行把程序的控制权交还给 Qt,这时候程序就进入就绪模式,可视随时被用户行为激活,例如点击鼠标,敲击键盘等。下面我们哟啊让我们的程勋运行起来

38、,首先要让它能够在Virtual framebuffer 中显示出来,然后再通过交叉编译在开发板上运行。要在本机的Virtual framebuffer 中显示结果,下面几个步骤是必须的:生成工程文件(.pro)每一个qt 程序都对应一个工程文件,因为tmake 工具要借此工程生成相应makefile 文件。生成工程文件使用progen 工具,他的位置在$tmakedir/bin 下使用 progen 生成工程文件的方法如下:$TMAKEDIR/bin/ 生成的这个 工程文件是可以被修饰的,可以编辑里面的头文件,源文件等内容。生成 makefile 文件QT 提供生成makefile 文件的工

39、具tmake, 这极大地方便了应用程序的开发,节省了大量的时间,而且还可根据不同平台的需要生成适合于不同平台的makefile 文件。在使用 tmake 工具前,必须查看相应的环境便令是否正确,由于我们要编译在本机上运行的 QT 程序,所以指定的编译器应为“linux-x86-g+ ”,在命令行中输入下面的命令来检查环境变量是否正确:echo$TMAKEPATH 查看返回的结果的结尾字符是否是“ /qws/linux-x86-g+ ” ,如果不是的话,需要在命令行中重新设置TMAKEPA TH export TMAKEPATH=/tmake 的安装路径 (如 $TMAKEDIR ) /lib/

40、qws/linux-x86-g+ 此外还要使QTDIR 指向 QT/EMBEDDED的安装路径,如: export QTDIR=$QTEDIR 或者直接指定路径export QTDIR= /qt-2.3.10完成了上面的环境变量的设置,并用echo 命令检查无误以后,就可以以使用tmake 工具来生生我们需要的makefile 文件,在命令行中如下命令:$TMAKEDIR/bin/tmake-0Makefile 完成上面的步骤以后就可以在当前的目录中生成一个makefile 文件,关于makefigure文件的功能和结构这里就不在做过多的介绍了,可以参考前面的张杰来了解makefile 。最后

41、在命令行中输入“make”命令就可以对整个程序惊醒编译连接了。最后生成一个二进制的可执行文件hello。用Virtual framebuffer 显示效果如下:我们可以通过对QLabel*hello QLabel( “ Hello Qt/Embedded! ” ,0)这句话进行修改使我们的QLabel程 序 显 示 起 来 更 为 美 观 , 修 改 如 下 : QLabel*hello ( “ Hello ” ”Qt/Embedded! ” ,0) ;修改后显示效果如图所示:通过本次实验我学会GUI 的基本设计,收获颇多。了解Linux 的内核与根文件的概念,学会他们的烧写。结合实验指导书进

42、行内核与根文件系统的烧写。烧写Linux 内核程序。首先安装驱动程序,需要进行相关驱动的安装,点击添加硬件,如图所示:选择下一步,截图如下:添加 Giveio点击下一步安装安装好了截图如图所示:好了之后,需要烧写VIVI使用 CMD 打开烧写程序在此后出现的三次要求输入参数,第一次是让选择Flash,,选0,然后回车如图所示:第二次是选择jtag 对 flash 的两种功能,也选0,然后回车,如图所示:第三次是让选择起始地址,选0,然后回车,等待大约3-5 分钟的烧写时间,如图所示:VIVI 烧写完毕后选择参数2,退出烧写。如图所示:至此内核烧写完毕四烧写根文件系统在 vivi 状态下,输入烧

43、写根文件的命令为:tftp flash root root.cramfs.如图所示:至此根文件系统烧写完毕!四 . 实验总结通过本次的实验我学会了Linux 内核的烧写和根文件系统的烧写,感觉 linux 学起来很难,以后会继续努力。实验七:驱动程序设计实验一实验目的学习在 LINUX 下进行驱动设计的原理;掌握使用模块方式进行驱动开发调试的过程。二实验内容在 PC机上编写简单的虚拟硬件驱动程序并进行调试,实验驱动的各个接口函数的实现,分析并理解驱动与应用程序的交互过程。三实验步骤Linux 中的驱动设计是嵌入式Linux 开发中十分重要的部分,他要求开发者不仅要熟悉Linux 的内核机制、驱

44、动程序与用户级应用程序的接口关系、考虑系统中对设备的并发操作等等,而且还要非常熟悉所开发硬件的工作原理。这对驱动开发者提出了比较高的要求,这个实验主要是给大家进入驱动设计提供一个简单入门的实例,并不需要提供太多与硬件相关的内容,这部分应该是通过仔细阅读芯片厂家提供的资料来解决。驱动程序的作用是应用程序与硬件之间的一个中间软件层,驱动程序应该为应用程序展现硬件的所有功能,不应该强加其他的约束,对于硬件使用的权限和限制应该由应用程序层控制。但是有时驱动程序的设计是跟所开发的项目相关的,这时就可能在驱动层加入一些与应用相关的设计考虑,主要是因为在驱动层的效率比应用层高,同时为了项目的需要可能只强化或

45、优化硬件的某个功能,而弱化或关闭其他的一些功能;到底需要展现硬件的那些功能全都由开发者根据需要而定。 驱动程序有时会被多个进程同时使用,这时我们要考虑如何处理并发的问题,就需要调用一些内核的函数使用互斥量和锁等机制。驱动程序主要需要考虑下面三个方面:提供尽量多的选项给用户,提高驱动程序的速度和效率,尽量使驱动程序简单,使之易于维护。Linux 的驱动开发调试有两种方法,一种是直接编译到内核,再运行新的内核来测试;二是编译为模块的形式,单独加载运行调试。第一种方法效率低,但在某些场合是唯一的方法。模块方式调试效率很高,它使用insmod工具将编译的模块直接插入内核,如果出现故障,可以使用rmmo

46、d 从内核中卸载模块。不需要重新启动内核,这使驱动调试效率大大提高。我们的实验在PC机和 UP-NETARM2410-S 上都可以运行,编译时使用不同的编译器就可以了。.阅读和理解源代码进入/arm2410s/exp/drivers/demo,使用vi 编辑器或其他编辑器阅读理解源代码。.编译驱动模块及测试程序上面介绍了在Makefile 中有两种编译方法,可以在本机上使用gcc也可以使用交叉编译器进行编译。.测试驱动程序如果使用gcc编译的话,需要通过下面的命令来建立设备节点,如果使用交叉编译器的话,不需要建立设备节点。#mknod/dev/demo c 2540首先要插入驱动模块demo.

47、o,然后可以用lsmod命令来查看模块是否已经被插入,在不使用该模块的时候还可以用rmmod 命令来将模块卸载。rootzxt demo#insmod demo.oWarning:loading demo.o will taint the kernel:no licenseSee HYPERLINK /lkml/%23export-tainted /lkml/#export-tainted for information about tainted modulesModule demo loaded,with warnings下面使用测试程序来进行测试,按照上面步骤成功后会出现下面的结果:ro

48、otzxt demo#./test demoWrite 32 bytes data to /dev/demo0:0 1 2 31:4 5 6 72:8 9 10 113:12 13 14 154:16 17 18 195:20 21 22 236:24 25 26 277:28 29 30 31Read 32 bytes data from /dev/demo 0:31 30 29 281:27 26 25 242: 23 22 21 113: 12 13 14 154: 16 17 18 195: 20 10 9 86: 7 6 5 47: 3 2 1 0如果模块没有成功插入的话,会出现下面

49、的情况:rootzxt demo#./test demo#DEMO device open fail#在驱动模块成功插入后,会在/dev下面建立一个叫做demo的设备文件,我们也可以使用cat命令来直接调用read函数,来测试读过程。rootzxt demo# cat/dev/demoDevice open success!一实验目的掌握GPS通讯原理学习NMEA0183 ASCII 接口协议格式学习Linux 下对GPS通讯信息采发集的编程方法二实验内容学习GPS通讯原理,阅读GPS模块的产品说明,了解模块的电气指标、串行接口连接方式、NMEA 语句格式。通过软件来设置GPS模块的波特率、输

50、出语句和初始化经纬度等内容。编程实现对GPS通讯信息的采集方法,将接收到的数据进行语义的分析,并在LCD 上显示当前的地理位置信息。学习 Linux GPS 数据的解析过程。GPS( Global Positioning System全球定位系统)是美国从本世纪70 年代开始研制,历时20 年,耗资200 亿美元,具有在海、陆、空进行全方位实时三维导航与定位能力的新一代卫星导航与定位系统。GPS的主要优点包括:( 1)全球、全天候工作:能为用户提供连续,实时的三维位置,三维速度和精密时间。不受天气的影响。( 2)定位精度高:单机定位精度优于10 米, 采用差分定位,精度可达厘米级和毫米级。(

51、3)功能多,应用广:目前已广泛的应用于大地测量、工程测量、航空摄影测量、运载工具导航和管制、地壳运动监测、工程变形监测、资源勘察、地球动力学等学科领域。GPS由三个独立的部分组成:空间部分:21 颗工作卫星,3 颗备用卫星。地面支撑系统:1 个主控站,3 个注入站,5 个监测站。用户设备部分:接收GPS卫星发射信号,以获得必要的导航和定位信息, 经数据处理,完成导航和定位工作。GPS接收机硬件一般由主机、天线和电源组成。GPS定位原理:GPS定位的基本原理是根据高速运动的卫星瞬间位置作为已知的起算数据,采用空间距离后方交会的方法,确定待测点的位置。 如图所示,假设 t 时刻在地面待测点上安置GPS接收机,可以测定 GPS信号到达接收机的时间, 再加上接收机所接收到的卫星星历等其它数据可以确定以下四个方程式:上述四个方程式中待测点坐标x、y、 z和Vt0为未知参数,其中

温馨提示

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

评论

0/150

提交评论