LINUX嵌入式实验报告.docx
- 文档编号:20647988
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:40
- 大小:2.03MB
LINUX嵌入式实验报告.docx
《LINUX嵌入式实验报告.docx》由会员分享,可在线阅读,更多相关《LINUX嵌入式实验报告.docx(40页珍藏版)》请在冰豆网上搜索。
LINUX嵌入式实验报告
LINUX嵌入式实验报告
实验一:
嵌入式Linux开发流程
一.实验目的
了解嵌入式Linux的开发流程,会进行简单的开发。
二.实验内容
进行Linux的开发流程的简单介绍。
三.实验步骤
嵌入式Linux开发,根据应用需求的不同有不同的配置开发方法,但是一般都要经过以下过程:
建立开发环境,操作系统一般使用REDHAT-LINUX,版本7到9都可以,选择定制安装或全部安装,通过网络下载相应的GCC交叉编译器进行安装(比如arm-linux-gcc、arm-uclibc-gcc),或者安装产品厂家提供的交叉编译器。
使用Linux的RedLinux9的开发界面截图如下:
配置开发主机,配置MINICOM,一般参数为波特率115200,数据位8位,停止位1,无奇偶校验,软硬件控制流设为无。
在WINDOWS下的超级终端的配置也是这样,MINICOM软件的作用是作为调试嵌入式开发板信息输出的监视器和键盘输入的工具;配置网络,只要是配置NFS网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。
系统配置截图如下:
建立引导装载程序BOOTLOADER,从网络上下载一些公开源代码的BOOTLOADER,如-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根据自己具体芯片进行移植修改。
有些芯片没有内置引导装载程序,比如三星的ARM7、ARM9系列芯片,这样就需要编写烧写开发板上的flash的烧写程序,网络上有免费下载的WINDOWS下通过JTAG并口简易仿真器烧写ARM外围flash芯片程序。
ViVi运行的截图如下:
开发应用程序,可以下载到根文件系统中,也可以放在YAFFS、JFFS2文件系统中,有的应用程序不使用根文件系统,而是直接将应用程序和内核设计在一起,这有点类似于UCOS-II的方式。
烧写内核,根文件系统,应用程序,发布产品。
实验二:
嵌入式Linux开发环境搭建
一、实验目的
了解并且掌握Linux的开发环境搭建方法。
二、实验内容
进行嵌入式Linux开发环境搭建
三、实验步骤
1.REDHATLINUX9.0的安装
在一台PC上安装RedHatLINUX9.0,选择Custom定制安装,在选择软件Package时最好将所有包都安装,需要空间约2.7G,如果选择最后一项:
everything,即完全安装,将安装3张光盘的全部软件,需要磁盘空间大约5G。
因此建议提前为REDHATLINUX的安装项,留大约5—15G的空间,具体视用户的磁盘空间大小来确定,在安装完Redhat后还要安装Linux的编译器和开发库以与ARM-Linux的所有源代码,这些包安装后的总共需要空间大约为800M。
安装如下:
安装好的Linux如下;
2.开发工具软件的安装
安装环境搭建如上。
3.开发环境配置
配置网络,包括配置IP地址、NFS服务、防火墙。
网络配置主要是要安装好以太网卡,对于一般常见的RTL8139网卡,READHAT9.0可以自动识别并自动安装好,完全不要用户参与,因此建议使用该网卡。
然后配置宿主机IP为192.168.0.121。
如果是在有多台计算机使用的局域网环境使用此开发设备,IP地址可以根据具体情况设置,如图所示:
双击设备eth0的蓝色区域,进入以太网设置界面
对于REDHAT9.0,它默认的是打开了防火墙,因此对于外来的IP访问它全部拒绝,这样其它网络设备根本无法访问它,即无法用NFSmount它,许多网络功能都将无法使用,因此网络安装完毕后,应立即关闭防火墙。
Minicom的配置如下:
四、实验总结
通过本次实验我学会了关于Linux配置的一些基本的应用,感觉收获特别大,这就算入门了。
实验三:
串行端口程序设计
一、实验目的
了解在Linux环境下串行程序的基本方法。
掌握终端的主要属性与设置方法,熟悉终端I/O函数的使用。
学习使用多线程完成串口的收发处理。
二、实验内容
读懂程序源代码,学习终端I/O函数的使用方法,学习将多线程编程应用到串口的接受和发送程序设计中。
三、预备知识
有C语言的基础
掌握在Linux下常用编辑器的使用。
掌握Makefile的编写和使用。
掌握Linux下的程序编译与交叉编译过程。
四、实验原理
异步串行I/O方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。
数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连接线,最后用一对线即可进行。
接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。
为了恢复发送的信息,双方必须协调工作。
在微型计算机中大量使用异步串行I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。
但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。
上图给出异步串行通信中一个字符的传送格式。
开始前,线路处于空闲状态,送出连续“1”。
传送开始时首先发一个“0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。
每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。
后面是奇偶校验位,根据约定,用奇偶检验位将所传字符中“1”的位数凑成奇数个数或偶数个数。
也可以也可以约定不要奇偶校验位,这样就取消奇偶校验位。
最后是表示停止位的“1”信号,这个停止位可以约定持续1位、1.5位或2位的时间宽度。
至此一个字符传送完毕,线路又进入空闲,持续为“1”。
经过一段随机的时间后,下一个字符开始传送才有发出起始位。
每一个数据位的宽度等于传送波特率的倒数。
微机异步串行通信中,常用的波特率为50.95,110,150,300,600,1200,2400,4800,9600等。
接收方按约定的格式接收数据,并进行检查,可以查出以下三种错误:
奇偶错:
在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。
帧格式错:
一个字符从起始位到停止位的总尾数不对。
溢出错:
若先接收的字符尚未被微机读取,后面的字符又传送过来,则产生溢出错。
每一种错误都会给出相应的出错信息,提示用户处理。
一般串口调试都使用空的MODEM连接电缆,其连接方式如下:
五、程序分析
本实验的代码如下:
#include
#include
#include
#include
#include
#include
#defineBAUDRATEB115200
#defineCOM1“/dev/ttyS0”
#defineCOM2“/dev/ttyS1”
#defineENDMINITERM27/*ESCtoquitminiterm*/
#defineFALSE0
#defineTRUE1
volatileintSTOP=FALSE;
volatileintfd;
voidchild_handler(ints)
{
print(“stop!
!
!
\n”);
STOP=TRUE;
}
/*__________________________________________*/
Void*keyboard(void*date)
{
Intc;
For(;;){
c=getchar();
if(c=ENDMINITERM){
STOP=TURE;
Break;
}
}
ReturnNULL;
}
/*____________________________________________*/
/*modeminputhandle*/
Void*receive(void*date)
{
Intc;
Printf(“readmodem\n”);
While(STOP==FALSE)
{
Read(fd,&c,1);/*comport*/
Write(1,&c,1);/*stdout*/
}
Printf(“exitformreadingmodem\n”);
ReturnNULL;
}
/*__________________________________________________*/
Void*send(void*date)
{
Int=’0’;
Printf(“senddate\n”);
While(STOP==FALSE)/*modeminputhandler*/
{
C++;
C%=255;
Write(fd,&c,1);/*stdout*/
Usleep(100000);
}
ReturnNULL;}
/*_______________________________________________________*/
Intmain(intargc,char**argv)
{
Structtermiosoldtio,newtio,oldstdio,newstdio;
Structsigactionsa;
Intok;
Pthread_tth_a;th_b,th_c;
Void*retval*
If(argc>1)
Fd=open(COM2,O_RDWR);
Else
Fd=open(COM1,O_RDWR);//|O_NOCTTY|O_NONBLOCK);
If(fd<0){
Error(COM1);
Exit(-1);
}
Tcgetattr(0,&oldstdio);
Tcgetattr(fd,&oldtio);/*savecurrentmodemsettings*/
Tcgetattr(fd,&newstdio);/*getworkingstdio*/
Newtio.c_cflag=BAUDRATE|CRTSCTS|CS8|CLOCAL|CREAD;/*ctrolflag*/
Newtio.c_iflag=IGNPAR;/*inputflag*/
Newtio.c_oflag=0;/*outputflag*/
Newtio.c_lfag=0;
Newtio.c_cc[VMIN]=1;
Newtio.c_cc[VTIME]=0;
/*nowcleanthemodemlineandactivatethesettingsformodem*/
Tcflush(fd,TCIFLUSH);
Tcsetattr(fd,TCSANOW,&newtio);/*setattrib*/
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,&retval);
Pthread_join(th_b,&retval);
Pthread_join(th_c,&retval);
Tcsetattr(fd,TCSANOW,&roldtio);/*restoreoldmodemsetings*/
Tcsetattr(0,TCSANOW,&oldstdio);/*restoreoldttysetings*/
Close(fd);
Exit(0);
}
六、实验步骤
1.阅读理解源码
进入exp\basic\03_tty目录,使用vi编辑器或其他编辑器阅读理解源代码。
2.编译应用程序
3.下载调试
切换到minicom终端窗口,使用NFSmount开发主机的/arm2410s到/host目录。
进入exp\basic\03_tty目录,运行term,观察运行结果的正确性。
[rootzxtroot]#minicom
[/mnt/yaffs]mount-tnfs-onolock192.168.0.56:
/arm2410s/host
[/mnt/ysffs]cd/host/exp/basic/03-tty/
[/host/exp/basic/03_tty].term
Readmodem
Senddate
123456789:
;<=>?
ABCDEFGHIGHLMNOPQRSTUVWX
由于内核已经将串口1作为终端控制台,所以可以看到term发出的数据,却无法看到开发主机发来的数据,可以使用另外一台主机连接串口2进行收发测试。
Ctrl+c可使程序强行退出。
注意:
如果在执行./term时出现下面的错误,可以通过我们前文提到的方法建立一个连接来解决。
/dev/ttySO:
Nosuchfileordirectory
解决方法:
[/mnt/yaffs]cd/dev
[/dev]ln-sf/dev/tts/0ttySO(注意首字母是1,不是数字1)
实验四:
A/DD/A接口实验
AD部分
一实验目的
了解在LINUX环境下对S3C2410芯片的8通道10位A/D的操作与控制
二实验内容
学习AD接口远离,了解实现AD系统对于系统的软件和硬件要求,阅读ARM芯片文件,掌握ARM的AD相关寄存器的功能,熟悉ARM系统硬件的AD相关接口uliyong外部模拟信号编程实现ARM循环采集全部前4路通道,并且在超级终端上显示。
三实验步骤
1.进入/arm2410s/exp/basic/04_ad目录,使用vi编辑器或者其他编辑器悦读理解源代码。
2.变异应用程序
运行make产生ad可执行文件
[rootzxt/]#cd/arm2410s/exp/basic/04_ad/
[rootzxt04_ad]#make
armv41-unknown-linus-gcc-c-omain.omain.c
armv41-unknown-linux-gcc-o../bin/admain.o-lpthread
armv41-unknown-linux-gcc-oadmain.o-lpthread
[rootzxt04_ad]#1s
Adhardware.hmain.oMakefile.baks3c2410-adc.h
Binmain.cMakefilereadme.cxtsrc
3下载调试
换到minicom终端窗口,使用NFSmount开发主机的/arm2410s到/host目录
[rootzxtroot]#minicom
[/mnt/yaffs]mount-tnfs-onolock192.168.0.56:
/arm2410s/host
[/mnt/yaffs]cd/host/esp/basic/04_ad/
[/host/exp/basic/04_ad]./ad
PressEnterkeyexit!
a0=0.0032a1=3.2968a2=3.2968
我们可以通过调节开发板上的三个黄色的电位器,来看a0,a1,a2,的变化
DA部分
一实验目的
学习DA转换原理
掌握MAX504DA转换芯片的使用方法
掌握不带有DA的CPU扩展DA功能的主要方法
了解DA驱动程序加入内核的方法
二实验内容
学生DA接口原理,了解实现DA系统对于系统的软件和硬件的要求
三实验步骤
1阅读理解源码
进入/arm2410s/exp/basic/05_da目录,使用vi编辑器或者其他编辑器阅读理解源代码
2.编译应用程序
运行make产生da可执行文件da_main
[rootzxt/]#cd/arm2410s/exp/basic/05_ad/
[rootzxt04_ad]#make
armv41-unknown-linus-gcc-c-omain.omain.c
armv41-unknown-linux-gccda_main.o-oda_main
[rootzxt05_da]#1s
da_mainda_main.cda_main.odocdriversMakefiles3c44b0-spi.h
3.下载调试
切换到minicom终端窗口,使用NFSmount开发主机的/arm2410s到/host目录然后进入
/host/exp/05_da/drivers目录,用insmodexio.o命令插入DA驱动,并且用1smod命令
查看是否已经插入
[/mnt/yaffs]cd/host/esp/basic/05_ad/
[/host/exp/basic/05_ad]cddrivers/
[/host/exp/basic/05_ad、drivers]insmodexio.o
Usingexio.o
[/host/exp/basic/05_ad/drivers]1smod
ModuleSiveUsedbuNottainted
Exio23840(unused)
I2c-tops2141040(unused)
进入/host/exp/basic/05_da目录,运行./da_main观察运行结果的正确性,
在输入./da_main后会出现下面的提示信息
[/host/exp/basic/05_da]./da_main
Errorparameter
Inputas:
[~]./ad_mainda_idnum
da_id:
selectbetween0and1
num:
range0.0~4.096
这是由于我们没有制定参数造成的,他的格式为./da_main[da的id号][数字],我们可以通过选择0或1来决定输出到开发板上的哪个DA接口,同时还需要在0.0~4.096V之间来选择一个输出电压,下面的例子是用了开发板上的DA0且输出1V的电压,我们可以使用万用表对其进行测量。
[/host/exp/basic/05_ad]./da_main01
CurrentVoltageis1.000000v
四.实验总结
通过本次实验我了解到一些关于DAAD的相关知识。
实验五:
图形界面应用程序设计
一、实验目的
1.了解在Linux下安装Qt以与Qt/Embedded的基本步骤;
2.学会在Qt/E平台下使用Virtualframebuffer显示程序结果。
二、实验内容
1.在Linnux下编译和使用Qt/E平台;
2.在Qt/E平台下编译和运行一个程序使用Virtualframebuffer显示运行结果。
三、实验步骤
该在Trolltech公司的上可以下载该公司所提供的Qt/Embedded的免费版本,在安装产品光盘以后,本次实验目录下已有要下载的文件,在/arm2410s/gui/Qt/src下。
在做实验钱吧本次实验用到的三个文件拷贝到/root/2410sQt目录下。
[rootBCroot]#cd/root/
[rootBCroot]#mkdir2410sQt
[rootBCroot]#cd/arm2410sQt/gui/Qt/src
Q
安装编译器arm-linux-gcc-3.4.1:
[rootBCsrc]#cd/arm2410s/gui/Qt/tools
[rootBCtools]#tarxjvfarm-linux-gcc-3.4.1.tar.bz2-C./
[rootBCtools]#vi/root/.bashprofile//打开文件,将该文件中的PATH变亮改为PATH=$PATH:
$HOME/bin:
/arm2410s/gui/Qt/tools/usr/local/arm/3.4.1/bin/,存盘后退出。
[rootBCtools]#source/root/.bashprofile
如果要正确安装的话,在任意路径下输入ar后按Tab键即可列出编译器文件。
Qt/Embedded平台的搭建需要以下几步:
1、安装Tmake
cd~/2410Qt—tar-xzftmake-1.13.tar.gz---exportTMAKEDIR=$PWD/tmake-1.13
cd~/2410sQt—
3、安装Qt/Embedded
cd~/2410sQt—
环境变量的设置是非常重要的,它关系到能否正确的安装与编译这些安装包,下面介绍一下这些环境变亮:
TMAKEDIR:
只想用于编译Qt/Embedded的Tmake工具
QT2DIR:
:
指向qt-2.3.2的文件夹
QTEDIR:
:
指向qt-2.3.10的文件夹
第二步,编译Qt/Embedded
cd$QT2DIR
exportTMAKEPATH=4TMAKEDIR/lib/linux-g++
exportQTDIR=$QT2DIR
exportPATH=$QTDIR/bin:
$PATH
exportLD_LIBbin/RARY_PATH=$QTDIR/lib:
$LD_LIBRARY_PATH/configure-no-xft//出现选项时都要输入yes
make
cp-artbin/uic$QTEDIR/bin/./configure是对Qt进行配置,它包括很多选项,例如可以通过添加“-no-opengl”等,如果想要进一步了解可以通过键入。
/configure—help来获得更多的帮助信息。
编译完成后需要将生成的/bin/uic复制到¥QTEDIR下创建的目录bin,因为在随后的编译Qt/Embedded的时候会用到这个工具。
2、BuildQvfb
exportTMAKEPATH=$TMAKEDIR/lib/linux-g++
exportQTDIR=$QT2DIR
exportPATH=$QTDIR/bin:
$PATH
exportLD_LIBRARY_PATH=$QTDIR/lib:
$LD_LIBRARY_PATH
cd$QTESIR/tools/qvfb/root/2410s/tmake-1.13/bin/tmake-oMakefileqvfb.pro
make
mvqvfb$QTEDIR/bin/
这一步buildqvfb并建立了从Qt/Embedded2.3.10到Qt/Embedded2.3.2的静态的。
其中qvfb工具用来生成Virtualframebuffer,这是一个非常有用的工具,它可以模拟在开发板上的显示情况,如果在Virtualframebuffer中运行没有问题的话,可以直接通过交叉编译在开发板上运行。
3.BuildQt/Embedded
cd$QTEDIR
exportTMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
exportQTDIR=$QTEDIR
exportPATH=$QTDIR/bin:
$PATH
exportLD_LIBRARY_PATH=$QTDIR/lib:
$LD_LIBRARY_PATH
./CONFIGURE-NO-XFT-QVFB-DEPTHS4.8,16,32
YES
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LINUX 嵌入式 实验 报告