您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > 嵌入式系统实验——实验一-IBMHRLtemplat
©2006Embedded嵌入式LINUX开发环境的建立邹琪牛建伟嵌入式系统课程——实验一©2006Embedded•实验目的•实验内容•开发环境配置•开发工具介绍•编写程序和Makefile•编译、下载调试©2006Embedded实验目的•介绍一般的嵌入式开发流程,并介绍开发流程中使用的软件和硬件的安装来建立开发环境,通过此实验了解和熟悉嵌入式的软硬件平台。•熟悉Linux开发环境,学会基于S3C2410的Linux开发环境的配置和使用。使用Linux的arm4l-unknown-linux-gcc编译,使用基于NFS方式的下载调试,了解嵌入式开发的基本过程。©2006Embedded实验内容•本次实验硬件平台使用UP-NetARM2410-S实验箱,宿主PC机上使用REDHATLinux9.0操作系统环境。将硬件平台和宿主PC机通过串口线和网线连接好后,在宿主PC机上安装开发工具软件,建立交叉编译调试环境并进行配置。•利用已经建立好的ARM-Linux的开发库及编译器,编写hello.c和Makefile文件。学习在Linux下的编程和编译过程,以及ARM开发板的使用和开发环境的设置。下载已经编译好的文件到目标开发板上运行。©2006Embedded开发环境配置(1)•在宿主机Linux环境下配置网络,包括IP地址、NFS服务、防火墙。•设置宿主机IP地址时,需将其地址与开发平台的IP地址设置在同一网段内。这里,将PC的IP设为192.168.0.121。©2006Embedded开发环境配置(2)•双击设备eth0,进入以太网设置界面,可以设置地址、子网掩码和网关。•对REDHAT9.0,它默认打开了防火墙,外来IP无法用NFSmount访问它,此因要在安全级别设置中关闭它。©2006Embedded开发环境配置(3)•在系统设置菜单中选择服务器设置菜单,再选中服务菜单,将iptables服务去掉,选中NFS。•点击系统设置-服务器设置-NFS服务器,出现如下界面,在目录中填入共享目录的路径和主机地址。©2006Embedded•一些常规选项设置,保留默认值。在用户访问中,设置将远程用户当作根用户时,对于操作比较方便,但安全性较差。•配置NFS完成后,可以测试是否成功。在宿主机下自己mount自己mount192.168.0.10:/arm2410s/mnt•其中192.168.0.10是主机IP,然后到/mnt/目录下看是否可以列出对应arm2410s目录下的所有文件和目录,如可以则说明mount成功,NFS配置成功。©2006EmbeddedMINICOM的配置•1.在Xwindows界面下新建终端,在终端的命令提示符后输入minicom,回车,就能看到minicom的启动画面。若是在字符界面下,直接输入minicom即可。©2006Embedded•2.minicom启动后,先按Ctrl+A键,再按Z键(非连续按),进入主配置界面。按O进入配置界面。按上下选择Serialportsetup,进入端口设置界面。©2006Embedded•3.如上图进行参数配置,选好后按ESC键退出,选择Savesetupasdf1保存退出,以后只要启动minicom就是该配置,无需再做改动。©2006Embedded•4.配置完成后,用串口线连接好PC机和2410-s实验箱,打开电源,即可在minicom上看到启动信息,并可以执行操作控制。©2006Embedded开发工具软件的安装•将开发板附带光盘插入光驱,在光驱所在目录/mnt/cdrom中运行安装脚本。cd/mnt/cdrom./install.sh•安装脚本程序将自动建立/arm2410s目录,并将所有开发软件包安装到/arm2410s目录下,同时自动配置编译环境,建立合适的符号连接。•注意:安装完成后看一下主编译器Armv4l-unknown-linux-gcc是否在/opt/host/armv4l/bin/,如果不是这个路径,请使用vi修改/root/.bash_profile文件中PATH变量为PATH=$PATH:$HOME/bin:/opt/host/armv4l/bin/,存盘以后执行:source/root/.bash_profile,则以后armv4l-unknown-linux-gcc会自动搜索到,可以在终端上输入arm,然后按tab键,会自动显示armv4l-unknown-linux-©2006EmbeddedLinux开发套件•GCC—编译器•Binutils—是一组开发工具,包括连接器,汇编器和其他用于目标文件和档案的工具。•Make—使用GNU的make工具能够比较容易的构建一个工程,整个工程的编译只需要一个命令就可以完成编译、连接以至于最后的执行。不过这需要编写Makefile文件。•GDB—负责程序调试•Glibc—标准C库,数学库,以及板级程序库•集成开发环境©2006EmbeddedGCC选项•-g:在可执行文件中输出调试信息,通常是为调试器gdb所用•-On:代码优化,n随着系统的不同而不同•-Idir:指定头文件搜索目录•gccfoo.c–I/home/zou/include–ofoo•-Ldir:指定在目录中需要搜索的库(动态库.so•和静态库.a)•gccfoo.c–L/home/zou/lib–lfoo–ofoo•-static:链接时使用静态链接•-elf2flt:将可执行文件头转换为flt平板格式•-c:只预处理,编译和汇编生产obj文件©2006Embedded调试工具GDB•调试嵌入式Linux系统需要一个运行系统的环境,一个调试环境。这里采用GDB的远程调试功能•远程调试一般由主机和目标机通过串口或网络连接而成。•GDB里面嵌有串口通信协议。在目标机上需要实现一个stub文件,这个文件里面需要提供串口连接的协议和传送数据信息的方法。•调试的一般步骤–将两台机器用串口连接起来–将需要调试的程序下载到目标机–在主机启动GDB,读入需要调试的程序的符号表和程序代码–使用targetremote命名建立和远程主机的连接–然后就象使用一般的GDB一样进行程序的调试了©2006EmbeddedGDB调试程序•Hostgdbmyprogram•Gdbtargetremote/dev/ttys0•Gdbload//程序运行至main•Gdbdisplayfoo//目标在main()处停止•gdbstepi//目标执行一个指令•Gdbquit//退出调试©2006EmbeddedHelloWorld程序•在Linux下用文本编辑器(vi、gedit等)•hello.c的源代码如下:#includestdio.hintmain(void){printf(Helloworld,Linuxprogramming!\n);return0;}©2006Embedded编写Makefile文件(1)•CC=armv4l-unknown-linux-gcc•EXEC=hello•OBJS=hello.o•CFLAGS+=•LDFLAGS+=-static•all:$(EXEC)•$(EXEC):$(OBJS)•$(CC)$(LDFLAGS)-o$@$(OBJS)•clean:•-rm-f$(EXEC)*.elf*.gdb*.o©2006Embedded编写Makefile文件(2)•以上是本例用到的Makefile文件,它有几个主要部分CC指明编译器EXEC表示编译后生成的执行文件名称OBJS目标文件列表CFLAGS编译参数LDFLAGS连接参数all:编译主入口clean:清除编译结果•注意:“$(CC)$(LDFLAGS)-o$@$(OBJS)”和“-rm-f$(EXEC)*.elf*.gdb*.o”前空白由一个Tab制表符生成,不能单纯由空格来代替。©2006Embedded编译应用程序•在上面的步骤完成后,我们将hello.c和Makefile文件放在同一目录下,运行make来编译程序了。如程序进行了修改,重新编译则运行makeclean,然后再make。•若不用Makefile,直接用gcc编译也行armv4l-unknown-linux-gcchello.c–ohello•注意:编译、修改程序都是在宿主机(本地PC机)上进行,不能在MINICOM下进行。©2006Embedded编译应用程序编写数组排序程序–在Linux下编写汇编程序和C程序,然后编译连接成ARM可运行的二进制文件,最后把该二进制文件下载到目标机(教学试验平台)上运行,查看运行结果是否正确。–在C程序main函数中,接收用户输入(用户任意输入9个整数),然后在main中调用使用ARM汇编编写的函数(单独存储成一个文件,在该函数中完成对这9个整数的排序功能),然后再在C程序main函数中输出这9个排好顺序的整数。©2006Embedded编译应用程序编写数组排序程序#includestdio.hintmain(){inti=0;intnum=0;int*array=NULL;while(num=0){printf(pleaseenterthenumberofelements:\n);scanf(%d,&num);if(num0){break;}}if(NULL==(array=(int*)malloc(num*sizeof(int)))){printf(mallocfailed!\n);exit(-1);}printf(pleaseentertheelements:\n);for(i=0;inum;i++){printf(\n%d:\t,i);scanf(%d,array+i);}select(array,num);printf(=========================\ntheresultis:\n);for(i=0;inum;i++){printf(%d:\t%d\n,i,*(array+i));}return0;}©2006Embedded通过NFS调试程序•前面配置开发环境时已在宿主PC上启动了NFS服务,并设置好了共享目录,可以在终端中输入minicom,建立开发板与宿主PC机之间的通讯了。[/mnt/yaffs]mount–tnfs–onolock192.168.0.56:/arm2410s/host•注意:IP地址需要根据宿主PC的实际情况修改•成功挂接宿主PC的arm2410s目录(假定编写了hello.c和Makefile都在此目录下)后,在开发板上进入/host目录便相应进入宿主PC的/arm2410s目录。在/host目录下运行编译好的hello程序[/host]./hello可以看到结果Helloworld,Linuxprogramming!•注意:开发板挂接宿主机目录只需挂接一次,只要开发板没有重启,就能一直保持连接。这样可以反复修改、编译、调试,不需要下载到开发板©2006Embedded通过FTP上传应用程序•用交叉网线连接好开发板的NIC-1网口和PC机的网口,在宿主机下打开终端输入minicom,建立开发板与宿主PC机之间的通讯,配置开发板的IP和宿主机在同一网段。[/mnt/yaffs]ifconfig--查看IP[/mnt/yaffs]ifconfigeth0192.168.0.111--配置eth0的IP[/mnt/yaffs]inetd--启动ftp服务•打开FTP软件gFTP,输入地址192.168.0.111,用户名:root,密码:无。连接进入,上传编译好的程序hello到/var文件夹下,运行可以看到结果[/var/]./helloHelloworld,Linuxprogramming!©2006EmbeddedMINCOM下载调试•minicom启动后,先按Ctrl+A键,再按Z键进入主配置界面。按S发送文件。选择Xmodem协议,然后再选中要发送的文件即可
本文标题:嵌入式系统实验——实验一-IBMHRLtemplat
链接地址:https://www.777doc.com/doc-1003183 .html