嵌入式操作系统试验报告_第1页
嵌入式操作系统试验报告_第2页
嵌入式操作系统试验报告_第3页
嵌入式操作系统试验报告_第4页
嵌入式操作系统试验报告_第5页
已阅读5页,还剩20页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、嵌入式操作系统实验报告班级 计算机学号姓名 指导教师 庄旭菲内蒙古工业大学信息工程学院计算机系2018 年 6 月实验一 Linux 内核移植与编译实验1. 实验目的了解 Linux 内核相关知识与内核结构了解 Linux 内核在 ARM 设备上移植的基本步骤和方法掌握 Linux 内核裁剪与定制的基本方法2. 实验内容分析 Linux 内核的基本结构,了解 Linux 内核在 ARM 设备上移植的一些基本步骤及常识。学习 Linux 内核裁剪定制的基本配置方法, 利用 UP-Magic210 型设备配套 Linux 内核进行自定 义功能 (如 helloworld 显示 )的添加,并重新编译

2、内核源码,生成内核压缩文件zImage ,下载到UP-Magic210 型设备中测试。3. 实验步骤实验目录: /UP-Magic210/SRC/kernel/ 编译内核: 在宿主机端为 UP-Magic210 设备的 Linux 内核 编写简单的测试驱动(内核)程序 并修改内核目录中相关文件,添加对测试驱动程序的支持。(1)、使用 vim 编辑器手动编写实验代码内如如下:#include #include MODULE_LICENSE(Dual BSD/GPL);(3) 、进入实验内核源码目录修改driver/char/ 目录下的 Makefile 文件,按照内核中 Makefile 语法添

3、加 helloworld 程序的编译支持rootlocalhost vi drivers/char/Makefile在 Makefile 中 (大约在 91 行 )添加如下一行 obj-$(CONFIG_TOSHIBA) += obj-$(CONFIG_I8K)+=obj-$(CONFIG_DS1620)+=obj-$(CONFIG_HW_RANDOM) += hw_random/ obj-$(CONFIG_HELLO_MODULE) += obj-$(CONFIG_PPDEV) +=(4) 、运行 make menuconfig 配置内核对 helloworld 程序的支持 : rootlo

4、calhost make distcleanrootlocalhost make menuconfig 先加载内核配置单,如图:然后进入到 Device Drivers - 菜单中如图:进入到 Character devices- 如图:进入该菜单会发现 Hello World Test 选项,按下空格将其静态编译进内核退出保存内核配置(5) 、重新编译内核在内核源码的顶层目录下编译内核rootlocalhost make scripts/kconfig/conf -s arch/arm/KconfigCHK include/linux/CHK include/generated/make1:

5、 “ include/generated/ ”是最新的CALL scripts/CHK include/generated/CC drivers/char/LD drivers/char/LD drivers/LDMODPOST初次编译内核源码,由内核代码庞大,所需较长时间( 大约几分钟至 10 几分钟不等 )。编译成功后会在内核源码目录的 arch/arm/boot/ 目录下生成内核压缩文件 zImage 。rootlocalhost ls arch/arm/boot/zImagearch/arm/boot/zImagerootlocalhost 、将新生成的内核镜像文件 zImage 烧写

6、到 UP-Magic210 型设备中,这里不在 赘述(烧写步骤可以参考文档 “U-PMagic210 出厂程序烧写手册 (LINUX)第 23 页)。新内核烧写成功 后启动 UP-Magic210 型系统, 可以在串口终端中查看到 Linux 内核在启动过程中打印出来的如 下信息:S3C_LCD clock got enabled : MhzWindow0- FB1 : map_video_memory: clear ff600000:00096000FB1 : map_video_memory: dma= cpu=ff600000 size=00096000Console: switchin

7、g to colour frame buffer device 80x30fb-52: frame buffer devicelp: driver loaded but no devices found#Hello, world#ppdev: user-space parallel port driver: ttySAC0 at MMIO 0x7f005000 (irq = 37) is a S3C: ttySAC1 at MMIO 0x7f005400 (irq = 38) is a S3C: ttySAC2 at MMIO 0x7f005800 (irq = 39) is a S3CRAM

8、DISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize loop: loaded (max 8 devices)nbd: registered device at major 43dm9000 Ethernet Drivereth0: dm9000 at c7866000,c7866002 IRQ 78 MAC: 00:22:12:34:56:90S3C IrDA driver, (c) 2006 Samsung ElectronicsLinux video capture interface:可以看到在终端上打印出

9、 #Hello, world# 信息。同样进入 ARM 系统后也可以通过 dmesg 命令查看内核启动信息。rootUP-TECH yaffs# dmesgS3C_LCD clock got enabled : MhzWindow0- FB1 : map_video_memory: clear ff600000:00096000FB1 : map_video_memory: dma= cpu=ff600000 size=00096000Console: switching to colour frame buffer device 80x30fb-52: frame buffer device

10、lp: driver loaded but no devices found#Hello, world#ppdev: user-space parallel port driver: ttySAC0 at MMIO 0x7f005000 (irq = 37) is a S3C: ttySAC1 at MMIO 0x7f005400 (irq = 38) is a S3C: ttySAC2 at MMIO 0x7f005800 (irq = 39) is a S3CRAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocks

11、ize4. 实验结果思考:如何能在 Linux 系统启动时,输出显示自定义的文本信息,请修改 Linux 内核启动代码, 完成此功能。5. 实验中遇到的问题及解决方法在实验中遇到一些问题,例如在复制的时候我记得原来用cp a /tmp/ 就可以了,可这次不行必须要用 cp a /tmp/ ./ 到自己的目录下。不过最后都顺利解决了问题,在编译复习了 make menuconfig 的编译配置实验二 根文件系统实验1. 实验目的了解 UP-Magic210 魔法师实验套件 Linux 系统下根文件系统结构掌握根文件系统的搭建过程掌握 busybox 、 mkcramfs 等工具的使用方法2. 实

12、验内容使用 busybox 生成文件系统中的命令部分, 使用 mkcramfs 工具制作 CRAMFS 格式的根文件系 统。分析根文件系统 etc 目录下重要配置文件的格式及语法,熟悉根文件系统的启动过程3实验步骤实验目录: /UP-Magic210/SRC/kernel/ 一、在内核中添加文件系统类型支持1 )、进入宿主机中 UP-Magic210 型光盘内核目录:rootlocalhost # cd /UP-Magic210/SRC/kernel/ ( 2)、运行 make menuconfig 命令配置内核文 件系统相关支持 添加对 CRAMFS 根文件以及 YAFFS2 文件系统系统支

13、持进入 File systems - 菜单进入 Miscellaneous filesystems - 菜单选择 Compressed ROM file system support (cramfs) 支持,如图:选择 YAFFS2 file system support 支持,配置如下图退出保存内核配置运行 make 编译内核,重新烧写内核二、根文件系统的实现(1)、制作 BUSYBOX 工具集进入本次实验目录rootlocalhost rootfs# cd /UP-Magic210/SRC/rootfs/rootlocalhost rootfs# lsrootfs解压 压缩包rootloc

14、alhost rootfs# tar xjvf 产生 目录rootlocalhost rootfs# lsrootfs进入 目录进行 busybox 的修改及配置 修改此目录的 Makefile 文件,更改 ARCH 和 CROSS_COMPILE 宏= 定义,如下:CROSS_COMPILE = arm-none-linux-gnueabi-ARCH = arm退出保存。运行 make menuconfig 对工具集进行定制rootlocalhost make menuconfig进入 Busybox Settings - 选项进入 Busybox Library Tuning - 选项选中

15、 *Fancy shell prompts 支持uirvF 歪5W4PTP 円- gsr.;|严5=-=雲 lbTHrG f ngjrprina 4 V ! 1. uQmxi.A.SP fluRe&A-u-*am* Hh.4u f-QEl rf-rT3 - A-m-h-nvA Fn V-r*ijAKJLlr l-9 NeLfi* cr - m 狀IR-aTEtlk 席二口-J0ur in l 1 S2S3 ml_=F 4VIM2= dtsF- m一耳 nyHHiMH ppn_t =nrt 时3空亘*nJ曽=UT*J:ij 帆旨山L rmpE(L-H-X 3H3S DMMlmu.lengtH3

16、蠶巴呵=?b n 9ww_s L - 帘 clle驾.ivIR1一严= i AEL*W-u.srHLBin FT1 t.t-nlm 匕 FxZ-= 7e-_ nyLnurl! fli-d?F 一一畫 f Husmvl亠电 Misce=aneous U 兰 Mes :iv亠!?- Irpu/ am rIT ?3- dHrrl飞* 出 Fur# 日一mpnl上w一 1昌1-= 一FTTUr鈕 Sv nnrlrFV*? r# 初只Kv rii 二 mdt 芋全Vlr-H匸.JilhiQ.=1|也11咚* hllfAE 才&EEMrku 彳-lrAKF H 呻r rw 置*2 Egc-InFB-h-b

17、l笆=二=二 rMug ze-sae A V 事OLm* 才卅那二ins-ifyd 俳寻-JT.弓 gr-lthiuL2i.lLrit 訂 t;4|孑1|二9Asgle wiLirs 7IEL!i.LzIL.Lli.Liiij- fev1-tm ;= ! V rdkllFIMtiM 初二一st-、p.i=豊FM_r二$电二 n-zl-zHLnTL LluncK-Efi亠z2_Mmg llr=“=x rim. _=二二h V HM-l =ITi.lH-*idnsm 二二ZH ! nsIFUudlxlulp 74HMW 2frlllto n 口sinfsilrrLiM3Fkv*rr* 百 u-rE

18、2 4riTI二 i-t- 4-3 J fe-=3=z IV-迥普呂=亘,1二一: KrJ -rBlzkr-/*r PFTIi匸 c as- 4S-W.&3K .苫ud*L*rJtM-JJ凰EstHfaO I# e%3 *ul- - gllrflit.1 bm-l- *1 ITE-lkFIl -C 冬 P l:fF in黒監em nnI *4 Tu-W -Ti3n# c-J-?-J j IFWN二二F X afcdv71:U ”-31 亠吕:K4H2E fl -ca7.- I-EdEHII . i.EZYfT1i一器EF kfar v!s AE 鵲吕wff-lTj 士囂T-If hprj&fc

19、h=歳5iVE 書T77 =二=Efl-il*s-二r= hlrwld土-危r 二? dr? 7B EE.Mttr igEH忌 g*s-冷 n 4 口博%*#fe-L 二h&_JHsF*. j=i=.2-w ri甫 n Kmn弓【LsnM-AT +:fvhlr-hur h*VMiFNiHEE也一JSji let/UH uuItma 串 M 二蛊接下来的配置可以根据具体情况来设置或裁剪相关工具。退出保存设置。编译 busybox rootlocalhost make安装 busybox rootlocalhost make install成功后会在当前目录下生成 _install 目录,编译的工

20、具也都集成在该安装目录下。rootlocalhost cd _install/ rootlocalhost _install# lsbin linuxrc sbin usrrootlocalhost _install#可以看到 _install 目录下生成了根文件系统常用的命令及工具,接下来的工作,用户可以根据需 要将 _install 目录下生成的命令拷贝到根文件系统相应目录下。例如:将从 busybox 生成的 which 命令拷贝到根文件系统目录的 usr/bin 目录下,这样,我们 的根文件系统就支持 which 命令了。( 2 )、制作 CRAMFS 根文件系统镜像实验中已经提供了

21、mkcramfs 制作工具以及 脚本文件,用户只需执行 脚本文件来使用 mkcramfs 制作根文件系统镜像即可。当然也可以手动的执行命令: ./mkcramfs rootfs_up210rootlocalhost rootfs# ./此时在当前目录下生成根文件系统镜像文件rootlocalhost rootfs# ls mkcramfs rootfs_up210三、烧写根文件系统将新生成的根文件系统镜像文件烧写到 UP-Magic210 型设备中进行测试,这里不在赘述(烧写步骤可以参考文档 “UP-Magic210 出厂程序烧写手册 (LINUX)第 24 页 )。如果用户新添加了相关命令

22、或工具 (例如 which 命令 )启动系统后可以验证用户添加入的新命令或工具。4.实验结果5. 实验中遇到的问题及解决方法make 编译有错误,进行源代码的修改。之后再 make menuconfig 中将这个宏对应的东西配置成 没有就好了, 如果没有这个宏, 那么就直接用出错的那个文件的名字找就行了, 找到后给它去掉, 将来 make 的时候就不会编译这个文件了,在次进行 make 编译后,编译出来了 busybox 这个东 西,就在证明编译通过了。实验三 模块方式驱动实验1. 实验目的学习在 LINUX 下进行驱动设计的原理 掌握使用模块方式进行驱动开发调试的过程2. 实验内容 在 PC

23、 机上编写简单的虚拟硬件驱动程序并进行调试,实验驱动的各个接口函数的实现,分析 并理解驱动与应用程序的交互过程。在 ARM 设备上创建设备驱动节点,编写用户空间应用程序,对驱动程序进行测试。3. 实验步骤( 1 )、编译驱动程序 /UP-Magic210/SRC/exp/driver/01_demo / ,手工加载驱动程序,通过设备号 建立驱动设备节点,执行应用程序测试该驱动及设备,分析驱动程序。进入实验目录编译源程序rootlocalhost /# cd /UP-Magic210/SRC/exp/driver/01_demo/清除中间代码,重新编译rootlocalhost 01_demo#

24、 make cleanrootlocalhost 01_demo# make当前目录下生成驱动程序和应用测试程序 test_demo 。启动 UP-Magic210 实验系统,连好网线、串口线。通过串口终端挂载宿主机实验目录(注意: 虚拟机 IP 地址需要设置为:)。rootUP-TECH yaffs# mount -t nfs -o nolock /mnt/nfs进入串口终端的 NFS 共享实验目录rootUP-TECH yaffs# cd /mnt/nfs/SRC/exp/driver/01_demo/手动加载驱动程序rootUP-TECH 01_demo# insmod通过设备号建立驱动

25、设备节点rootUP_210 01_demo# mknod /dev/democ 251 0执行应用程序测试该驱动及设备,分析应用程序测试结果。rootUP-TECH 01_demo# ./test_demo(2)、请参考驱动程序,编写一个虚拟字符设备驱动程序并进行调试,该虚拟字符设备驱动程 序完成如下功能:在内核模块初始化函数中,实现动态申请设备号并注册该设备,动态建立设备文件节点; 在内核模块的退出函数中,实现设备注销,删除该设备文件节点;实现 file_operations 设备驱动文件结构体中的 open 、 read 、 write 、 ioctl 和 release 函数功能,其

26、中:open 函数:设置一个计数器 count ,每调用一次 open 函数,计数器 count 加 1。read 函数:读取用户写入的字符串数据的排列结果。write 函数: 实现将用户写入的字符串数据, 按照每个字符的 ASCII 值逆序或升序排序 (根据开关 值 asc 排序: asc=0,逆序排序; asc=1,升序排序; )。ioctl 函数:设置排序方式开关值asc。release 函数:每调用一次 release 函数,计数器 count 减 1。4. 实验结果5. 实验中遇到的问题及解决方法 。没有修改 makefile 文件直接进行编译导致出错。实验前没有认真阅读实验原理,看

27、懂实验代码, 所以在使用 make 命令以后无法实现。 最后在同学的帮助下找到了原因。 忽略了自己使用的是 gcc 编译而不是交叉编译,因而没有设置节点。尝试了很多次以后才发现了问题,期间以为是test_demo 文件的问题,但是导入导出很多次都没有解决,问了同学才找到了问题。实验四 LED 驱动及控制实验1. 实验目的 了解 ARM 设备外围电路结构与接口原理熟悉 Linux 系统下硬件驱动编程编程实现对嵌入式设备上 LED 灯的控制2. 实验内容阅读 UP-Magic210 平台硬件文档,熟悉 ARM 处理硬件外围接口电路编程实现 UP-Magic210 平台设备上 LED 驱动及应用测试

28、程序3. 实验步骤编写 UP-Magic210 平台设备上 LED 驱动及应用测试程序并进行调试, 该 LED 驱动程序完成如下 功能:在内核模块初始化函数中,实现动态申请设备号并注册该设备,动态建立设备文件节点; 在内核模块的退出函数中,实现设备注销,删除该设备文件节点;实现 file_operations 设备驱动文件结构体中的 ioctl 函数,完成如下功能: 一次调用控制所有的 LED 亮或灭;控制单个 LED 亮或灭; 实现流水灯显示,流水灯显示效果自行定义,流水灯循环显示次数由用户应用程序传入。 程序:驱动程序分析:#include #include #include #include #include #include #include #include #include MODULE_LICENSE(GPL);#define DEVICE_NAME leds wner = THIS_MODULE,.ioctl = uptech_leds_ioctl,;n);return -1;led led_number on|offn);fprintf(stderr, Options:n);fprintf(stderr, t led_number from 0 to 4n);fpr

温馨提示

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

评论

0/150

提交评论