嵌入式系统实训报告2文档格式.docx
- 文档编号:20021458
- 上传时间:2023-01-15
- 格式:DOCX
- 页数:33
- 大小:1.93MB
嵌入式系统实训报告2文档格式.docx
《嵌入式系统实训报告2文档格式.docx》由会员分享,可在线阅读,更多相关《嵌入式系统实训报告2文档格式.docx(33页珍藏版)》请在冰豆网上搜索。
四、实验原理15
五、实验步骤16
实验五、LED设备实验17
一、实验目的17
二、实验内容18
三、实验设备及工具18
四、实验原理18
五、实验步骤18
实验六、内核驱动设计-模块方式驱动实验20
一、实验目的20
二、实验内容20
三、实验设备及工具20
四、实验原理20
五、实验步骤25
实验七、按键实验27
一、实验目的27
二、实验内容27
三、实验设备及工具27
四、实验原理27
五、实验步骤27
实验八、嵌入式WEB服务器实验28
一、实验目的28
二、实验内容28
三、实验设备及工具29
四、实验步骤29
实训感悟30
实验一、Linux开发环境的搭建
一、实验目的
熟悉Linux开发环境,学会基于S3C2410的Linux开发环境的配置和使用。
使用Linux的arm-linux-gcc-3.4.6编译,使用基于nfs方式的下载调试,了解嵌入式开发的基本过程。
二、实验内容
本次实验使用RedhatLinux9.0操作系统环境,安装ARM-Linux的开发库及编译器。
创建一个新目录,并在其中编写hello.c和Makefile文件。
学习在Linux下的编程和编译过程,以及ARM开发板的使用和开发环境的设置。
下载已经编译好的文件到目标开发板上运行。
三、实验设备及工具(包括软件调试工具)
硬件:
up-Star认证考试实践板、PC机Pentium500以上,硬盘10G以上。
软件:
PC机操作系统REDHATLINUX9.0+MINICOM+ARM-LINUX开发环境。
四、实验步骤
1、bootloader的烧写
点击“开始”中的“运行”输入cmd,找到sjf2410-s.exe所在文件夹的路径,输入sjf2410-s.exe/f:
u-boot.bin回车。
进入烧写界面。
界面会显示CPU的ID:
0x0032409d
2、超级终端设置
3、内核、根文件系统烧写
1、配置bootloader
2.下载u-boot的配置脚本文件
3、烧写内核
4、烧写根文件系统
5、应用程序下载
6、更新u-boot
4、Linux内核裁减
1、配置、编译内核
1、建立kernel实验目录:
2、进入该实验目录,将kernel源码解压至该目录下:
3、进入解压后的目录linux-2.6.24.4,运行makemenuconfig对内核进行配置:
主要配置的项有:
1)配置系统硬件处理器:
->
SystemType
S3C2410Machines
2)配置LCD驱动:
DeviceDrivers
Graphicssupport
Supportforframebufferdevices(FB[=y])
3)配置网卡驱动:
Networkdevicesupport(NETDEVICES[=y])
Ethernet(10or100Mbit)(NET_ETHERNET[=y])
4)配置文件系统支持:
Filesystems
Miscellaneousfilesystems
NFS文件系统支持:
NetworkFileSystems(NETWORK_FILESYSTEMS[=y])
这样,内核的配置基本上就做好了。
4、编译内核
进入内核源码根目录下,运行make命令编译内核:
如果编译成功,会在内核源码根目录的arch/arm/boot目录下生成内核文件zImage。
5、生成uImage文件
使用由u-boot生成的工具mkimage,生成uImage文件。
执行脚本程序make_uImage:
此时会在内核源码根目录下生成uImage内核文件。
2、烧写内核
1)拷贝刚刚生生成的内核文件uImage到本机(宿主机)TFTP服务器下载目录/tftpboot;
2)启动ARM设备,进入U-BOOT控制台,配置网络IP,下载内核。
a、设置网络IP:
setenvserverip192.168.1.171:
设置宿主机IP地址,即TFTP服务器端机器IP
setenvipaddr192.168.1.172:
设置ARM端U-BOOT中网络设备IP地址(与服务器IP同一网段任意非冲突IP地址即可)
b、烧写内核,并固化到NANDFLASH中:
下载到SDRAM:
擦除NANDFLASH空间:
写入NANDFLASH:
固化到FLASH中后,ARM设备掉电内核不会丢失!
3、引导内核使用U-BOOT引导内存中的内核:
提示:
出现警告错误:
Warning:
unabletoopenaninitialconsole.
Kernelpanic-notsyncing:
Noinitfound.Trypassinginit=optiontokernel.
该错误原因是由于系统中根文件系统无法正确挂载导致,后续根文件系统实验将解决该问题。
实验二、Makefile实验
一、实验目的
1、了解Makefile的基本概念和基本结构
2、初步掌握编写简单Makefile的方法
3、了解递归Make的编译过程
4、初步掌握利用GNUMake编译应用程序的方法
二、实验环境
up-Star认证考试实践板,PC机Pentium500以上,硬盘40G以上,内存大于128M。
PC机操作系统REDHATLINUX9.0+MINICOM+ARM-LINUX开发环境。
程不断地从共享的循环缓冲区读取
三、实验原理
在Linux或Unix环境下,对于只含有几个源代码文件的小程序(如hello.c)的编译,可以手工键入gcc命令对源代码文件逐个进行编译。
Makefile是按照某种脚本语法编写的文本文件,而GNUmake能够对Makefile中指令进行解释并执行编译操作。
Makefile文件定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。
GNUmake工作时的执行步骤如下:
1、读入所有的Makefile。
2、读入被include的其它Makefile。
3、初始化文件中的变量。
4、推导隐晦规则,并分析所有规则。
5、为所有的目标文件创建依赖关系链。
6、根据依赖关系,决定哪些目标要重新生成。
7、执行生成命令。
其中1-5步为第一个阶段,6-7为第二个阶段。
第一个阶段中,如果定义的变量被使用了,那么,make会把其展开在使用的位置。
但make并不会完全马上展开,make使用的是拖延战术,如果变量出现在依赖关系的规则中,那么仅当这条依赖被决定要使用了,变量才会在其内部展开。
1.Makefile的基本结构
Makefile的一般结构:
target……:
dependency……
command……
结构中各部分的含义:
(1)target(目标):
一个目标文件,可以是Object文件,也可以是执行文件。
还可以是一个标签(Label)。
(2)dependency(依赖):
要生成目标文件(target)所依赖哪些文件
(3)command(命令):
创建项目时需要运行的shell命令(注:
命令(command)部分的每行的缩进必须要使用Tab而不能使用多个空格)。
2.Makefile的基本内容
Makefile一般包括包含:
显式规则、隐晦规则、变量定义、文件指示和注释等五个内容。
(1)显式规则:
显式规则说明如何生成一个或多个的目标文件。
这是由Makefile的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。
(2)变量定义:
在Makefile中可以定义一系列的变量,变量一般都是字符串,当Makefile被执行时,变量的值会被扩展到相应的引用位置上。
(3)隐含规则:
由于GNUmake具有自动推导功能,所以隐晦规则可以比较粗糙地简略地书写Makefile,然后由GNUmake的自动推导功能完成隐晦规则的内容。
(4)文件指示:
其包括了三个部分,一个是在一个Makefile中引用另一个Makefile,就像C语言中的include一样;
另一个是指根据某些情况指定Makefile中的有效部分,就像C语言中的预编译#if一样;
还有就是定义一个多行的命令。
(5)注释:
Makefile中只有行注释,和UNIX的Shell脚本一样,其注释是用“#”字符,如果你要在你的Makefile中使用“#”字符,可以用反斜框进行转义,如:
“\#”。
四、实验步骤
1.使用命令行的方式手动编译程序方法
1.1利用文本编辑器创建hello.c文件
1.2手动编译hello应用程序
在hello.c的目录的终端下输入:
1.3先后执行如下命令
查看并记录所生成的文件和运行的结果。
1.4执行makeclean命令:
1.5修改hello.c文件,重复第4、5步操作,查看并记录所生成的文件和运行结果,并与手动编译进行比较,写出你的结论。
1.6重新编辑makefile文件(斜黑体表示修改部分)
2.多个.c文件的编译
2.1创建文件hello1.c、hello2.c、hello.h和makefile
2.2先后执行如下命令
2.3修改makefile文件(斜黑体表示修改部分)
实验三、多线程程序设计
1、了解多线程程序设计的基本原理。
2、学习pthread库函数的使用。
读懂pthread.c的源代码,熟悉几个重要的PTHREAD库函数的使用。
掌握共享锁和信号量的使用方法。
进入/up-Star2410/exp/basic/pthread目录,运行make产生pthread程序,使用nfs方式连接开发主机进行运行实验。
三、实验设备及工具
1、阅读源代及编译应用程序
进入exp/basic/pthread目录,使用vi编辑器或其他编辑器阅读理解源代码。
运行make产生pthread可执行文件,多线程切换到minicom终端窗口,使用nfsmount开发主机的/up-Star2410到/host目录。
2、下载和调试
进入/host/exp/basic/pthread目录,运行pthread,观察运行结果的正确性。
运行程序最后一部分结果如下:
实验四、串行端口程序设计
1、了解在linux环境下串行程序设计的基本方法。
2、掌握终端的主要属性及设置方法,熟悉终端I/O函数的使用。
3、学习使用多线程来完成串口的收发处理。
读懂程序源代码,学习终端I/O函数的使用方法,学习将多线程编程应用到串口的接收和发送程序设计中。
四、实验原理
异步串行I/O方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。
数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连线,最少用一对线即可进行。
接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。
为了恢复发送的信息,双方必须协调工作。
在微型计算机中大量使用异步串行I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。
但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。
图1串行通信字符格式
图2给出异步串行通信中一个字符的传送格式。
开始前,线路处于空闲状态,送出连续“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连接电缆,其连接方式如图2
图2串口通讯实验流程图
五、实验步骤
1、阅读理解源码
进入exp\basic\tty目录,使用vi编辑器或其他编辑器阅读理解源代码。
2、编译应用程序
运行make产生term可执行文件
3、下载调试
切换到minicom终端窗口,使用nfsmount开发主机的/up-Star2410到/host目录。
进入exp\basic\tty目录,运行term,观察运行结果的正确性。
注意:
如果在执行./term时出现下面的错误,可以通过我们前文提到的方法建立一个连接来解决。
/dev/ttyS0:
Nosuchfileordirectory
解决方法:
[/mnt/yaffs]cd/dev
[/dev]ln–sf/dev/tts/0ttyS0(注意首字母是l,不是数字1)
由于内核已经将串口1作为终端控制台,所以可以看到term发出的数据,却无法看到开发主机发来的数据,可以使用另外一台主机连接串口2进行收发测试;
这时要修改一下执行命令,在term后要加任意参数(下面以./termwww为例)
Ctrl+c或者ESC可使程序强行退出。
如果在执行./termwww时出现下面的错误,可以通过我们前文提到的方法建立两个连接来解决;
[/dev]ln–sf/dev/tts/1ttyS1(注意首字母(红色的)是l,不是数字1;
而后面的两个蓝色的都是1,2,3的1)
实验五、LED设备实验
1、学习LED的相关知识。
2、了解SPI接口的相关知识。
学习LED的相关知识,了解其工作原理,
在某些半导体材料的PN结中,注入的少数载流子与多数载流子复合时会把多余的能量以光的形式释放出来,从而把电能直接转换为光能。
PN结加反向电压,少数载流子难以注入,故不发光。
这种利用注入式电致发光原理制作的二极管叫发光二极管,通称LED。
LED的发光颜色和发光效率与制作LED的材料和工艺有关,目前广泛使用的有红、绿、蓝三种。
由于LED工作电压低(仅1.5-3V),能主动发光且有一定亮度,亮度又能用电压(或电流)调节,本身又耐冲击、抗振动、寿命长(10万小时),所以在大型的显示设备中,目前尚无其他的显示方式与LED显示方式匹敌。
把红色和绿色的LED放在一起作为一个像素制作的显示屏叫双基色屏或伪彩色屏;
把红、绿、蓝三种LED管放在一起作为一个像素的显示屏叫三基色屏或全彩屏。
制作室内LED屏的像素尺寸一般是2-10毫米,常常采用把几种能产生不同基色的LED管芯封装成一体,室外LED屏的像素尺寸多为12-26毫米,每个像素由若干个各种单色LED组成,常见的成品称像素筒或像素模块。
LED显示屏如果想要显示图象,则需要构成像素的每个LED的发光亮度都必须能调节,其调节的精细程度就是显示屏的灰度等级。
灰度等级越高,显示的图像就越细腻,色彩也越丰富,相应的显示控制系统也越复杂。
进入/up-Star2410/exp/basic/led目录,使用vi编辑器或其他编辑器阅读理解源代码。
运行make产生可执行文件led
切换到minicom终端窗口,使用nfsmount开发主机的/up-Star2410到/host目录,然后进入/host/exp/basic/led目录,用insmodmini2410-leds.ko命令插入led驱动,并用lsmod命令查看是否已经插入。
(该mini2410-leds.ko位于up-Star认证考试实践板内)
加载驱动程序
查看新加设备对应的主设备号:
手动创建设备节点:
实验六、内核驱动设计-模块方式驱动实验
1.学习在LINUX下进行驱动设计的原理
2.掌握使用模块方式进行驱动开发调试的过程
二、实验内容
在PC机上编写简单的虚拟硬件驱动程序并进行调试,实验驱动的各个接口函数的实现,分析并理解驱动与应用程序的交互过程。
三、实验设备及工具
PC机Pentium500以上,硬盘40G以上,内存大于128M。
PC机操作系统REDHATLINUX9.0+MINICOM+AMR-LINUX开发环境。
四、实验原理
Linux中的驱动设计是嵌入式Linux开发中十分重要的部分,它要求开发者不仅要熟悉Linux的内核机制、驱动程序与用户级应用程序的接口关系、考虑系统中对设备的并发操作等等,而且还要非常熟悉所开发硬件的工作原理。
Linux的驱动开发调试有两种方法,一种是直接编译到内核,再运行新的内核来测试;
二是编译为模块的形式,单独加载运行调试。
第一种方法效率较低,但在某些场合是唯一的方法。
模块方式调试效率很高,它使用insmod工具将编译的模块直接插入内核,如果出现故障,可以使用rmmod从内核中卸载模块。
不需要重新启动内核,这使驱动调试效率大大提高。
我们的实验在PC机和UP-NETARM2410-S上都可以运行,编译时使用不同的编译器就可以了。
1.主设备号和次设备号
传统方式中的设备管理中,除了设备类型外,内核还需要一对称作主次设备号的参数,才能唯一标识一个设备。
主设备号相同的设备使用相同的驱动程序,次设备号用于区分具体设备的实例。
比如PC机中的IDE设备,一般主设备号使用3,WINDOWS下进行的分区,一般将主分区的次设备号为1,扩展分区的次设备号为2、3、4,逻辑分区使用5、6….。
设备操作宏MAJOR()和MINOR()可分别用于获取主次设备号,宏MKDEV()用于将主设备号和次设备号合并为设备号,这些宏定义在include/linux/kdev_t.h中。
对于LINUX中对设备号的分配原则可以参考Documentation/devices.txt。
2.设备驱动程序接口
通常所说的设备驱动程序接口是指结构file_operations{},它定义在include/linux/fs.h中。
file_operations数据结构说明
structfile_operations{
structmodule*owner;
loff_t(*llseek)(structfile*,loff_t,int);
ssize_t(*read)(structfile*,char*,size_t,loff_t*);
ssize_t(*write)(structfile*,constchar*,size_t,loff_t*);
int(*readdir)(structfile*,void*,filldir_t);
unsignedint(*poll)(structfile*,structpoll_table_struct*);
int(*ioctl)(structinode*,structfile*,unsignedint,unsignedlong);
int(*mmap)(structfile*,structvm_area_struct*);
int(*open)(structinode*,structfile*);
int(*flush)(structfile*);
int(*release)(structinode*,structfile*);
int(*fsync)(structfile*,structdentry*,intdatasync);
int(*fasync)(int,structfile*,int);
int(*lock)(structfile*,int,structfile_lock*);
ssize_t(*readv)(structfile*,conststructiovec*,unsignedlong,loff_t*);
ssize_t(*writev)(structfile*,conststructiovec*,unsignedlong,loff_t*);
ssize_t(*sendpage)(structfile*,structpage*,int,size_t,loff_t*,int);
unsignedlong(*get_unmapped_area)(structfile*,unsignedlo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 报告