还剩10页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
嵌入式实验报告指导老师涂刚班级计算机060姓名学号姓名学号完成日期
7.5试验一bootloaderads、引导
一、实验任务
1、熟悉ADS
1.2__工具创建、编译、下载、调试工程
2、串口通讯串口控制器初始化、收/发数据
3、配置主机端的nfs服务器配置主机端的nfs服务器,以连接linux核心
4、下载并运行linux核心使用自己的串口程序下载并运行linux核心
二、实验内容编写串口接收数据函数编写串口发送数据函数学习ads、jtag调试、flash烧写打印菜单,等待用户输入下载并运行linux核心配置主机的nfs服务器,与linux核心连接
三、实验步骤1修改bootloader菜单、串口收发、命令行;Bootloader的__in函数int__invoid{ARMTargetInit;//目标板初始化;//接收用户命令,传递linux核心;Uart_putsMenu:\n\r;Uart_puts
1.LoadkernelviaXmodem;\n\r;Uart_puts
2.Bootlinux;\n\r;Uart_puts
3.Loadkernelfromflashandboot;\n\r;Uart_puts__keyourchoi__.\n\r;do{ch=Uart_getc;}whilech!=1ch!=2ch!=3;return0;}//__in;接收串口数据并做相应处理while1{打印菜单并等待用户输入;switchch//根据用户输入做相应处理{case1:imgsize=xmodem_re__ivechar*KERNEL_BASE__X_KERNEL_SIZE;ifimgsize==0//下载出错;else//下载成功;break;case3:nand_readunsignedchar*KERNEL_BASE0x000300004*1024*1024;case2:BootKernel;//这里是不会返回的,否则出错;break;default:break;}}串口读写voidUart_putccharc{while!SERIAL_WRITE_READY;UTXH0=c;}unsignedcharUart_getc{while!SERIAL_CHAR_READY;returnURXH0;}2使用ads
1.2编译bootloader;3使用uarmjtag下载、调试bootloader;4使用axd查看变量、内存,单步跟踪;5配置超级终端,与bootloader通讯;6使用超级终端下载Linux核心映像;7启动Linux核心运行,察看结果;8linux核心能够运行到加载root步骤,说明bootloader正常运行;9将bootloader烧写到flash中,重启目标板电源,察看bootloader是否烧写正常,下载核心测试;
(10)主机重启到Fedora,配置nfs;编辑/etc/export文件/home/arm_os/filesystem/rootfs目标板iprwsync/home/arm_os/filesystem/rootfs主机iprwsync重新启动nfs服务器/etc/init.d/nfsrestart测试nfs服务器是否正常运行mount主机ip:/home/arm_os/filesystem/rootfs/mnt
(11)以root用户启动cutecom,将cutecom配置成115200bps,8位,1位停止位,无校验,xmodem,nolineend;
(12)使用bootloader重新下载Linux核心映像,启动核心运行后,察看是否成功加载nfs上的root文件系统;目标板linux系统正常运行到命令行模式下,能够正常输入linux命令,说明实验成功
四、实验过程中遇到的问题及解决方案问题一打开dubug,下载zI__ge失败,调试时观察内存地址不是从0x0开始解决方法从新做了很多遍,仍然失败,最后终于观察到jtag线上的灯没有亮,换了一根好的jtag线,终于成功地下载了核心映像问题二cmd命令行下烧写bootloader时出现错误ERROR:K9S1208ISNOTDETECTED.解决方法因为不明白错误出现的原因,向老师提出疑问,经老师指点,忽略此错误问题三最后一步使用bootloader重新下载linux核心映像之后,目标板linux系统始终无__常运行到linux命令模式下解决方法重新到xp下,设置bootlinux.c中的Linux核心启动命令行char*linux_cmd=noinitrdinit=/initroot=/dev/nfsnfsroot=
172.
16.
68.25:/home/arm_os/filesystem/rootfstcpip=
172.
16.
68.24console=ttySAC0;通过此设置指定root在nfs服务器上,保持nfs ip地址的一致试验二linuxkernel__c、__ke
一、实验任务
1、熟悉基本的linux命令文件操作、文件编辑串口工具、程序__
2、配置linux核心__kemenuconfig
3、交叉编译linux核心__kezI__ge
二、实验内容熟悉基本的linux命令配置linux核心交叉编译linux核心调试自己编译的核心挂载nfs上的root(根目录)编写一个小程序在目标板上运行
三、实验步骤登陆Fedora,在终端进入___模式;解压缩源码包到/home/下;察看解压缩后的/home/arm_os目录Linux核心、编译器、rootfs等;配置并测试nfs;配置cutecom115200,XModem,Nolineend;配置核心__kemenuconfig;编译核心__ke;下载并运行核心,加载root文件系统;重新设置cutecom为LFlineend;熟悉基本的Linux命令;编写一个小程序hello.c在目标板上运行,察看结果#includestdio.hInt__in{Printf“hello”;Return0;}
四、实验中遇到的主要问题及解决方法问题一核心的配置和编译都成功了,但是打开cutecom不能进入命令行模式,说明加载root文件系统失败,不能调试自己编译的核心解决方法观察mount之后的/mnt目录下是空的,进入XP下发现D盘是空的,于是重新拷贝核心映像文件,重复实验一的工作,最后成功加载root文件系统,进入cutecom命令行问题二写成的hello.c程序用__c编译之后不能在目标板上运行解决方法编译的命令不对,应该用arm-__c-linux进行交叉编译,而不是用__c,得到的可执行文件可以用命令./hello成功运行试验三linuxdriveruart
一、实验任务
1、Linux驱动编程基本接口常用函数
2、串口驱动申请中断处理串口数据读、写
二、实验内容编写串口驱动初始化、释放函数;编写串口驱动接收数据函数;编写串口驱动发送数据函数;编写串口驱动中断处理函数;编写串口访问应用程序;使用模块方式编译驱动;使用模块方式调试驱动;实现基本的串口数据收发
三、实验步骤1填写函数uart_init、uart_exit、uart_open、uart_release,实现串口设备初始化、释放、打开、关闭;串口设备初始化函数intret;dev_tdevno=MKDEVuart___jor0;ifuart___jor{ret=register_chrdev_regiondevno1uart;}else{ret=alloc_chrdev_regiondevno01uart;uart___jor=__JORdevno;}ifret0{printkRegisterchrdevregionfailed!\n;returnret;}cdev_inituart_cdevuart_fops;ret=cdev_adduart_cdevdevno1;ifret{printkAddcdevi__failed!\n;returnret;}uart=iore__pS3C2410_PA_UART10x4000;devi___init;ret=request_irqIRQ_S3CUART_RX1irq_rev_uartIRQF_DISABLEDuartNULL;ifret{printkRequestirqfailed!\n;returnret;}loop_buffer_initreadbUART_SIZE;printkUartmoduleinit.\n;return0;串口设备释放函数loop_buffer_freereadb;free_irqIRQ_S3CUART_RX1NULL;cdev_deluart_cdev;unregister_chrdev_regionMKDEVuart___jor01;printkUartmoduleexit.\n;2填写函数irq_rev_uart、uart_write、uart_read,实现串口设备中断处理、读、写;串口设备中断处理函数charc;while!__raw_readbuart+S3C2410_UTRSTAT0x1;c=char__raw_readluart+S3C2410_URXH;loop_buffer_addreadbc;return0;串口设备读函数inti=0;if*ppos=UART_SIZEreturn-EIO;if*ppos+sizeUART_SIZEsize=UART_SIZE-*ppos;do{charc;if!loop_buffer_delreadbc{copy_to_userbuf+ic1;i++;}elseschedule_timeout10;}whileisize;returnsize;串口设备写函数inti;charwmem[UART_SIZE];if*ppos=UART_SIZEreturn-EIO;if*ppos+sizeUART_SIZEsize=UART_SIZE-*ppos;copy_from_userwmembufsize;fori=0;isize;i++{while!__raw_readluart+S3C2410_UTRSTAT0x4;__raw_writel*wmem+iuart+S3C2410_UTXH;}returnsize;串口访问应用程序#includestdio.h#includefcntl.hint__in{intuart_fdi;charc;uart_fd=open/dev/uartO_RDWR;ifuart_fd0{printfOpendevi__error!\n;return-1;}fori=0;i50;i++{readuart_fdc1;printf%cc;writeuart_fdc1;ifc==qbreak;}closeuart_fd;return0;}3用模块方式编译Linux核心,生成uart.ko,启动目标板Linux核心,用in__od、rmmod等命令操作模块;用printk打印调试串口驱动,包括中断相应,读写等;4编写应用程序uart.c,实现打开串口设备、读写等,把主机端由cutecom发过来的串口数据回传给主机;5将目标板上串口线连到串口1;6编译应用程序uart.c,实现和主机间的串口通讯
四、实验中遇到的问题及解决方法问题一在超级终端下打开cutecom失败解决方法由于没有使用交换机,网络需要重新激活,激活网络之后,cutecom打开成功问题二对模块化编译方法不太了解,对其过程不清楚解决方法经老师点拨,逐渐明白其过程首先修改uart.c中的波特率,然后拷贝驱动,把/home/arm_os/test/st/test3/driver/下的__kefile和uart.c拷贝到/home/arm_os/kernel/linux-
2.
6.
29.8/driver/char下,再拷贝应用程序把:/home/arm_os/test/st/tesT3/下的__kefile和uart.c拷贝到自己的文件夹,用于测试试验四linuxdrivertouchscreen
一、实验任务
1、触摸屏驱动初始化坐标值
2、触摸屏、图形系统协调工作触摸屏校准拨号键盘
二、实验内容编写触摸屏驱动初始化、释放函数;编写触摸屏驱动读取数据函数;编写触摸屏驱动中断处理函数;使用模块方式调试驱动;编写触摸屏读取应用程序;编写简单图形系统绘制应用程序,绘制一个数字键盘;实现基本的触摸键盘程序
三、实验步骤1函数ts_init、ts_exit、ts_open、ts_release,实现触摸屏设备初始化、释放、打开、关闭;触摸屏设备初始化函数intret;dev_tdevno=MKDEVts___jor0;ifts___jor{ret=register_chrdev_regiondevno1“ts_ads7843;}else{ret=alloc_chrdev_regiondevno01ts_ads7843;ts___jor=__JORdevno;}ifret0{printkRegisterchrdevregionfailed!\n;returnret;}cdev_initts_cdevts_fops;ret=cdev_addts_cdevdevno1;ifret{printkAddcdevi__failed!\n;returnret;}spi0_base=iore__pS3C2410_PA_SPI0x20;devi___init;init_waitqueue_headwq;ret=request_irqIRQ_EINT5ts_isrIRQF_DISABLEDts_ads7843NULL;ifret{printkRequestirqfailed!\n;returnret;}TS_OPEN_INT;ts_time=jiffies;printkTs_ads7843moduleinit.\n;return0;触摸屏设备释放函数free_irqIRQ_EINT5NULL;cdev_delts_cdev;unregister_chrdev_regionMKDEVts___jor01;printkTs_ads7843moduleexit.\n;2填写函数ts_isr、ts_read,实现触摸屏读、中断处理触摸屏设备中断处理函数ifjiffiests_time+HZ/20return0;ifs3c2410_gpio_getpinS3C2410_GPF5ADS7843_PIN_PEN==0{udelay10;get_XY;ts_time=jiffies;wake_up_interruptiblewq;udelay2;}return0;触摸屏设备读函数structts_retts_ret;intsize=0;whilecount=sizeofstructts_ret{interruptible_sleep_onwq;ts_ret.x=x;ts_ret.y=y;ts_ret.pressure=PEN_DOWN;copy_to_userbufferchar*ts_retsizeofstructts_ret;count-=sizeofstructts_ret;size+=sizeofstructts_ret;}returnsize;3用模块方式编译Linux核心,生成ts_ads
7843.ko,启动目标板Linux核心,用in__od、rmmod等操作模块;4用printk打印调试触摸屏驱动,包括中断相应,读等;5编写应用程序ts_ads
7843.c,实现打开触摸屏设备、读等;触摸屏访问应用程序#includestdio.h#includefcntl.hint__in{intts_fdi;charc;structts_retts_ret;ts_fd=open/dev/ts_ads7843O_RDWR;ifts_fd0{printfOpentsdevi__error!\n;return-1;}fori=0;i50;i++{ifreadts_fdts_retsizeofstructts_ret{ifts_ret.xXmints_ret.x=Xmin;ifts_ret.xX__xts_ret.x=X__x;ifts_ret.yYmints_ret.y=Ymin;ifts_ret.yY__xts_ret.y=Y__x;x=ts_ret.x-Xmin*SCREEN_WIDTH/X__x-Xmin;y=ts_ret.y-Ymin*SCREEN_HEIGHT/Y__x-Ymin;}}closets_fd;return0;}6在ts_ads
7843.c中增加简单图形系统绘制函数,绘制数字键盘,对触摸屏设备数据进行校正,实现触摸键盘的功能
四、实验中出现的主要问题和解决方法问题一挂载网络文件系统上的root再次失败解决方法经过仔细观察总结,发现系统中的编辑/etc/export文件设置为/home/rootfs目标板iprwsync/home/rootfs主机iprwsync分析可能是上一次做实验的人用的主目录路径跟我们的不一样,于是我们重新以/home/rootfs为路径测试测试nfs服务器mount主机ip:/homerootfs/mnt,在后续文件操作中也一直注意这个方面,解决了多次挂载失败的问题问题二主要是触摸屏校正的问题解决方法按课件上的方法耐心地测试,直到找出比较合适的值实验
五、六GPRS综合试验framebufferGPRS综合试验
一、实验任务
1、GPRS模块控制试验串口控制GPRS模块AT命令集
2、综合实验__拨号短消息发送
二、实验过程及遇到的问题本实验比较简单,把__的sim卡装在一个卡上,插在目标班上,就可以按键打__了碰到的主要问题是对硬件结构不熟悉实验体会嵌入式__是一个很吸引人的方向通过三次课与六次实验,我们对这个课题有了一个很清晰的认识和了解,__到了嵌入式操作系统的独特魅力开始老师讲理论的时候,只能大略听懂其中的操作系统部分,对嵌入式的概念理解很模糊第一次实验是做起来感觉最难的一次,因为是第一次接触很多软件和文件,都不明白自己的每一步操作的原因和目的,一旦出错,也不知道从哪儿排错第二次实验相对比较简单,基本linux操作和核心编译配置我们以前都有训练过做完两次实验好好综合总结了一下,才明白了每一步操作的意义,以及嵌入式两次实验,才明白嵌入式linux的基本原理,有了这个基础,在后续的实验中感觉就明白多了,碰到问题的时候可以自己摸索着解决或者像同学请教,最后完成了用自己__的简单linux系统打__的目标总觉得在这六次实验中有个遗憾,可能因为课时限制和学生精力有限,代码大部分都是老师给的现成的应该掌握了这些编程,才算真正掌握了嵌入式系统系统__,不过这个只能留待我们在课后实现了。