《嵌入式操作系统》实验报告文档格式.docx

上传人:b****6 文档编号:19092394 上传时间:2023-01-03 格式:DOCX 页数:23 大小:1.46MB
下载 相关 举报
《嵌入式操作系统》实验报告文档格式.docx_第1页
第1页 / 共23页
《嵌入式操作系统》实验报告文档格式.docx_第2页
第2页 / 共23页
《嵌入式操作系统》实验报告文档格式.docx_第3页
第3页 / 共23页
《嵌入式操作系统》实验报告文档格式.docx_第4页
第4页 / 共23页
《嵌入式操作系统》实验报告文档格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

《嵌入式操作系统》实验报告文档格式.docx

《《嵌入式操作系统》实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《《嵌入式操作系统》实验报告文档格式.docx(23页珍藏版)》请在冰豆网上搜索。

《嵌入式操作系统》实验报告文档格式.docx

staticinthello_init(void)

{

printk(KERN_ALERT"

##############Hello,world############\n"

return0;

}

//驱动程序出口函数

staticvoidhello_exit(void)

###############Goodbye,world#########\n"

module_init(hello_init);

module_exit(hello_exit);

有关驱动程序的编写规,请参考课程教材,本实验只在编写简单的驱动(核)程序并加入到Linux核目录树中,使用户熟悉编译核的过程。

该驱动程序是向终端输出相关程序信息。

编写好helloworld.c后将其拷贝到核源码树的drivers/char/目录下。

[rootlocalhost/]#cphelloworld.c/UP-Magic210/SRC/kernel/linux-2.6.35.7/drivers/char/

(2)、进入实验核源码目录修改driver/char/目录下的Kconfig文件,按照Kconfig语法添加helloworld程序的菜单支持

[rootlocalhost/]#cdUP-Magic210/SRC/kernel/linux-2.6.35.7/

[rootlocalhostlinux-2.6.35.7]#vidrivers/char/Kconfig

例如:

在Kconfig文件中的source“driver/char/hw_random/Kconfig”下面添加如下:

source“driver/char/hw_random/Kconfig”

configHELLO_MODULE

bool"

HelloWorldTest"

dependsonCPU_S5PV210

help

ThisisademototestkernelexperimentOnUP-Magic210.

(3)、进入实验核源码目录修改driver/char/目录下的Makefile文件,按照核中Makefile语法添加helloworld程序的编译支持

[rootlocalhostlinux-2.6.35.7]#vidrivers/char/Makefile

在Makefile中(大约在91行)添加如下一行

obj-$(CONFIG_TOSHIBA)+=toshiba.o

obj-$(CONFIG_I8K)+=i8k.o

obj-$(CONFIG_DS1620)+=ds1620.o

obj-$(CONFIG_HW_RANDOM)+=hw_random/

obj-$(CONFIG_HELLO_MODULE)+=helloworld.o

obj-$(CONFIG_PPDEV)+=ppdev.o

(4)、运行makemenuconfig配置核对helloworld程序的支持:

[rootlocalhostlinux-2.6.35.7]#makedistclean

[rootlocalhostlinux-2.6.35.7]#makemenuconfig

先加载核配置单,如图:

然后进入到DeviceDrivers--->

菜单中如图:

进入到Characterdevices--->

如图:

进入该菜单会发现[]HelloWorldTest选项,按下空格将其静态编译进核

退出保存核配置

(5)、重新编译核

在核源码的顶层目录下编译核

[rootlocalhostlinux-2.6.35.7]#make

scripts/kconfig/conf-sarch/arm/Kconfig

CHKinclude/linux/version.h

CHKinclude/generated/utsrelease.h

make[1]:

“include/generated/mach-types.h”是最新的。

CALLscripts/checksyscalls.sh

CHKinclude/generated/compile.h

CCdrivers/char/helloworld.o

LDdrivers/char/built-in.o

LDdrivers/built-in.o

LDvmlinux.o

MODPOSTvmlinux.o

初次编译核源码,由核代码庞大,所需较长时间(大约几分钟至10几分钟不等)。

编译成功后会在核源码目录的arch/arm/boot/目录下生成核压缩文件zImage。

[rootlocalhostlinux-2.6.35.7]#lsarch/arm/boot/zImage

arch/arm/boot/zImage

[rootlocalhostlinux-2.6.35.7]#

(6)、将新生成的核镜像文件zImage烧写到UP-Magic210型设备中,这里不在赘述(烧写步骤可以参考文档“UP-Magic210出厂程序烧写手册(LINUX)V1.0.pdf”第23页)。

新核烧写成功后启动UP-Magic210型系统,可以在串口终端中查看到Linux核在启动过程中打印出来的如下信息:

S3C_LCDclockgotenabled:

:

133.000Mhz

Window[0]-FB1:

map_video_memory:

clearff600000:

00096000

FB1:

dma=57100000cpu=ff600000size=00096000

Console:

switchingtocolourframebufferdevice80x30

fb-1069494052:

framebufferdevice

lp:

driverloadedbutnodevicesfound

###################Hello,world###################

ppdev:

user-spaceparallelportdriver

s3c-uart.0:

ttySAC0atMMIO0x7f005000(irq=37)isaS3C

s3c-uart.1:

ttySAC1atMMIO0x7f005400(irq=38)isaS3C

s3c-uart.2:

ttySAC2atMMIO0x7f005800(irq=39)isaS3C

RAMDISKdriverinitialized:

16RAMdisksof4096Ksize1024blocksize

loop:

loaded(max8devices)

nbd:

registereddeviceatmajor43

dm9000EthernetDriver

eth0:

dm9000atc7866000,c7866002IRQ78MAC:

00:

22:

12:

34:

56:

90

S3CIrDAdriver,(c)2006SamsungElectronics

Linuxvideocaptureinterface:

v2.00

可以看到在终端上打印出###################Hello,world###################信息。

同样进入ARM系统后也可以通过dmesg命令查看核启动信息。

[rootUP-TECHyaffs]#dmesg

4.实验结果

思考:

如何能在Linux系统启动时,输出显示自定义的文本信息,请修改Linux核启动代码,完成此功能。

5.实验中遇到的问题及解决方法

在实验中遇到一些问题,例如在复制的时候我记得原来用cp 

–a 

/tmp/linux-2.4.18-br.tar.gz 

就可以了,可这次不行必须要用cp 

./到自己的目录下。

不过最后都顺利解决了问题,在编译复习了makemenuconfig的编译配置。

实验二根文件系统实验

✧了解UP-Magic210魔法师实验套件Linux系统下根文件系统结构

✧掌握根文件系统的搭建过程

✧掌握busybox、mkcramfs等工具的使用方法

✧使用busybox生成文件系统中的命令部分,使用mkcramfs工具制作CRAMFS格式的根文件系统。

✧分析根文件系统etc目录下重要配置文件的格式及语法,熟悉根文件系统的启动过程

3.实验步骤

/UP-Magic210/SRC/rootfs/

一、在核中添加文件系统类型支持

(1)、进入宿主机中UP-Magic210型光盘核目录:

[rootlocalhost~]#cd/UP-Magic210/SRC/kernel/linux-2.6.35.7/

(2)、运行makemenuconfig命令配置核文件系统相关支持

添加对CRAMFS根文件以及YAFFS2文件系统系统支持

进入Filesystems--->

菜单

进入Miscellaneousfilesystems--->

选择<

*>

CompressedROMfilesystemsupport(cramfs)支持,如图:

YAFFS2filesystemsupport支持,配置如下图

退出保存核配置

运行make编译核,重新烧写核。

二、根文件系统的实现

(1)、制作BUSYBOX工具集

进入本次实验目录

[rootlocalhostrootfs]#cd/UP-Magic210/SRC/rootfs/

[rootlocalhostrootfs]#ls

bash-4.0.tar.bz2busybox-1.19.3.tar.bz2rootfs

解压busybox-1.19.3.tar.bz2压缩包

[rootlocalhostrootfs]#tarxjvfbusybox-1.19.3.tar.bz2

产生busybox-1.19.3目录

bash-4.0.tar.bz2busybox-1.19.3busybox-1.19.3.tar.bz2rootfs

进入busybox-1.19.3目录进行busybox的修改及配置

修改此目录的Makefile文件,更改ARCH?

和CROSS_COMPILE?

=宏定义,如下:

CROSS_COMPILE?

=arm-none-linux-gnueabi-

ARCH?

=arm

退出保存。

运行makemenuconfig对工具集进行定制

[rootlocalhostbusybox-1.19.3]#makemenuconfig

进入BusyboxSettings--->

选项

进入BusyboxLibraryTuning--->

选中[*]Fancyshellprompts支持

进入MiscellaneousUtilities--->

去除[]inotifyd选项

接下来的配置可以根据具体情况来设置或裁剪相关工具。

退出保存设置。

编译busybox

[rootlocalhostbusybox-1.19.3]#make

安装busybox

[rootlocalhostbusybox-1.19.3]#makeinstall

成功后会在当前目录下生成_install目录,编译的工具也都集成在该安装目录下。

[rootlocalhostbusybox-1.19.3]#cd_install/

[rootlocalhost_install]#ls

binlinuxrcsbinusr

[rootlocalhost_install]#

可以看到_install目录下生成了根文件系统常用的命令及工具,接下来的工作,用户可以根据需要将_install目录下生成的命令拷贝到根文件系统相应目录下。

将从busybox生成的which命令拷贝到根文件系统目录的usr/bin目录下,这样,我们的根文件系统就支持which命令了。

(2)、制作CRAMFS根文件系统镜像

实验中已经提供了mkcramfs制作工具以及mkrootfs.sh脚本文件,用户只需执行mkrootfs.sh脚本文件来使用mkcramfs制作根文件系统镜像即可。

当然也可以手动的执行命令:

./mkcramfsrootfs_up210rootfs_up210.cramfs

[rootlocalhostrootfs]#./mkrootfs.sh

此时在当前目录下生成根文件系统镜像文件rootfs_up210.cramfs

mkcramfsmkrootfs.shrootfs_up210rootfs_up210.cramfs

三、烧写根文件系统

将新生成的根文件系统镜像文件rootfs_up210.cramfs烧写到UP-Magic210型设备中进行测试,这里不在赘述(烧写步骤可以参考文档“UP-Magic210出厂程序烧写手册(LINUX)V1.0.pdf”第24页)。

如果用户新添加了相关命令或工具(例如which命令)启动系统后可以验证用户添加入的新命令或工具。

make编译有错误,进行源代码的修改。

之后再makemenuconfig中将这个宏对应的东西配置成没有就好了,如果没有这个宏,那么就直接用出错的那个文件的名字找就行了,找到后给它去掉,将来make的时候就不会编译这个文件了,在次进行make编译后,编译出来了busybox这个东西,就在证明编译通过了。

实验三模块方式驱动实验

✧学习在LINUX下进行驱动设计的原理

✧掌握使用模块方式进行驱动开发调试的过程

✧在PC机上编写简单的虚拟硬件驱动程序并进行调试,实验驱动的各个接口函数的实现,分析并理解驱动与应用程序的交互过程。

✧在ARM设备上创建设备驱动节点,编写用户空间应用程序,对驱动程序进行测试。

(1)、编译驱动程序/UP-Magic210/SRC/exp/driver/01_demo/demo.c,手工加载驱动程序,通过设备号建立驱动设备节点,执行应用程序测试该驱动及设备,分析驱动程序demo.c。

进入实验目录编译源程序

[rootlocalhost/]#cd/UP-Magic210/SRC/exp/driver/01_demo/

清除中间代码,重新编译

[rootlocalhost01_demo]#makeclean

[rootlocalhost01_demo]#make

当前目录下生成驱动程序demo.ko和应用测试程序test_demo。

启动UP-Magic210实验系统,连好网线、串口线。

通过串口终端挂载宿主机实验目录(注意:

虚拟机IP地址需要设置为:

192.168.12.157)。

[rootUP-TECHyaffs]#mount-tnfs-onolock192.168.12.157:

/UP-Magic210/mnt/nfs

进入串口终端的NFS共享实验目录

[rootUP-TECHyaffs]#cd/mnt/nfs/SRC/exp/driver/01_demo/

手动加载驱动程序demo.ko

[rootUP-TECH01_demo]#insmoddemo.ko

通过设备号建立驱动设备节点

[rootUP_21001_demo]#mknod/dev/democ2510

执行应用程序测试该驱动及设备,分析应用程序测试结果。

[rootUP-TECH01_demo]#./test_demo

(2)、请参考驱动程序demo.c,编写一个虚拟字符设备驱动程序并进行调试,该虚拟字符设备驱动程序完成如下功能:

◆在核模块初始化函数中,实现动态申请设备号并注册该设备,动态建立设备文件节点;

◆在核模块的退出函数中,实现设备注销,删除该设备文件节点;

◆实现file_operations设备驱动文件结构体中的open、read、write、ioctl和release函数功能,其中:

Ø

open函数:

设置一个计数器count,每调用一次open函数,计数器count加1。

read函数:

读取用户写入的字符串数据的排列结果。

write函数:

实现将用户写入的字符串数据,按照每个字符的ASCII值逆序或升序排序(根据开关值asc排序:

asc=0,逆序排序;

asc=1,升序排序;

)。

ioctl函数:

设置排序方式开关值asc。

release函数:

每调用一次release函数,计数器count减1。

5.实验中遇到的问题及解决方法。

没有修改makefile文件直接进行编译导致出错。

实验前没有认真阅读实验原理,看懂实验代码,所以在使用make命令以后无法实现。

最后在同学的帮助下找到了原因。

忽略了自己使用的是gcc编译而不是交叉编译,因而没有设置节点。

尝试了很多次以后才发现了问题,期间以为是test_demo文件的问题,但是导入导出很多次都没有解决,问了同学才找到了问题。

实验四LED驱动及控制实验

✧了解ARM设备外围电路结构与接口原理

✧熟悉Linux系统下硬件驱动编程

✧编程实现对嵌入式设备上LED灯的控制

✧阅读UP-Magic210平台硬件文档,熟悉ARM处理硬件外围接口电路

✧编程实现UP-Magic210平台设备上LED驱动及应用测试程序

编写UP-Magic210平台设备上LED驱动及应用测试程序并进行调试,该LED驱动程序完成如下功能:

◆实现file_operations设备驱动文件结构体中的ioctl函数,完成如下功能:

一次调用控制所有的LED亮或灭;

控制单个LED亮或灭;

实现流水灯显示,流水灯显示效果自行定义,流水灯循环显示次数由用户应用程序传入。

程序:

驱动程序分析:

linux/kernel.h>

linux/fs.h>

linux/miscdevice.h>

linux/delay.h>

asm/irq.h>

asm/arch/regs-gpio.h>

asm/hardware.h>

GPL"

#defineDEVICE_NAME"

leds"

//驱动名称

#defineDEVICE_MAJOR231//驱动主设备号

#defineDEVICE_MINOR0//驱动次设备号

//声明字符设备类结构

structc

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学反思汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1