嵌入式实验报告

上传人:磨石 文档编号:44855258 上传时间:2021-12-06 格式:DOC 页数:12 大小:115.50KB
收藏 版权申诉 举报 下载
嵌入式实验报告_第1页
第1页 / 共12页
嵌入式实验报告_第2页
第2页 / 共12页
嵌入式实验报告_第3页
第3页 / 共12页
资源描述:

《嵌入式实验报告》由会员分享,可在线阅读,更多相关《嵌入式实验报告(12页珍藏版)》请在装配图网上搜索。

1、嵌入式实验报告指导老师: 涂 刚 班 级: 计算机060 姓 名: 学 号: 姓 名: 学 号: 完成日期: 7.5 试验一:bootloader (ads、引导)一、实验任务1、熟悉ADS 1.2开发工具创建、编译、下载、调试工程2、串口通讯串口控制器初始化、收/发数据3、配置主机端的nfs服务器配置主机端的nfs服务器,以连接linux核心4、下载并运行linux核心使用自己的串口程序下载并运行linux核心二、实验内容l 编写串口接收数据函数l 编写串口发送数据函数l 学习ads、jtag调试、flash烧写l 打印菜单,等待用户输入l 下载并运行linux核心l 配置主机的nfs服务器

2、,与linux核心连接三、实验步骤(1) 修改bootloader:菜单、串口收发、命令行;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_

3、getc();while(ch!=1 & ch!=2 & ch!=3); return 0;/main;接收串口数据并做相应处理: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: Bo

4、otKernel(); /这里是不会返回的,否则出错; break; default: break; 串口读写: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) 使用超

5、级终端下载Linux核心映像;(7) 启动Linux核心运行,察看结果;(8) linux核心能够运行到加载root步骤,说明bootloader正常运行;(9) 将bootloader烧写到flash中,重启目标板电源,察看bootloader是否烧写正常,下载核心测试;(10)主机重启到Fedora,配置nfs; 编辑/etc/export文件:/home/arm_os/ 目标板ip(rw,sync)/home/arm_os/ 主机ip(rw,sync)重新启动nfs服务器:/etc/init.d/nfs restart测试nfs服务器是否正常运行:mount 主机ip:/home/arm

6、_os/ /mnt (11)以root用户启动cutecom,将cutecom配置成115200 bps,8位,1位停止位,无校验,xmodem,no line end;(12)使用bootloader重新下载Linux核心映像,启动核心运行后,察看是否成功加载nfs上的root文件系统;目标板linux系统正常运行到命令行模式下,能够正常输入linux命令,说明实验成功。 四、实验过程中遇到的问题及解决方案问题一 :打开dubug,下载zImage失败,调试时观察内存地址不是从0x0开始。解决方法:从新做了很多遍,仍然失败,最后终于观察到jtag线上的灯没有亮,换了一根好的jtag线,终于成

7、功地下载了核心映像。问题二 :cmd命令行下烧写bootloader时出现错误,ERROR:K9S1208 IS NOT DETECTED.解决方法: 因为不明白错误出现的原因,向老师提出疑问,经老师指点,忽略此错误。问题三 :最后一步使用bootloader重新下载linux核心映像之后,目标板linux系统始终无法正常运行到linux命令模式下。解决方法:重新到xp下,设置bootlinux.c中的Linux核心启动命令行:char *linux_cmd=noinitrd init=/init root=/dev/nfs nfsroot=172.16.68.25:/home/arm_os/

8、 ip=172.16.68.24 console=ttySAC0; 通过此设置指定root在nfs服务器上,保持nfs:ip地址的一致。试验二:linux kernel (gcc、make)一、实验任务1、熟悉基本的linux命令文件操作、文件编辑串口工具、程序开发2、配置linux核心make menuconfig 3、 交叉编译linux核心make zImage 二、实验内容l 熟悉基本的linux命令l 配置linux核心l 交叉编译linux核心l 调试自己编译的核心l 挂载nfs上的root(根目录)l 编写一个小程序在目标板上运行三、实验步骤登陆Fedora,在终端进入管理员模式

9、;解压缩源码包到/home/下; 察看解压缩后的/home/arm_os目录:Linux核心、编译器、rootfs等;配置并测试nfs;配置cutecom:115200,XModem,No line end;配置核心:make menuconfig;编译核心:make;下载并运行核心,加载root文件系统;重新设置cutecom为LF line end;熟悉基本的Linux命令;编写一个小程序hello.c在目标板上运行,察看结果。#includeInt main()Printf(“hello”);Return 0;四、实验中遇到的主要问题及解决方法问题一:核心的配置和编译都成功了,但是打开c

10、utecom不能进入命令行模式,说明加载root文件系统失败,不能调试自己编译的核心。解决方法:观察mount之后的/mnt目录下是空的,进入XP下发现D盘是空的,于是重新拷贝核心映像文件,重复实验一的工作,最后成功加载root文件系统,进入cutecom命令行。问题二:写成的hello.c程序用gcc编译之后不能在目标板上运行。解决方法:编译的命令不对,应该用arm-gcc-linux进行交叉编译,而不是用gcc,得到的可执行文件可以用命令./hello成功运行。试验三:linux driver (uart)一、实验任务1、 Linux驱动编程基本接口常用函数2、 串口驱动申请中断处理串口数

11、据读、写二、实验内容编写串口驱动初始化、释放函数;编写串口驱动接收数据函数;编写串口驱动发送数据函数;编写串口驱动中断处理函数;编写串口访问应用程序; 使用模块方式编译驱动;使用模块方式调试驱动;实现基本的串口数据收发。 三、实验步骤(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

12、);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 +

13、 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

14、(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,实现打开串口设备、读写等,把主机端由cut

15、ecom发过来的串口数据回传给主机;(5) 将目标板上串口线连到串口1;(6) 编译应用程序uart.c,实现和主机间的串口通讯。 四、实验中遇到的问题及解决方法问题一:在超级终端下打开cutecom失败解决方法:由于没有使用交换机,网络需要重新激活,激活网络之后,cutecom打开成功。问题二:对模块化编译方法不太了解,对其过程不清楚。解决方法:经老师点拨,逐渐明白其过程:首先修改uart.c中的波特率,然后拷贝驱动,把:/home/arm_os/test/st/test3/driver/下的make拷贝到:/home/arm_os/kernel/linux-2.6.29.8/driver/

16、char下,再拷贝应用程序:把:/home/arm_os/test/st/tesT3/下的make拷贝到自己的文件夹,用于测试。试验四:linux driver (touchscreen)一、实验任务1、 触摸屏驱动初始化坐标值2、 触摸屏、图形系统协调工作触摸屏校准拨号键盘二、实验内容l 编写触摸屏驱动初始化、释放函数;l 编写触摸屏驱动读取数据函数;l 编写触摸屏驱动中断处理函数;l 使用模块方式调试驱动;l 编写触摸屏读取应用程序; l 编写简单图形系统绘制应用程序,绘制一个数字键盘;l 实现基本的触摸键盘程序。 三、实验步骤(1) 函数:ts_init、ts_exit、ts_open、

17、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_ini

18、t(&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

19、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)inter

20、ruptible_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打印调试触摸屏驱动,包

21、括中断相应,读等;(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

22、_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) 在ts_ads7843.c 中增加简单图形系统绘制函数,绘制数字键盘,对触摸屏设备数据进行校正,实现触摸键盘的功能。 四、实验中出现的主要问题和解决方法问题一:挂载网络文件系统上的root再次失败。解决方法:经过仔细观察总结,发现系统中的编辑/etc/

23、export文件设置为:/home/ rootfs 目标板ip(rw,sync)/home /rootfs 主机ip(rw,sync) 分析可能是上一次做实验的人用的主目录路径跟我们的不一样,于是我们重新以/home /rootfs为路径测试测试nfs服务器:mount 主机ip:/homerootfs /mnt ,在后续文件操作中也一直注意这个方面,解决了多次挂载失败的问题。问题二:主要是触摸屏校正的问题解决方法:按课件上的方法耐心地测试,直到找出比较合适的值。实验五、六:GPRS综合试验 (framebuffer)GPRS综合试验一、实验任务1、 GPRS模块控制试验串口控制GPRS模块A

24、T命令集2、 综合实验电话拨号短消息发送二、实验过程及遇到的问题本实验比较简单,把手机的sim卡装在一个卡上,插在目标班上,就可以按键打电话了。碰到的主要问题是对硬件结构不熟悉。实验体会嵌入式开发是一个很吸引人的方向。通过三次课与六次实验,我们对这个课题有了一个很清晰的认识和了解,感受到了嵌入式操作系统的独特魅力。开始老师讲理论的时候,只能大略听懂其中的操作系统部分,对嵌入式的概念理解很模糊。第一次实验是做起来感觉最难的一次,因为是第一次接触很多软件和文件,都不明白自己的每一步操作的原因和目的,一旦出错,也不知道从哪儿排错。第二次实验相对比较简单,基本linux操作和核心编译配置我们以前都有训练过。做完两次实验好好综合总结了一下,才明白了每一步操作的意义,以及嵌入式两次实验,才明白嵌入式linux的基本原理,有了这个基础,在后续的实验中感觉就明白多了,碰到问题的时候可以自己摸索着解决或者像同学请教,最后完成了用自己开发的简单linux系统打电话的目标。总觉得在这六次实验中有个遗憾,可能因为课时限制和学生精力有限,代码大部分都是老师给的现成的。应该掌握了这些编程,才算真正掌握了嵌入式系统系统开发,不过这个只能留待我们在课后实现了。12 / 12文档可自由编辑打印

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

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

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


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