《学习板硬件及开发环境的建立.ppt》由会员分享,可在线阅读,更多相关《学习板硬件及开发环境的建立.ppt(50页珍藏版)》请在三一办公上搜索。
1、2023年10月11日,教学内容,第一章 嵌入式系统概述第二章 学习板硬件及开发环境的建立第三章 嵌入式Linux系统的移植第四章 嵌入式Linux设备驱动第五章 嵌入式Linux串口和网络编程第六章 嵌入式Linux图形编程,2023年10月11日,第二章 硬件分析及开发环境建立,学习板硬件电路分析开发环境的建立远程访问目标板下载程序至目标板交叉调试器,2023年10月11日,2.1 学习板硬件电路分析,2023年10月11日,2.1 学习板硬件电路分析,详细资料请参考CDROM中的PDF文档,2023年10月11日,2.1 学习板硬件电路分析,详细资料请参考CDROM中的PDF文档,202
2、3年10月11日,2.1 学习板硬件电路分析,AT91RM9200ARM CPU180Mhz,SDRAM32MB*2(32b宽),Nor Flash16MB(16b宽),Nand Flash64MB(8b宽),扩展接口(GPIO),10/100M以太网(RMII+PHY),Power(5、3.3、1.8),USB host*2,SD Socket(MMC*4b宽),RS232*2(DBG、User),RTC&Sensor(SPI&IIC),2023年10月11日,2.1 学习板硬件电路分析,AT91RM9200(32位 RISC)ARMV4T架构200MIPS180Mhz,ARM920T内核,
3、MMU:Memory Manange Unit,16KB D cache16KB I cache,16KB SRAM+128KB ROM,EBI接口:8个 nCS0-nCS7,122个GPIO,4 USART+SPI+TWI(IIC)SSCMCI20 DMAC(PDC),USB Host 2.0 USB Device 2.0,23CH T/C,10/100M Ethernet MAC,VDDCore、VDDOsc、VDDPll:1.8V,VDDIoP、VDDIoM:3.3V,封装:208-Pin PQFP、256-Ball BGA,2023年10月11日,2.1 学习板硬件电路分析,0 x00
4、00 0000-0 xFFFF FFFF最大寻址空间:4GB可用空间:4GB-1518MB片内存储器:256MBEBI8:256MB*8、片内寄存器:256MBEBI分成8个BANK,每个BANK对应一个片选信号nCS0-nCS7,Bank0-Bank7,2023年10月11日,2.1 学习板硬件电路分析,nCS0接16MB NorFlash 其地址范围:0 x1000 00000 x10FF FFFFSize:0 x1000000,nCS1接64MB SDRAM 其地址范围:0 x2000 00000 x23FF FFFFSize:0 x4000000,nCS3接Nand Flash,202
5、3年10月11日,2.2 嵌入式Linux开发环境,嵌入式系统通常是一个资源受限的系统,因此直接在嵌入式系统的硬件平台上编写软件比较困难,有时候甚至是不可能的。解决办法:首先在通用计算机上编写程序;然后通过交叉编译生成目标平台上可以运行的二进制代码格式;最后再下载到目标平台上的特定位置上运行。,2023年10月11日,2.2 嵌入式Linux开发环境,关于交叉编译 在一种平台上编译出能在另一种平台(体系结构不同)上运行的程序。在PC平台(X86 CPU)上编译出能运行在arm平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到arm平台上才能运行。用来编译这种程序的编译器就
6、叫交叉编译器。为了不跟本地编译器混淆,交叉编译器的名字一般都有前缀。例如:arm-linux-gcc arm-softfloat-linux-gnu-gcc arm-none-linux-gnueabi-gcc,2023年10月11日,2.2 嵌入式Linux开发环境,ICE:In-Circuit Emulator 在线仿真器,USB/Ethernet,2023年10月11日,2.2 嵌入式Linux开发环境,2023年10月11日,2.2 嵌入式Linux开发环境,需要交叉开发环境(Cross Development Environment)的支持是嵌入式应用软件开发时的一个显著特点。交叉编
7、译器只是交叉开发环境的一部分。交叉开发环境是指编译、链接和调试嵌入式应用软件的环境,它与运行嵌入式应用软件的环境有所不同,通常采用宿主机目标机模式。,2023年10月11日,2.2 嵌入式Linux开发环境,宿主机目标板模式宿主机(Host)是一台通用计算机,它通过串口或者以太网接口与目标机通信。宿主机的软硬件资源比较丰富,能够大大提高嵌入式应用软件的开发速度和效率。目标板(Target),应用程序实际运行的平台,或者是能够替代实际运行环境的仿真系统。软硬件资源通常都比较有限。,2023年10月11日,2.2 嵌入式Linux开发环境,宿主机目标机模式首先利用宿主机上丰富的资源和良好的开发环境
8、开发和仿真调试目标机上的软件;然后通过串口或者以网络将交叉编译生成的目标代码传输并装载到目标机上,并在监控程序或者操作系统的支持下利用交叉调试器进行分析和调试;最后目标机在特定环境下脱离宿主机单独运行。,2023年10月11日,2.2 嵌入式Linux开发环境,开放的交叉开发环境的典型代表是GNU工具链目前已经能够支持x86、ARM、MIPS、PowerPC等多种处理器。商业的交叉开发环境则主要有Metrowerks CodeWarrior、ARM Software Development Toolkit等等。,2023年10月11日,2.2 嵌入式Linux开发环境,GNU交叉工具链交叉编译
9、器,例如arm-linux-gcc交叉汇编器,例如arm-linux-as交叉链接器,例如arm-linux-ld用于处理可执行程序和库的一些基本工具。例如arm-linux-strip,2023年10月11日,2.2 嵌入式Linux开发环境,GNU交叉工具链的下载ARM官方网站下载 可以从该站点下载2.95.3以及3.2工具链,我们使用的交叉工具链arm-softfloat-linux-gnu-gcc(3.4.1 for u-boot)arm-none-linux-gnueabi-gcc(4.5.2 for kernel、busybox、app),2023年10月11日,2.2 嵌入式Li
10、nux开发环境,包的安装:mkdir/usr/local/armcp cross-2.95.3.tar.bz2/usr/local/arm添加环境变量在文件/etc/bashrc 或/etc/profile文件最后添加:export PATH=/usr/local/arm/2.95.3/bin:$PATHexport PATH=/usr/local/arm-2011.03/bin:$PATHexport PATH=/usr/local/arm-softfloat-linux-gnu/bin:$PATH工具链安装完成。,2023年10月11日,2.2 嵌入式Linux开发环境,GNU交叉工具链的
11、常用工具介绍,2023年10月11日,2.2 嵌入式Linux开发环境,主要工具的使用arm-linux-gcc 的使用arm-linux-gcc o hello hello.carm-linux-ar 和 arm-linux-ranlib 的使用建立一个静态库arm-linux-ar r libhello.a h1.o h2.o为静态库建立索引arm-linux-ar s libhello.aarm-linux-ranlib libhello.a由静态库产生可执行文件arm-linux-gcc-o hello hello.c lhello L./arm-linux-gcc-o hello h
12、ello.c libhello.a,2023年10月11日,2.2 嵌入式Linux开发环境,主要工具的使用arm-linux-strip 的使用移除所有的符号信息-strip-allcp hello hello1arm-linux-strip-strip-all hello-rwxr-xr-x 1 arm root 2856 7 月 3 15:14 hello-rwxr-xr-x 1 arm root 13682 7 月 3 15:13 hello1被strip后的hello程序比原来的hello1程序要小很多。移除调试符号信息-g arm-linux-strip-g hello,2023年
13、10月11日,2.3 远程访问目标板,如何观察应用程序在目标板的运行情况,即查看程序的输出信息?通过串口线连接宿主机和目标板。配置串口做为目标板的输出设备。例如在交叉编译目标板的linux内核时,配置指定终端为串口:noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttyS0,115200在宿主机上通过串口通信软件查看目标板系统的运行情况。,2023年10月11日,超级终端的使用打开超级终端超级终端程序通常位于附件中的通讯中,“Hypertrm”图标所指即是超级终端程序。为新的连接取一个名字,2.3 远程访问目标板,2023年10月11日,超
14、级终端的使用选择连接目标板的串口,2.3 远程访问目标板,2023年10月11日,超级终端的使用设置串口注意必须选择无流控制,否则只能看到输出而不能输入。串口波特率是 115200,2.3 远程访问目标板,2023年10月11日,超级终端的使用当所有的连接参数都设置好以后,打开目标板电源开关,就会看到系统 的启动信息,当 Linux 启动以后,超级终端就相当于虚拟终端,可通过它来操作目标板。选择超级终端“文件”菜单下的“另存为”,保存该连接设置,以便于以后再连接时就不必重新执行以上设置了,2.3 远程访问目标板,2023年10月11日,超级终端的使用打开目标板电源开关,就会看到系统 的启动信息
15、,当 Linux 启动以后,超级终端就相当于虚拟终端,可通过它来操作目标板。,2.3 远程访问目标板,2023年10月11日,minicom的使用 minicom 的设置:minicom-s,2.3 远程访问目标板,2023年10月11日,minicom的使用 1.选择串口:选择菜单中的“Serial port setup”,按回车,进入如下图所示界面。按“A”以设置“Serial Device”(串口 1-/dev/ttyS0,串口2-/dev/ttyS1),2.3 远程访问目标板,2023年10月11日,minicom的使用 2.设置波特率:按“E”键进入设置“bps/par/Bits”(
16、波特率)界面。再按“I”以设置波特率为 115200。,2.3 远程访问目标板,2023年10月11日,minicom的使用 3.设置无流控制:按回车退回到上一级菜单,按“F”键设置“Hardware Flow Control”为“NO”,其他选项使用缺省值。,2.3 远程访问目标板,2023年10月11日,minicom的使用 4.保存设置再选择“Exit”退出设置模式。刚才的设置被保存到“/etc/minirc.dfl”。5.设置完毕打开目标板电源的电源开关,minicom输出目标板的启动信息,当 Linux 启动以后,minicom 就相当于虚拟终端,可通过它来操作目标板。,2.3 远程
17、访问目标板,2023年10月11日,minicom的使用 6.退出 minicom:同时按下“Ctrl+A”键,紧接着再按下“Q”键,在跳出的窗口中,选择“Yes”。,2.3 远程访问目标板,2023年10月11日,通过串口下载使用超级终端软件。设置波特率115200、端口号、下载地址0 x20000000上电启动开发板,进入 BIOS 界面选择2串口下载点击“serial port”菜单,选择“Transmit”选项,2.4 下载程序至目标板,2023年10月11日,通过TFTP方式下载TFTP协议是简单的文件传输协议,适合目标板Bootloader的使用。(u-boot、vivi)TFTP
18、文件传输基于UDP。通过TFTP来传输目标板启动需要的内核映象文件zImage 传输速度快,使用方便。,2.4 下载程序至目标板,2023年10月11日,通过TFTP方式下载tftp分服务器和客户端。在宿主机开启tftp服务,设置好tftp的根目录内容在目标板开启tftp客户端程序。在目标板的bootloader交互过程中通过tftpboot命令下载内核。tftpboot 0 x20008000 uImage2638 tftp 0 x20008000 uImage2638 tftp 0 x21200000,2.4 下载程序至目标板,2023年10月11日,通过TFTP方式下载Linux的tft
19、p服务器的配置编辑/etc/xinetd.d/tftp,只有在安装了tftp服务后,才会出现tftp文件。修改其中disable和server_args项,其余可保持不变。Service tftp socket type=dgramprotocol=udpwait=yesuser=rootserver=/usr/sbin/in.tftpdserver_args=-s/tftpboot-设置tftp服务输出目录。disable=no-默认为yes,应修改成no per_source=11cps=100 2flags=IPv4,2.4 下载程序至目标板,2023年10月11日,通过TFTP方式下载
20、重启xinetd服务,使得更改的配置有效Service xinetd restart确认tftp服务是否已经开启netstat-au在目标板启动tftp客户端程序tftp 0 x200080000 uImage2638下载信息:Filename uImage2638.Load address:0 x200080000Loading:#doneBytes transferred=913880(df1d8 hex),2.4 下载程序至目标板,2023年10月11日,通过挂载NFS方式下载NFS服务就是将宿主机的一个目录通过网络可以被挂载到其他计算机上,并且作为其他计算机的一个目录。在嵌入式开发中,
21、通过NFS可以很方便的将修改的文件通过NFS传输到目标板上。不用反复烧写镜像文件。,2.4 下载程序至目标板,2023年10月11日,通过挂载NFS方式下载NFS的使用分服务器端和客户端服务器端提供要共享的文件,客户端通过挂载“mount”实现对共享文件的访问操作。mount 192.168.0.1:/home/nfs/tmp/testNFS服务器端通过读取配置文件/etc/exports决定所共享的文件目录。配置文件的语法:每一行由输出路径,客户名列表以及每个客户名后紧跟的访问选项构成:共享的目录 主机名或IP(参数,参数)共享的目录 IP1(参数1,参数2)IP2(参数3,参数4),2.4
22、 下载程序至目标板,2023年10月11日,通过挂载NFS方式下载重启NFS服务:service nfs restart 通过showmount 命令来查看开放的目录。showmount e localhost 进行网络设置,将eth0的网络地址指定为192.168.1.1,掩码255.255.255.0,网关不需要。设置完之后要重启网络。Serviec network restart 关闭防火墙,选择系统设置安全级别,将安全级别改为“无防火墙”。去掉iptables 服务:选择系统设置服务器设置服务,在弹出的界面上将optables前的“”去掉。将主机上的目录挂载到另一个目录下,测试NFS是
23、否设置成功。,2.4 下载程序至目标板,2023年10月11日,通过挂载NFS方式下载在超级终端或者minicom下通过NFS挂载宿主机目录 mount 192.168.1.1:/home/nfs/tmp/test卸载NFS文件系统umount/tmp/test,2.4 下载程序至目标板,2023年10月11日,嵌入式软件开发过程中的交叉调试与本地软件开发过程中的调试方式有所差别。本地软件开发调试器与被调试的程序往往运行在同一台计算机上。调试器是一个单独运行着的进程,它通过操作系统提供的调试接口来控制被调试的进程。嵌入式软件开发调试时采用的是在宿主机和目标机之间进行的交叉调试。调试器运行在宿主
24、机,但被调试的进程却是运行在目标板。调试器和被调试进程通过串口或者网络进行通信,调试器可以控制、访问被调试进程,读取被调试进程的当前状态,并能够改变被调试进程的运行状态。,2.5 交叉调试器,2023年10月11日,交叉调试器的结构,2.5 交叉调试器,2023年10月11日,制作交叉调试器解压源码包tar zxf配置cd gdb-6.0mkdir build-arm-linux cd build-arm-linux./configure-target=arm-linux,2.5 交叉调试器,2023年10月11日,制作交叉调试器编译make安装make install在目录下生成arm-li
25、nux-gdb工具。,2.5 交叉调试器,2023年10月11日,制作交叉调试器编译生成针对arm处理器的 gdbserver进入gdb源代码包中的gdb server目录 cd gdb-6.0cd gdb/gdbserver配置生成gdbserverchmod u+x configureCC=arm-linux-gcc./configure-host=arm-linuxMake,生成gdbserver、gdbreplay,2.5 交叉调试器,2023年10月11日,制作交叉调试器通过nfs,将gdbserver/gdbreplay到目标板中。启动目标板上的gdbserver gdbserver 192.168.1.88:2345 cross-test192.168.1.88 是目标板的IP地址。2345是任意指定的端口,可以是其他端口。启动宿主机端arm-linux-gdb调试器在宿主机的工作目录中有对应的程序和源文件#arm-linux-gdb cross-test(gdb)target remote 192.168.1.88:2345 连接远程gdbserver(gdb)b main 设置断点(gdb)c 运行,2.5 交叉调试器,