73嵌入式系统实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

PXA270嵌入式实验开发系统LINUX实验报告本学期通过三节嵌入式实验课的学习,对LINUX系统和嵌入式系统有了一个大致的了解。期间一共做了十四个实验,具体实验内容如下:实验一建立硬件实验平台本实验是以后所有实验的硬件基础,需要正确连接宿主PC机与PXA270-EP目标板,PXA270目标板与电源连接,用一根串口线将目标板串口0与PC机后方的串口相连,用一根交叉对接的网线将宿主PC机网口与目标板网口相连。实验二Linux操作系统RedHat9的安装按照实验书所讲的步骤在Linux虚拟机中正确安装RedHat9,这是以后所有实验的软件基础。实验三建立主机软件开发环境建立宿主PC机端的开发环境,此实验开始需要在RedHat9中的终端窗口(Terminal)中输入命令:虚拟机载入ISO镜像270EP.iso,登陆RedHat,启动终端窗口,对cdrom镜像进行挂载(mount/dev/cdrom/mnt/cdrom),用“./install”命令进行iso安装,安装完成,修改/ect/profile的环境变量(pathmunge/usr/local/arm-linux-/bin)。实验四配置超级终端超级终端作为嵌入式实验性的终端,监视并控制其工作状态。串口设置(每秒位数:115200;位数据:8;奇偶校验:无;停止位:1;数据流控制:无;)。实验五配置TFTP配置宿主PC机端的TFTP(简单文件传输协议)服务,并开通此服务。登陆RedHat,启动终端窗口,输入setup,选择Systemservices,取消ipchains和iptables两项服务,选中tftp服务,取消防火墙,重启TFTP服务(servicexinetdrestart),设置PC机ip地址为192.168.0.100(ifconfigeth0192.168.0.100up),使用tftp服务得到文件zImage。实验六配置NFS服务配置宿主PC机端的NFS(网络文件系统)服务,并开通此服务。登陆RedHat,启动终端窗口,输入setup,选择Systemservices,选中nfs服务,保存退出,打开/ect/exports文件,在其中加入“/192.168.0.50(rw,insecure,no_root_squash,no_all_squash)”,然后重启服务(servicenfsrestart)。注意:每次启动宿主PC机上的Linux操作系统时,需要通过命令ifconfigeth0192.168.0.100up重置宿主PC机的IP地址,并在超级终端中用命令ifconfigeth0192.168.0.50给PXA270实验开发系统设置IP地址。以上几个实验算是给以后的实验配置了软硬件条件,是以后各个实验的基础。实验七HelloWorld从此实验开始第一次正面接触嵌入式Linux的开发,第一次编写嵌入式系统的应用程序。打开宿主PC机登陆RedHat,打开实验箱连接,root登陆实验箱,设置实验箱ip地址为192.168.0.50(ifconfigeth0192.168.0.50up),挂载宿主机根目录到实验板/mnt目录下,然后进入mnt目录;RedHat中打开终端窗口,进入home目录建立文件夹HW,并在其中建立HelloWorld.c文件,vi编辑器编辑它。基本C语言代码为:#includestdio.hIntmain(){printk(“HelloWorld!\n”);return0;}在终端窗口下进行交叉编译arm-linux-gcc–oHelloWorldHelloWorld.c,生成.o目标文件,进入超级终端的界面,回到/mnt/home/HW目录下,编译HelloWorld(./HelloWorld),看到打印输出“HelloWorld!”。实验十二简单设备驱动程序该实验需要在宿主PC机端编辑三个文件:驱动程序、编译驱动程序时用的Makefile、测试程序。驱动程序pxa270_hello_drv.c如下:#includelinux/config.h#includelinux/kernel.h#includelinux/sched.h#includelinux/timer.h#includelinux/init.h#includelinux/module.h#includeasm/hardware.h//程序所需的各种同文件//HELLODEVICEMAJOR#defineSIMPLE_HELLO_MAJOR96#defineOURS_HELLO_DEBUG#defineVERSIONPXA2700EP-SIMPLE_HELLO-V1.00-060530voidshowversion(void){printk(***************************************);printk(\t%s\t\n,VERSION);printk(***************************************);}//显示版本//-------------------READ------------------------/*读取模块,用于将指定文件描述符中读取数据,file:是文件指针buf:读取数据缓存区count:请求传输的字节数f_ops:文件当前偏移量*/ssize_tSIMPLE_HELLO_read(structfile*file,char*buf,size_tcount,loff_t*f_ops){#ifdefOURS_HELLO_DEBUGprintk(SIMPLE_HELLO_read[--kernel--]\n);#endifreturncount;}//-------------------WRITE-----------------------/*写模块,用于向打开的文件写数据,写操作从文件当前偏移量开始file:是文件指针buf:写入数据缓存区count:请求传输的字节数f_ops:文件当前偏移量*/ssize_tSIMPLE_HELLO_write(structfile*file,constchar*buf,size_tcount,loff_t*f_ops){#ifdefOURS_HELLO_DEBUGprintk(SIMPLE_HELLO_write[--kernel--]\n);#endifreturncount;}//-------------------IOCTL-----------------------/*控制IO设备,设备驱动程序中对设备的I/O通道进行管理的函数inode:设备节点flip:打开的一个文件cmd:驱动程序的特殊命令编号data:接收剩余参数*/ssize_tSIMPLE_HELLO_ioctl(structinode*inode,structfile*file,unsignedintcmd,longdata){#ifdefOURS_HELLO_DEBUGprintk(SIMPLE_HELLO_ioctl[--kernel--]\n);#endifreturn0;}//-------------------OPEN------------------------/*打开函数Inode:打开文件所对应的i节点,主要获取从设备号flip:打开的一个文件调用了宏MOD_INC_USE_COUNT,这个宏主要用来增加驱动程序使用计数器,避免不正确卸载程序*/ssize_tSIMPLE_HELLO_open(structinode*inode,structfile*file){#ifdefOURS_HELLO_DEBUGprintk(SIMPLE_HELLO_open[--kernel--]\n);#endifMOD_INC_USE_COUNT;return0;}//-------------------RELEASE/CLOSE---------------/*关闭函数Inode:打开文件所对应的i节点,主要获取从设备号flip:打开的一个文件调用了宏MOD_DEC_INC_USE_COUNT,这个宏主要用来减少驱动程序使用计数器*/ssize_tSIMPLE_HELLO_release(structinode*inode,structfile*file){#ifdefOURS_HELLO_DEBUGprintk(SIMPLE_HELLO_release[--kernel--]\n);#endifMOD_DEC_INC_USE_COUNT;return0;}//-------------------------------------------------/*SIMPLE_HELLO设备向系统注册*/structfile_operationsHELLO_ops={open:SIMPLE_HELLO_open,read:SIMPLE_HELLO_read,write:SIMPLE_HELLO_write,ioctl:SIMPLE_HELLO_ioctl,release:SIMPLE_HELLO_release,};//-------------------INIT------------------------/*驱动程序初始化devfs_register_chrdev(SIMPLE_HELLO_MAJOR,hello_serial_ctl,&HELLO_ops)为最主要的语句,devfs_register_chrdev注册设备驱动程序,包括主设备号、驱动程序名、结构体指针*/staticint__initHW_HELLO_init(void){intret=-ENODEV;ret=devfs_register_chrdev(SIMPLE_HELLO_MAJOR,hello_serial_ctl,&HELLO_ops);showversion();if(ret0){printk(pxa270init_modulefailedwith%d\n[--kernel--],ret);}else{printk(pxa270hello_driverregistersuccess!!![--kernel--]\n);}returnret;}/*模块初始化函数,调用HW_HELLO_init函数*/staticint__initpxa270_HELLO_init(void){intret=-ENODEV;#ifdefOURS_HELLO_DEBUGprintk(pxa270_HELLO_init[--kernel--]\n);#endifret=HW_HELLO_init();if(ret)returnret;return0;}/*模块卸载函数devfs_unregister_chrdev(SIMPLE_HELLO_MAJOR,hello_ctl)为最主要的语句,devfs_unregister_chrdev卸载设备驱动程序,包括主设备号、驱动程序名*/staticvoid__exitcleanup_HELLO_ctl(void){#ifdefOURS_HELLO_DEBUGprintk(cleanup_HELLO_ctl[--kernel--]\n);#endifdevfs_unregister_chrdev(SIMPLE_HELLO_MAJOR,hello_ctl);}/**/MODULE_DESCRIPTION(simplehellodrivermodule);//一些描述信息MODULE_AUTHOR(liduo);//驱动作者MODULE_LICENSE(GPL);module_init(pxa270_HELLO_init);//指定驱动程序初始化函数module_exit(cleanup_HELLO_ctl);//指定驱动程序卸载函数编译程序Makefile如下:#TOPDIR:=$(shellcd..;pwd)TOPD

1 / 13
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功