嵌入式实验指导书电气2017版_第1页
嵌入式实验指导书电气2017版_第2页
嵌入式实验指导书电气2017版_第3页
嵌入式实验指导书电气2017版_第4页
嵌入式实验指导书电气2017版_第5页
已阅读5页,还剩48页未读, 继续免费阅读

付费下载

下载本文档

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

文档简介

内容是几次实验的基础上进行的,所以每次都要掌握相应的内容。实验前应充分预习阅读实验指导书,查看相关技术文档,复习中有实验报告在实验完成后一周内交到,采用统一报告纸,手写完参考书《ARM9嵌入式技术及嵌入式Linux高级实践Linux开发嵌入式系统时需要用到两个平台:一个是开发平台(Host),(Target)PC机充当,它可以通过串行端口、并行端口和以太网等方式Linux1所示。USBUSB LinuxLinux1LinuxUbuntu12.04。提醒:版本的软件或操作系统可能不兼容某些老的软件,例如在Ubuntu12.04Android4.2,Ubuntu12.04gccVMware的安装、汉化和使用方法可参考书籍和网络,本文不再赘述。几点建议LinuxVMware的pc是台式电脑,只有一个有线网卡,用来和实验箱的网口相连,同时上Ubuntu的安装和一般配置可参考网络,本文不再赘述。几点建议提示安装VMwareTools时,要选择安装。有了它可以设置共享文件夹,windows系统的复制/粘贴功能可以和虚拟机里Ubuntu系统的/粘贴共用,非常方便。如果手动安装,只需把虚拟机的光驱挂载VMware安装 下的Linux.ISO文件,解压里面压缩文件到tmp 批处理文件,一直yes下去即可。Ubuntu,IPV4址:81,子网掩码:,无网关,然后保存。的PC的windows系统IP80,子网掩码:,无网关。作为懒人,喜欢root登录,大神们说这是不好的。懒人说,我有备份系统,了就JXARM9-2410块、A/DIDE/CFGPRSGPS2JXARM9-24103JXARM9-2410SDRAM器:主板包含64MBSDRAM。由一片16位数据宽度的SDRAM器组成,地址 FLASH器:主板包含32MBNORFLASH器和8MBNANDFLASH,NORFLASH内部存放启Bootloader、LinuxIIS32 ~0x01ffffff;NANDFLASHcramfsLinuxRS485UART0Bootloader、演示程序、Linux(通过超级终IISDMAIISI2C总线接口:与24C08接口,可以存放一些固定的配置数据4LED6:60CPU复位;两通道通用DMA,两通有外部请求引脚的外设DMA;五个定时器和一个内部定时器;810-bitADC标准计算机打印口(并口)显示器/触摸屏:8TFTLCD,640X480;按键:4X410bitA/DCFGPS全球模块1ARM9-2410用。在本教学实验系统中,SDRAM地址范围从0x 中,SDRAM空间范围被分配成不同的区域用于不同的用途,下表是实验测试程序所用的一个默认分2SDRAMFLASH地址范围从0x 3FLASHLinux00打印系统信息,并接收用户通过串口0发来令。所以我们在windows下使用超级终端等串口调linunx下使用等串口工具。当然现在很多嵌入式设备配置了SSH,直接通过网windowstftp,UbuntuLinuxtftpnfswindowstftpUbuntunfs交叉编译工具:对于不同体系架构的和不同内核版本的系统,需要合适版本的编译工具。嵌入式不仅有ARM的,ARM不仅有ARM9的,ARM9不仅有S3C。对应我们实验箱的,采arm-linux-gcc2.95.3arm-linux-gcc4.3.32arm-linux-gcc2.95.3的安装与使用(最简版),2.4.2。ttyUSBS0。UbuntuttyS0。Ubuntu上还有好多其他的串口软件,还有图形界面的,不过还是 要传输文件等功能,gtkterm和 Ubuntu:apt-get –s,启动配置菜单:选serialportsetup;进入串口配置,输入A配置串口驱动为/dev/ttyUSBS0(或/dev/ttyS1);输入E配置速率为1152008N1;输入F将HardwareFlowControl设为NO;回车退出。SavesetupasdflSavesetupasdf1(一定要记得这一步),Exit。实验箱USBwindowsUbuntuwindowsVMwareUSBUbuntuVMwareVMUSB/devttyUSB0口太矫情了,每学期都有一两个实验箱的串口232烧掉,USB转串口线更是一大半。求求linuxtftpUbuntu“apt-getinstalltftp-hpatftpd-hpaxinetd”,在终端中输入“gedit/etc/xinetd.d/tftptftpservice{socket_type=protocol=wait=user=server=server_args=-sdisable=per_source=cps=100flags=} 的权限为777:“od-R777/tftpboot”。输入“gedit/etc/default/tftpd-hpa”,编辑文件:TFTP_DIRECTORY="/var/lib/tftpboot"改为因为我们的tftp服 设为在终端中输入“/etc/init.d/xinetdrestart”和“servicetftpd-hparestart”。每次启动tftpd-hpa在嵌入式linux开发的时候,常常需要使用nfs以方便程序的调试。使用nfs,用户可以将板 apt-getinstallnfs-kernel- 和权gedit在整个文件最后添加一行配置如下(前面的以往配置全部加#注释符/nfsboot其中/nfsboot指的是NFS的共享 ,你可以改为受限的IP,rw表示的是权限,sync是默认的。我们的实验箱参考手册里把它设置成tftpboot 在 下新建一个名为nfsbootmkdir/etc/init.d/nfs-kernel-server安装编译器(pc已经装好了mkdirmvcross-2.95.3.tarcdtarxvfcross-rm/usr/local/arm/cross-exportsource/etc/bash.bashrc要安装与目标板一样版本的内核树,查看内核版本方法:uname-r make cc1:error:unrecognizedcommandlineoption"-mlittle-错误,解决问题方法 PILE=arm-linux-zImagemakemake第二章很悲催的告诉,由于上届随意拔插并口线和串口线,我们实验箱的相当一部分并口和大部分的串口都已经烧了,且没法修,所以我们编写的程序有的小组可以在集成开发软件ADT中直接调试差错,另外的小组只能通过u-boot后直接运行看结果,无法调试查错。ADTIDEARMADTIDEARMADTIDEARMADTIDEARMleddemostepper软件:PCWindowsADTIDE+RVDS(MDK)ADTIDE,实验箱厂商提供的。实际上也可以用那些经典ADTIDE(1)打开ADTIDE软件,如图2.1所示。(2)打开示例工程。将电脑“D:\嵌入式实验相关资料\JXARM9-2410-3资料”下的examples文件夹到D盘根 后在ADTIDE中选择“文件”->“打开工作区”,在打开框中找到D盘examples “examples.aws”,确定。如图2.2所示。图 图调试设置。右键选中所用工程,点击“设置”,弹出下面的框Debuggerdevice“ARM9Simple”,configuation 打开超级终端及配置(的PC上已经设置好windowsXP的输入输出界面使用。Widows764用。ht 然后弹出下面的“新建连接”框,随意给新建连接起个名称,如ARM、ARM2410: 配置:SDRAM配置:SDRAM64MBFlash在JX2410#的提示符后面输入uboot命令可以进行一些操作,比如后面的程序、启动linux内核等等。时间充足的情况下学生可以仿照“JXARM92410ARMlinux嵌入式教学实验.pdf” /s/1gegKaA3文档中的6.1.6小节进行练习,在PC机的“D:\嵌入式实验相关资料\JXARM9-2410-3资料” 输入“help”,超级终端会打印出可以使用令,如reset重启命令等;输入“printenv”,会打印出uboot的环境变量,它提供了网络配置信息、设置好令等。从下图可ADTIDEelf“elftobinarybin然后打开D盘examples 下的debug ,会看到生成的bin文件,例如数码管显示工程leddemo的bin文件在“D:\examples\leddemo\debug” 使用并口调试。点击“调试”,选中“建立连接”。成功后界面下方状态栏会提示:targetconnected。然后点击“调试”,选中“”。成功后提示:imagedownloadsuccess。使用u-boot的tftp功能并执行bin程序PC“D:\嵌入式实验相关资料\JXARM9-2410-3\tools\tftpd32j”下的bin“D:\examples\leddemo\debug”。“tftpleddemo.bin”,提示信息如图所示,loading网线是否连接好(由于有其他实验需要用局域网,有可能PC机的网线被换了!)。从上图可以看到共传输了300个字节数据。然后输入命令“go 序。如果要退出程序,只能按实验箱上的复位按键来(比较悲催,谁叫咱们的调试并口了60x。通过数0x控制单个数码管具体现实什么。 ),其他的数码管不亮不显示(16进制赋值,最高2位无*((U8*) )=*((U8*) )=关于中断,和“JXARM92410ARMlinux嵌入式教学实验”(在PC机的“D:\嵌入式实验相关资料\JXARM9-2410-3资料” 下有这个文档)的5.2.5节有介绍。本次称和使用、中断模式、2410关于步进电机,在“JXARM92410ARMlinux嵌入式教学实验”(在PC机的“D:\嵌入式实验相关资料\JXARM9-2410-3资料” 下有这个文档)的5.11.4节有介绍,学生自行预本实验箱的步进电机控制寄存器地址为 实验前需写实验预习报告,内容:arm9s3c2410的中断基本概念和各中断控制器寄存器研究示例程序中外部中断实现的步骤和相关函数的实现代码(中断函数在2410init.sIsr_InitIrq_Requestinterrupt.c练习u-boot各种命令,使用tftpADT-IDE编译好的机程序,并执行第三章Ubuntu/Linuxu-bootBootLoaderu-boot1.u-boot软件:PCWindowsVmwareUbuntuBootLoaderBootLoaderPC,PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的引导程序一起组成。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的引导程序读到系统的RAM中,然后将控制权交给引导程序。引导程序的主要运行任务就是将内核映象从硬盘上读到RAM中,然后跳转到内核的点去运行,也即开始启动操作系统。而在嵌入式系统中,通常并没有像BIOS那样的固件程序,因此整个系统的加载启动任务就完全由BootLoader来完成。在基于ARM920T核的嵌入式系统中,系统在上电或复位时将从地址0x BootLoader程序。简单地说,BootLoader这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。对于一个嵌入式系统来说,可能有的包括操作系统,有的小型系统也可以只包括应用程序,但是在这之前都需要BootLoader,BootLoaderBootLader是很的。BootLoaderCPUBootLoaderCPUBootLoader实际上也依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,RAMBootLoader系统加电或复位后,所有的CPU通常都从CPU制造商预先安排的地址上取指令。S3C2410X在复位时都从地址0x 取它的第一条指令。而嵌入式系统通常都有某种类型的固态设备(比如:ROM、EEPROM或FLASH等)被安排这个起始地址上,并将Booloder程序到这段器上。在系统加电后,CPU将首先执行保存在该地址的BootLoader程序。BootLoader串口通讯是最简单也是最廉价的一种双机通讯设备,所以往往在BootLoader中主机和目标机之间都通过串口建立连接,BootLoaderI/O,比如:输出打印USB通讯,那么在BootLoader中就需要编写相应的驱动。BootLoader多阶段的BootLoader能提供更为复杂的功能,以及更好的可移植性。从固态设备上启动的BootLoader大多都是2阶段的启动过程,也即启动过程可以分为stage1和stage2两部BootLoader大多数BootLoader都包含两种不同的操作模式:“启动加载”模式和“”模式,这种区别仅对于开发人员才有意义。但从最终用户的角度看,BootLoader而并不存在所谓的启动加载模式与工作模式的区别。BootLoader从目标机上的某个固态设备上将操作系统加载到RAM中运行,整个过程并没有用BootLoader,BootLoader(Downloading)BootLoader接等通信从主机文件,比如:应用程序、数据文件、内核映像等。从主机的文件通常首先被BootLoader保存到目标机的RAM中,然后再被BootLoader写到目标机上的固态设备中。BootLoader的这种模式通常在系统更新时使用。工作于这种模式下的BootLoader会向它的终端用户提供一个简单令行接口。BootLoaderBootLoader单的采用直接数据收发,当然在串口上也可以采用xmodem/ymodem/zmodem协议以及在以太网上采用TFTP协议。TFTP议来文件时,主机方必须有一个软件用来提供TFTP服务。BootLoader提供Linux启动LinuxBootLoader读写器;RAM;从RAM中拷贝二进制映像文件到FLASH器中U-BOOT是sourceforge网一个开放源代码的项目,对Linux操作系统的支持最好,大多数bootloader都分为stage1和stage2两大部分,U-BOOT也一样,依赖于CPU体系结构的代码stage1stage2CU-BOOTstage1CPUnandflashRAM跳转到stage2的C点,转到RAM中执行,指令ldrpcstart_armboot可完成U-BOOTstage2flashnand备,填写IP、MAC等)。kernelnandflashRAM。u-boot-1.1.1.tar.bz2(其他版本也可以用,2014SMDK2410,不建议使用)。源码在电脑的文件夹“D:\嵌入式实验相关资料\uboot_linux移植”中可以找到,学生自己也可以在,也可以board:和一些已有开发板有关的文件.每一个开发板都以一个子 common:实现U-BOOT命令行下支持令,每一条命令都对应一个文件。例如bootm命令对应就是cmd_bootm.c。cpu:与特定CPU架构相关 ,每一款U-BOOT下支持的CPU在该 比子 arm920t等。doc:文 。U-BOOT有非常完善的文档,推荐大家参考阅读drivers:U-BOOT支持的设备驱动程序都放在该 ,比如各种网卡、支持CFI的Flash、串口和USB等。fs:U-BOOTcramfs、fat、fdos、jffs2registerfsinclude:U-BOOT使用的头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件。 下 下的asm 有与CPU体系结构相关的头文件,asm对应的是asm-arm.lib_xxxx:与体系结构相关的库文件。如与ARM相关的库放在lib_arm中。net:与网络协议栈相关的代码,BOOTPTFTPRARPNFStools:U-BOOT:mkimage,crc如果想另建一个新的配置,如cumt2410,可以根据smdk2410的相关和文件进行、重命名u-boot($Ubuntu$cd/home/cvtech/jx2410/u-boot-$make$make 下生成u-boot.bin文件,这个文件就是u-boot映像文件,将该文件拷贝到/tftpboot $cpu-boot.binu-boot4JX2410#protectoffJX2410#eraseJX2410# u-如果传输测字节数(Bytetransfer)21c6c,JX2410# 0u-bootu-boot况下进行的,如果由于操作或者中途断电等原因导致烧写失败将能使得u-boot无法正常启bootloader本实验前写预习报告,内容:bootloader的特点和种类,u-boot的功能, (由老师来完成由于不同班的实验进度不一,原有的系统可能不能用了,所以必须先恢复才能使用。(通过超级终端查看串口打印信息如果启动过程中出现乱码或者 iubuntuip(ip加。弹出的框里选择IPV4,方法选‘手动’,点击添加,第1列输入有线连接802,然后鼠标点击一下网关列下方,但不输入。点击保键“Ctrl+T”liunxrootcd命令进入你自己的工作下。 将 下原来的文件夹全部删除,重新选 件,将该文件拷贝到Ubuntu文件系统的/tftpboot 下。再在Ubuntu的终端中执行“/etc/init.d/xinetdrestart”和“servicetftpd-hparestart”,启动tftp服务。JX2410#protectoffJX2410#eraseJX2410# u-如果传输测字节数(Bytetransfer)184acJX2410# 0u-boot5有TFTP功能ipaddr5;serverip80;115200;SDRAMflash:Flash:32MB;练习u-boot各种命令,使用tftpADT-IDE编译好的机程序,并执行叙述分析u-bootlinux第四章LinuxLinuxLinuxLinuxLinuxLinux根据教学实验系统的硬件资源,配置并编译LinuxLinuxRAMDISK并运行Linux,检查运行结果软件:PCWindowsVmwareUbuntuLinuxUNIXLinux内核的移植可以分为板级移植和片级移植。对于Linux版本中已经支持的CPU通常只需要针对板级硬件进行适当的修改即可,这种移植叫做板级移植。而对于Linux版本中没有支持的CPU则需要添加相应CPU的内核移植,这种移植叫做片级移植。片级移植相对板级移植来说要复杂许多,需要对linux内核有详尽的了解,不适合于教学。本实验采用的Linux中已经包含S3C2410XARM920TLinux板级移植的基本过程和下图所示为本实验所采用的实验环境以及开发流程。在主机的Ubuntu12.04操作系统下安装Linux包以及交叉编译器arm-linux-gcc。然后对Linux进行配置(make 适合本实验系统的相关配置,配置完成后进行编译生成Linux映像文件zImage。然后通过u-boot的tftp命令将该文件到目标板并执行。linux4.1JXARM9-2410linuxLinux内核源代码的安装(实验中不使用源码,使用厂商提供的源码本实验系统的Linux文件为linux-jx2410.tar.gz(在电脑的“d:\嵌入式实验相关资料\JXARM9-2410-3资料\linux” 下),在Ubuntu下将该文件拷贝到 下执行:tarzxvflinux-jx2410.tar.gz,当tar程 下会有一个linux的新 就是linux的 ,里面有进行linux开发的所有的源代码。如果使用Linux内核标准源码可以从网上/viewspace-961464。内核补丁不是一定需要的,这要看你选择的是怎样的Linux内核,比如下来标准的Linux内核,想要编译linux系统在x86的PC机上运Linuxx86armlinux常见的如arm板,了标准Linux内核是不够的,还要从armlinux的相关站点相应版本的补丁patch-2.4.18-rmk7.bz2linux-2.4.18-rmk7.tar.bz2armlinux系统内核了。(不同处理器内核地址参考 #tarxzvflinux-#gunzippatch-2.4.18-#gunzippatch-2.4.18-rmk7-#gunzippatch-2.4.18-rmk7-swl8-#gunzippatch-2.4.18-rmk7-swl8-cy2-#cdlinux-#patch-p1<../patch-2.4.18-#patch-p1<../patch-2.4.18-rmk7-#patch-p1<../patch-2.4.18-rmk7-swl8-#patch-p1<../patch-2.4.18-rmk7-swl8-cy2-根据实验箱的硬件对源码进行修改和配置(/viewspace-961464/)。S3C2410FLASH1)Linux(linux2.1.4,是比较老的版本,新内核版本的Linux的源代码组织成如下结构:根 是/home/cvtech/jx2410/linux。内核的文件组织结arch/arm:与架构和平台相关的代码都放在arch 下。针对ARM的Linux,有一个子 包含了所有的设备驱动程序。驱动程序又被分成“block”、“char”、 就是一个文件系统,如MSDOS、VFAT、proc和ext2等。 “asm-$(ARCH)”包含了平录。与板子相关的头文件放在“arch-$(MACHINE)”CPU$(PROCESSOR)”MMU,“arch-arm”initkernelmain.ckernel 用来存放内存管理的源代码,包括MMU。 Linux($Ubuntu$cd 启动菜单配置工具后,选择“LoadanAlternateConfigurationFile(左右箭头键移动选择到“Select”,然后键入回车键)。该选项将载入jx2410文件config-jx2410,该文件保存在 config-jx2410Ok”确认,将退回到主菜单。然后配置选项简介参考$makedepmakemakezImagemakezImagemakemakezImage编译。$make生成的Linux映像文件zImage保存在/home/cvtech/jx2410/arch/arm/boot/ 源码的makefile文件中定义自动执行了zImage文件到/tftpboot 5.4.1RAMDISKRAMDISK随意制作,下面的示例以厂商提供的ramdisk.gz$cd$gunzip 下会生成ramdisk,ramdisk为解压后的Linux的文件系统映像文件。再将ramdisk文件系统映像文件mount(挂载命令)到新建 rd中:$mount-oloopramdisk在图形界面查看rd 下的文件结构。这个就是Linux的文件系统,与目标板启动后的文件系统一样。此时用户可以加入自己的应用程序,如oword等(编译应用程序参考第5.4.1小压缩新生成的ramdisk$umount$gzipramdiskramdisk.gzramdisk挂载(就是烧写)RAMDISK文件系统到实验箱:挂载RAMDISK文件系统必须重新启动系统,在u-boot加载新的RAMDISK文件系统映像文件即可。本系统中RAMDISK根文件系统映像文件必须位于内存地址0x 处,因此,必须在内核加载之前将RAMDISK加载到该地址处。其方法和上个实验中加载内核的方法相同,只是此时必须使用新制作的ramdisk.gz。具体步骤在下面小节Linux内核和文件系统并运行编译成功后的Linux为/home/cvtech/jx2410/arch/arm/boot/zImage。通过JX2410u-boot将该到SDRAM,另外内核启动过程将加载RAMDISK文件系统,因此需要先/tftpboot/ramdisk.gz到SDRAM,然后才能运行内核,具体过程如下所示:先将生成的zImage和ramdisk.gz拷贝到/tftpboot $cp/home/cvtech/jx2410/linux/arch/arm/boot/zImage$cp/home/cvtech/jx2410/root/ramdisk.gzu-bootwindowsu-bootjx2410#后面输入命令使用tftpramdisk.gz和zImage。JX2410# JX2410# JX2410 结构和ramdisk文件系统busyboxramdiskjffs2(制作不使用上节的方法,挂载按上节和参考logo(更换开机画面或其他方式);Linux简述实验内核、文件系统的过程,以及运行验证程序的过程第五章LinuxLinuxLinuxLinuxLinuxlinux:cd、mkdir、cp、mount、tarLinuxLinuxLinuxLinux软件:PCXPVMware+Ubuntu12更详细的内容见《ARM9嵌入式技术及嵌入式Linux高级实践》和《创维特2410开Linux2.00Linux编译、和执行过程如下(以oworld.c为例oworld可以说是最简单的应用程序,在/home/cvtech/jx2410 下有examples 下放置了开发商提供的几个linux示例应用程序,以oworld为例。在终端进入 下,通过如下命令进行编译$gcc-gccx86arm-linux-gccARMarm-linux-gcc-ooworldMakefile文件的作用有点类似于DOS下的批处理文件,通过编写Makefile文件,用户可以将一个很复杂的程序(可能包含上百个甚至的源文件或 linux-2.4.18。CC=/usr/local/arm/2.95.3/bin/arm-linux- CCLD=/usr/local/arm/2.95.3/bin/arm-linux- ##给LD赋值,一般指 程序,可省EXEC EXECOBJSOBJS OBJS.oCFLAGS CFLAGSLDFLAGS gccMakefileall:$(EXEC): ##表示依赖关系, oworld依赖 $(CC)$(LDFLAGS)-o$@$(OBJS)#变量前加$ gcc $@-rm-f$(EXEC)*.elf*.gdbf,$(EXEC)定的可执行文件,以及后缀为*.elf,*.gdb,*.o*.elf*.gdb,*.oelfgdb,o 修改虚拟机linux系统的网络连接(这一步电脑已经配置好):点击系统界面右上方的网络连接图标(ubuntuxubuntu),选择编辑连接-》有线-》添加,有线连接名称24106410IPv4看ip令为ifconfig),在子网掩码输入:。点击保存。重新点击系统界面右上ip 下usbusbPCusbwindowsUSB-bridge-to-serial(com3),com3指的是usb转串口线的端,也可能是 端,win7系统没有自带的,就从网上一个。随便取个名字,打开属性,点击连接时使用,选刚才那个com几,然后点配置,设115200,8,无,1,无。好了,点连接。将usb转串口线和实验箱有一个#号。如接6410实验箱,则等显示到….notServer后,会停止,此时在超级终端中回车,即有“root$real6410#”提示,此时已经进入linux文件系统的终端了。)80”Ubuntuipxxms,即timeoutlinux“mount80:/nfsboot//mnt/nfs”,然后输入“cd/mnt/nfs”进入nfs 然后输入ls,查看有没有挂载成功。如果使用real6410实验箱(正常实验使用的是2410实验箱),上面令改为“mount–onolock11:/nfsboot/ 下,输入命令ls,则超级终端会显示虚拟机linux系统的nfsboot 如果挂载不成功,首先查看虚拟机linux系统的网络连接是否正常,可以使用+IP地址的方式查看网络是否通畅。如果还不行,就“gedit/etc/exports”查看nfs的 先在虚拟机的Ubuntu系统中使用gcc编译运行进试再使用arm-linux-gcc编译得到可执行程序后到 下步),挂载好后,进入 下,执行相应的可执行程序,进行验证LinuxLinuxLinuxLinuxMakefile软件:PCWindowsVmwareUbuntu在Linux和机器硬件之间的接口。设备驱动程序为应用程序了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它完成以下的功能:把数据从内核传送到硬件和从硬件数据在LinuxIOI/OCPU设备,比两个软盘,就可以用从设备号来区分他们。设备文件的的主设备号必须与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法到驱动程序。ledARM9Linux》中4.1节的机源码。理解主要函数定义。序和一个测试程序,实现对步进电机的操作。对照《ARM9Linux高级实践教程》中5.11节的机源码。简述Linux应用程序怎样设备驱动程序LinuxSocketLinuxSOCKETLinuxSOCKETLinuxC机的状态;一个客户端控制某个步进电机时,服务端阻塞其他客户端对改步进电机的操作并返软件:PCWindowsVmwareUbuntu10)同其他任何协议栈一样,TCP向相邻的提供服务。因为TCP的上一层就是应用层,因此,TCPTCP使用TCP服务,提供需要准备发送的数据,用来区分接收数据应用的目的地址和端。通常应用程序通过打开一个套接字(socket)TCPTCPsocketIPsocket主机其一次可接收的数据量,并建立虚连接。下面描述了这三次握手的简单过程。(1)UDPTCPUDP是在网络质量越来越高的今天,UDPTCPUDPLinuxsocketsocket表示;一个完整的套接字则用一个相关描述{协议,本地地址、本地端口、地址、端口}。socketsocketsocketUDP。原始套接字允许对底层协议如IP或ICMP进行直接,它功能强大但使用较为不便,主要用socketsocket、bind、listen、accept、send、sendto、recv、bind:该函数是用于将本地IP地址绑定端的,若绑定其他地址则不能成功。另外,TCPUDPconnect:该函数在TCP中是用于bind的之后的端,用于与服务器端建立连接,UDPbindconnectbindUDPconnectsendtorecvfrom:sendrecvTCPUDPTCPsendrecv;当用在UDPconnect6.2TCPsocketUDP6.36.33UDPsocketint,inttype,int:说明网络程序所在的主机采用的通讯协族(AF_UNIXAF_INETAF_UNIX用于单一的Unix系统进程间通信,而AF_INET是针对Internet的,因而可以允许在主机之type:SOCK_STREAM,SOCK_DGRAMSOCK_STREAMTCP协议,这样会提供按顺序的、可靠、双向、面向连接的比特流。SOCK_DGRAMUDPprotocol:type,0该函数为网络通讯做基本的准备。成功时返回文件描述符,失败时返回-1,errnobind(绑定intbind(intsockfd,structsockaddr*my_addr,intaddrlen)sockfd:是由socket调用返回的文件描述符。addrlensockaddrmy_addrsockaddrsockaddrstructunisgnedshortas_family; 不过由于系统的兼容性,我们一般不用这个结构,而使用另外一个结构(structsockaddr_in)代替。sockaddr_in的定义如下:structunsignedshort unsignedshortint structin_addr unsigned }sin_family一般为AF_INET,sin_addrINADDR_ANY表示可以和任何的主机通信,sin_port是我们要的端。sin_zero[8]是用来填充的。Bind函数将本地的端口同socket返回的文件描述符在一起。成功则返回0,失败的情况和socket一样。listen(intlisten(intsockfd,intbacklog)sockfd:是bind后的文件描述符。接受的排队长度。listen函数将bind的文件描述符变为套接字。返回的情况和bind一样intaccept(intsockfd,structsockaddr*addr,int*addrlen)sockfd:是listen后的文件描述符.addr,addrlen是用来给客户端的程序填写的,服务器端只要传递指针就可以了。bind,listen和accept是服务器端用的函数,accept调用时,服务器端的程序会一直阻塞到有一个客户程序发出了连接。acceptconnect(连接intconnect(intsockfd,structsockaddr*serv_addr,intaddrlen) sockfd:socket返回的文件描述符。serv_addr:了服务器端的连接信息。其中sin_add是服务端的地址addrlen:serv_addrconnect0,sockfd述符失败时返回-1。到第三阶段,可以存取资料了,要资料,我们可以用recv()函数:intrecv(intsockfd,void*buf,intmaxbuf,intoptions)sockfd:socket返回的文件描述符。maxbuf:是缓冲区buf的大小。optionsMSG_ERRQUEUE)。recv()会回传收到信息的大小值,错误,会回传负数值intsend(intsockfd,void*buffer,intmsg_len,int其中sockfd、buffermsg_len和recv()的相同,只不过是这次把要传输的信息先放进bufferoptionsMSG_OOB,MSG_DONTROUTE,MSG_DONTWAIT,MSG_NOSIGNALsend()会回传传linuxCSocket4、使用简单方法进试LinuxTCP/UDP1首先参考本文1.3节“表1ARM9-2410地址空间分配表”,可以看到数码管的数据寄存器地址为0x ,数码管的扫描控制寄存器地址为0x 。同时参考《ARM9嵌入式技术及嵌入式Linux高级实践.pdf》的4.1.5小节的leddemo.c文件代码。*((unsignedchar )=761,01,0;依次类*((unsignedchar )=*((unsignedchar )=*((unsignedchar )=*((unsignedchar )=}staticstructmap_descsmdk_io_desc[]initdata= /* /* r b {vCS8900_BASE,pCS8900_BASE, _IO,0,1,0,0{vCF_MEM_BASE,pCF_MEM_BASE, _IO,0,1,0,0{vCF_IO_BASE,pCF_IO_BASE, _IO,0,1,0,0 中添加一行数组元素“{0xd ,0x ,_IO,0,1,0,0},”注意大括号后的逗号不能省! 对应的虚拟地址为0xd seg.c-Createaninput/outputcharacter#include#include#include#include#include /*for-EBUSY#include /*forverify_area#include /*formodule_init#include /*forget_userandput_user#defineDEVICE_NAME#define intdevice_ioctl(structinode*,structfile*,unsignedint,unsignedlong/*Thisfunctioniscalledwheneveraprocesstries*doanioctlonourdevicefile.Wegettwo*parameters(additionaltotheinodeand*structures,whichalldevicefunctionsget):the*oftheioctlcalledandtheparametergivento*ioctl*Iftheioctliswriteorread/write(meaning*isreturnedtothecallingprocess),theioctl*returnstheoutputofthisunsignedcharseg7table[16]{ /* /* staticintstructinode structfileunsignedintunsignedlong{ printk("DeviceIoctl/*Switchaccordingtotheioctlcalled switch case *((unsignedchar )=~ *((unsignedchar )= case *((unsignedchar )=~ *((unsignedchar )= case*((unsignedchar )=~*((unsignedchar )=case*((unsignedchar )=~*((unsignedchar )=case*((unsignedchar )=~*((unsignedcharcase*((unsignedchar )=~*((unsignedchar )=case*((unsignedchar )=~*((unsignedchar )=case*((unsignedchar )=~*((unsignedchar )=case*((unsignedchar )=~*((unsignedchar )=case*((unsignedchar )=~*((unsignedch

温馨提示

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

评论

0/150

提交评论