嵌入式系统实验报告(华中科技大学).doc

上传人:jian****018 文档编号:9038069 上传时间:2020-04-02 格式:DOC 页数:13 大小:83.50KB
返回 下载 相关 举报
嵌入式系统实验报告(华中科技大学).doc_第1页
第1页 / 共13页
嵌入式系统实验报告(华中科技大学).doc_第2页
第2页 / 共13页
嵌入式系统实验报告(华中科技大学).doc_第3页
第3页 / 共13页
点击查看更多>>
资源描述
课 程 实 验 报 告实验名称:嵌入式系统实验专业班级:计算机科学与技术x班学 号: Ux 姓 名: x 合 作 者: x 实验时间: xxxx年xx月xx日 计算机科学与技术学院试验一:bootloader (ads、引导)一、实验任务1、熟悉ADS 1.2开发工具创建、编译、下载、调试工程2、串口通讯串口控制器初始化、收/发数据3、配置主机端的nfs服务器配置主机端的nfs服务器,以连接linux核心4、下载并运行linux核心使用自己的串口程序下载并运行linux核心二、实验内容编写串口接收数据函数编写串口发送数据函数学习ads、jtag调试、flash烧写打印菜单,等待用户输入下载并运行linux核心配置主机的nfs服务器,与linux核心连接三、实验步骤1.编写串口接收数据函数编写串口发送数据函数修改bootloader:菜单、串口收发、命令行;接收串口数据并做相应处理:while(1) 打印菜单并等待用户输入; switch(ch)/根据用户输入做相应处理 case 1: imgsize=xmodem_receive(char *)KERNEL_BASE, MAX_KERNEL_SIZE); if(imgsize=0)/下载出错; else/下载成功; break; case 3: nand_read(unsigned char *)KERNEL_BASE, 0x00030000, 4*1024*1024); case 2: BootKernel(); /这里是不会返回的,否则出错; break; default: break; Bootloader的main()函数打印菜单:int main(void)ARMTargetInit(); /目标板初始化;/接收用户命令,传递linux核心; Uart_puts(Menu:nr);Uart_puts(1.Load kernel via Xmodem;nr);Uart_puts(2.Boot linux; nr);Uart_puts(3.Load kernel from flash and boot; nr);Uart_puts(Make your choice.nr);doch=Uart_getc();while(ch!=1 & ch!=2 & ch!=3); return 0;串口读写:void Uart_putc(char c)while(!SERIAL_WRITE_READY(); (UTXH0) = (c); unsigned char Uart_getc( ) while(!SERIAL_CHAR_READY();return URXH0; 2.使用ads1.2编译bootloader;3.使用uarmjtag下载、调试bootloader;4.使用axd查看变量、内存,单步跟踪; 5.配置超级终端,与bootloader通讯;6.配置nfs; 编辑/etc/export文件:/home/arm_os/filesystem/rootfs 目标板ip(rw,sync)/home/arm_os/filesystem/rootfs 主机ip(rw,sync)启动nfs服务器:/etc/init.d/nfs restart测试nfs服务器是否正常运行:mount 主机ip:/home/arm_os/filesystem/rootfs /mnt 7.以root用户启动cutecom,将cutecom配置改为115200 bps,8位,1位停止位,无校验,xmodem,no line end;8.使用bootloader重新下载Linux核心映像,启动核心运行后,察看是否成功加载nfs上的root文件系统;9.启动Linux核心运行,察看结果;10.linux核心能够运行到加载root步骤,说明bootloader正常运行;11.将bootloader烧写到flash中,重启目标板电源,察看bootloader是否烧写正常,下载核心测试;目标板linux系统正常运行到命令行模式下,能够正常输入linux命令,说明实验成功。 四、实验过程中遇到的问题及解决方案问题一 :打开dubug,下载zImage失败,调试时发现下载失败原因是发生错误程序写为无限循环。解决方法:重新做了很多遍,仍然失败,最终发现同样的bootloader初始化及同样的下载操作在别的机器中能够正常运行,最终换了试验台终于成功地下载了核心映像。问题二 :实验中虽然下载完成,但是在cutecom中并没有显示成功下载映像,没有出现#号不能进入命令行模式,不能够进行后续的操作。解决方法: 因为不明白错误出现的原因,向老师提出疑问,经老师指点,发现linux系统中网络连接处没有网络连接,通过重新配置了ip地址,最终成功下载了核心映像。试验二:linux kernel (gcc、make)一、实验任务1、熟悉基本的linux命令文件操作、文件编辑串口工具、程序开发2、配置linux核心make menuconfig 3、 交叉编译linux核心make zImage 二、实验内容熟悉基本的linux命令配置linux核心交叉编译linux核心调试自己编译的核心挂载nfs上的root(根目录)编写一个小程序在目标板上运行三、实验步骤1.登陆linux系统,在终端进入管理员模式;2.解压缩源码包到/home/下; 3.察看解压缩后的/home/arm_os目录:Linux核心、编译器、rootfs等;4.配置并测试nfs;5.配置cutecom:115200,XModem,No line end;6.配置核心:make menuconfig;7.编译核心:make;8.下载并运行核心,加载root文件系统;9.重新设置cutecom为LF line end;熟悉基本的Linux命令;10.编写一个小程序hello.c在目标板上运行,察看结果。#includeInt main()Printf(“hello”);Return 0;四、实验中遇到的主要问题及解决方法问题1:写成的hello.c程序用gcc编译之后不能在目标板上运行。解决方法:通过请教老师才知道编译的命令不对,此实验板需要通过用arm-gcc-linux进行交叉编译,而不是用gcc,得到的可执行文件可以用命令./hello成功运行。试验三:linux driver (uart)一、实验任务1、 Linux驱动编程基本接口常用函数2、 串口驱动申请中断处理串口数据读、写二、实验内容编写串口驱动初始化、释放函数;编写串口驱动接收数据函数;编写串口驱动发送数据函数;编写串口驱动中断处理函数;编写串口访问应用程序; 使用模块方式编译驱动;使用模块方式调试驱动;实现基本的串口数据收发。 三、实验步骤1编写初始化、释放函数:uart_init、uart_exit、uart_open、uart_ release分别实现串口设备初始化、释放、打开、关闭串口设备初始化函数:int ret;dev_t devno = MKDEV(uart_major, 0);if(uart_major) ret = register_chrdev_region(devno, 1, uart);else ret = alloc_chrdev_region(&devno, 0, 1, uart);uart_major = MAJOR(devno);if(ret = UART_SIZE) return -EIO;if(*ppos + size UART_SIZE)size = UART_SIZE - *ppos;dochar c;if(!loop_buffer_del(&readb, &c)copy_to_user(buf+i, &c, 1);i+;elseschedule_timeout(10); while(i = UART_SIZE)return -EIO;if(*ppos + size UART_SIZE) size = UART_SIZE - *ppos;copy_from_user(wmem, buf, size); for(i=0; isize; i+)while(!(_raw_readl(uart + S3C2410_UTRSTAT) & 0x4);_raw_writel(*(wmem + i), uart + S3C2410_UTXH);return size;串口访问应用程序:#include #include int main() int uart_fd, i;char c; uart_fd = open(/dev/uart, O_RDWR); if(uart_fd 0) printf(Open device error!n);return -1; for(i=0; i50; i+) read(uart_fd, &c, 1); printf(%c, c); write(uart_fd, &c, 1); if(c = q)break; close(uart_fd); return 0; 3.用模块方式编译Linux核心,生成uart.ko,启动目标板Linux核心,用insmod、rmmod等命令操作模块;用printk打印调试串口驱动,包括中断相应,读写等;4.编写应用程序:uart.c,实现打开串口设备、读写等,把主机端由cutecom发过来的串口数据回传给主机;5.将目标板上串口线连到串口1;6.编译应用程序uart.c,实现和主机间的串口通讯。 四、实验中遇到的问题及解决方法问题1:由于模块化编译方法不太了解,对其过程不清楚。解决方法:向老师提出疑问后才知道首先修改uart.c中的波特率,然后拷贝驱动:/home/arm_os/test/st/test3/driver/下的makefile和uart.c拷贝到:/home/arm_os/kernel/linux-2.6.29.8/driver/char下,再拷贝应用程序:把:/home/arm_os/test/st/tesT3/下的makefile和uart.c拷贝到自己的文件夹,用于测试。问题2:前面步骤都照常执行但是发送接收始终不能够成功。解决方法:通过问老师仍然查不出错误,于是换了试验台再次尝试后能够成功,同样是实验台的问题。试验四:linux driver (touchscreen)一、实验任务1、 触摸屏驱动初始化坐标值2、 触摸屏、图形系统协调工作触摸屏校准拨号键盘二、实验内容l 编写触摸屏驱动初始化、释放函数;l 编写触摸屏驱动读取数据函数;l 编写触摸屏驱动中断处理函数;l 使用模块方式调试驱动;l 编写触摸屏读取应用程序; l 编写简单图形系统绘制应用程序,绘制一个数字键盘;l 实现基本的触摸键盘程序。 三、实验步骤1.填写函数:ts_init、ts_exit、ts_open、ts_ release,实现触摸屏设备初始化、释放、打开、关闭;触摸屏设备初始化函数:int ret;dev_t devno = MKDEV(ts_major, 0);if(ts_major) ret = register_chrdev_region(devno, 1, “ts_ads7843);else ret = alloc_chrdev_region(&devno, 0, 1, ts_ads7843 );ts_major = MAJOR(devno);if(ret 0)printk(Register chrdev region failed!n);return ret; cdev_init(&ts_cdev, &ts_fops);ret = cdev_add(&ts_cdev, devno, 1);if(ret)printk(Add c device failed!n);return ret; spi0_base = ioremap(S3C2410_PA_SPI,0x20);device_init();init_waitqueue_head(&wq);ret = request_irq(IRQ_EINT5, ts_isr, IRQF_DISABLED, ts_ads7843, NULL);if(ret)printk(Request irq failed!n); return ret; TS_OPEN_INT();ts_time = jiffies;printk(Ts_ads7843 module init.n);return 0;触摸屏设备释放函数:free_irq(IRQ_EINT5, NULL); cdev_del(&ts_cdev);unregister_chrdev_region(MKDEV(ts_major,0),1);printk(Ts_ads7843 module exit.n);2.填写函数:ts_isr、ts_read,实现触摸屏读、中断处理触摸屏设备中断处理函数:if(jiffies = sizeof(struct ts_ret)interruptible_sleep_on(&wq);ts_ret.x = x;ts_ret.y = y;ts_ret.pressure = PEN_DOWN;copy_to_user(buffer, (char *)&ts_ret, sizeof(struct ts_ret); count -= sizeof(struct ts_ret);size += sizeof(struct ts_ret); return size;3.用模块方式编译Linux核心,生成ts_ads7843.ko,启动目标板Linux核心,用insmod、rmmod等操作模块;4.用printk打印调试触摸屏驱动,包括中断相应,读等;5.编写应用程序:ts_ads7843.c,实现打开触摸屏设备、读等;触摸屏访问应用程序:#include #include int main() int ts_fd, i;char c;struct ts_ret ts_ret;ts_fd = open(/dev/ts_ads7843, O_RDWR);if(ts_fd 0)printf(Open ts device error!n);return -1;for(i=0; i50; i+) if(read(ts_fd, &ts_ret, sizeof(struct ts_ret) if(ts_ret.x Xmax) ts_ret.x = Xmax;if(ts_ret.y Ymax) ts_ret.y = Ymax; x = (ts_ret.x-Xmin) * SCREEN_WIDTH/(Xmax-Xmin); y = (ts_ret.y-Ymin) * SCREEN_HEIGHT/(Ymax-Ymin); close(ts_fd); return 0; 6.触摸屏校准通过多次点击触摸屏四个边界点得到几组坐标,取平均值来得到屏幕Xmin,Xmax,Ymin,Ymax,在ts_ads7843.c 修改程序,将这四个值代入函数中,并将SCREEN_WIDTH,SCREEN_HEIGHT设置为640*480,修改后的ts_ads7843.c程序如下:#include #include #define Xmin 500#define Xmax 2200#define Ymin 1400#define Ymax 3000static struct ts_ret unsigned int pressure;unsigned int x;unsigned int y; ts_ret;int main() int x,y; int ts_fd, i; char c; struct ts_ret ts_ret; ts_fd = open(/dev/ts_ads7843, O_RDWR); if(ts_fd 0) printf(Open ts device error!n); return -1; for(i=0; i50; i+) if(read(ts_fd, &ts_ret, sizeof(struct ts_ret) if(ts_ret.x Xmax) ts_ret.x = Xmax; if(ts_ret.y Ymax) ts_ret.y = Ymax; x = (ts_ret.x-Xmin) * 640/(Xmax-Xmin); y = (ts_ret.y-Ymin) * 480/(Ymax-Ymin); printf(%d,%d,%dn,x,y,ts_ret.pressure); close(ts_fd); return 0;实验五、六: (framebuffer)GPRS综合试验一、实验任务1、 GPRS模块控制试验串口控制GPRS模块AT命令集2、 综合实验电话拨号短消息发送二、实验内容编写简单图形系统绘制应用程序,绘制一个数字键盘;实现基本的触摸键盘程序。编写应用程序实现拨号,发短信功能。 三、实验步骤1.编写实现绘制数字键盘及触摸键盘程序及实现拨号发短信功能的程序main.c,程序修改于test5.c,显示数字键盘及触摸键盘程序已给出,只需做少部分修改:修改删除功能函数:if(key = )if(phonenum.tail 0)phonenum.tail-; printf(delete ok.Now phonenum is); for(i=0;iphonenum.tail;i+)printf(%c,phonenum.bufferi); printf(n);2.将手机sim卡插入目标板上即可实现通话和发短信功能。四、实验过程及遇到的问题问题1:不能够正常的实现通信功能解决办法:基本上都是连接sim卡的目标板问题,一部分实验板都有问题,尝试向插入该板的手机卡打电话如果目标板发出鸣声及说明该板正常,最后实现了通信功能。实验体会嵌入式开发在上这门课之前,就早已有听说,学校里随处可见的嵌入式开发的实例吸引着我们的注意力,对此仅有模糊的概念。经过对嵌入式系统这门课程的学习以及上机的实验,让我们对嵌入式开发有了很多的认识。在嵌入式的理论课上,老师已经为我们讲解了Linux及在嵌入式系统上Linux的应用。然而到开始实验的时候才发现很多实验中的内容跟单纯的操作系统差别较大,在第一堂课上基本是依葫芦画瓢照着老师说的一步步做下来,不明白自己的每一步操作的原因和目的,基本的原理也不是很清楚。一旦出错,也不知道从哪儿排错,只能问老师或者助教,但是经过这五次课六次的实验,我们对嵌入式系统有了一个大致清晰的认识和了解,对各个步骤也有了较清晰的认识。对于这次的实验仍然有些遗憾的地方,对于嵌入式系统的操作及过程有了较为深刻的认识,但是对于实验过程中用到的程序却基本都不是自己编写的,很多代码只是弄懂了皮毛,没有深刻的理解,当然这些不光是我们编写能力的问题,也有时间等诸多因素。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!