川师arm linux系统实验报告

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

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

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

资源描述

《Linux嵌入式系统开发》实验报告一、实验课的性质与任务本课程实验大纲是面向计算机科学与技术专业学生开设的《Linux嵌入式系统开发》(以pc机、xsbase270实验平台为开发环境)实验课计划指导大纲,是依据《Linux嵌入式系统开发》课程教学计划指导大纲编制。本课程主要讲述了在上位机PC、目标机xsbase270实验平台所共同搭建的交叉编译开发环境中,利用C语言、QT图形库进行简单的Linux嵌入式系统设计与开发,结合该课程教学计划大纲的相应内容,设计了8个单项实验和综合实验,力求提高学生的动手能力,做到理论和实践相结合。使学生在实验过程中掌握Linux嵌入式系统开发的基本原理和流程,培养学生规范设计、熟练实现嵌入式系统的能力,为后续相关课程实训奠定基础。二、实验课程目的与要求1.实验目的:Linux嵌入式系统开发实验课的开设,是为了使学生更好地理解和掌握Linux操作系统,并在此基础上熟悉嵌入式系统开发的基本流程,灵活运用网络、busybox等相关工具顺利完成交叉编译环境搭建、操作系统移植、文件系统定制和qt图形库编程等阶段性任务,强化嵌入式系统设计、开发能力。2.实验要求:(1)在实验中,要求学生个人独立思考,严格遵循实验手册进行实验,并给出电子版实验报告存档。(2)本课程的学习过程是一个综合训练过程,要求学生在完成实验过程中,不仅应牢固实验学时:32实验个数:5实验学分:1课程性质:专业选修课适用专业:计算机科学与技术教材及参考书:1.《嵌入式Linux系统开发标准教程》,华清远见嵌入式培训中心著,人民邮电出版社,2009-32.《ARM嵌入式Linux系统开发技术详解》,杨水清,电子工业出版社,2008-11大纲执笔人:大纲审定人:记忆每个操作步骤,更应利用网络等多种渠道理解每个步骤在本阶段任务中发挥的重要作用。(3)在实验中,提倡学生之间、师生之间相互交流,以达到畅所欲言、博采众长的目的。三、实验项目及内容提要《Linux嵌入式系统开发》实验课程序号实验项目编号实验名称学时必做选做学分数实验类型内容提要基本操作验证综合设计4四Bootloader跟踪打印实验4√熟悉Linux嵌入式系统bootloader实现原理。5五Bootloader增加命令选项实验4√熟悉根据实际需要修改bootloader的基本步骤6六内核编译实验2√√熟悉Linux嵌入式系统内核移植过程。7七文件系统制作实验4√√熟悉Linux嵌入式系统根文件制作。8八驱动程序加载实验4√√熟悉驱动程序动态、静态的加载过程四、实验内容安排:实验四Bootloader跟踪打印实验(验证型实验4学时)1.目的要求:(1)熟练掌握Bootloader的启动过程。(2)熟练掌握Bootloader的基本调试方法。(3)熟练掌握Bootloader的编译过程。2.实验内容(1)Blob第1阶段分析打开Boot-XSBase270\src\start.S,该源码文件完成系统的Blob程序的第1阶段的编程及程序调用实现过程。(主要包括:GPIO的初始化调用-bldefine_gpio;系统时钟信号使能调用-blclock_enable;SDRAM内存设置调用-blsetup_memory、Blob自拷贝、堆栈的设置-ldrsp,stack_point-4以及跳转到Blob第二阶段-ldrpc,main)【图4-1】打开Boot-XSBase270\src\fixgpio.S文件,找到配置GPIO的define_gpio函数,该函数主要实现对系统微处理器的GPIO的初始化过程。其中涉及GPIO的输入/输出方向设置寄存器:GPDRn、置位和清零寄存器(GPSRn、GPCRn)以及功能配置寄存器GPFRnL、GPFRnH等。【图4-2】打开Boot-XSBase270\src\memsetup.S文件,找到setup_memory函数,该函数主要对系统外部的DRAM、SRAM(FLASH)、PCCard接口等存储设备所需参数进行配置,其中包括:MDCNFG、MDREFR、MSCn等寄存器的配置。【图4-3】(2)Blob第2阶段分析打开Boot-XSBase270\src\main.c文件,找到intmain(void)函数,该函数完成系统的Blob程序的第2阶段的硬件初始化和菜单显示等程序调用实现过程(主要包括:终端显示串口初始化-uart_init();系统定时器-time_init();存储分配映射配置-config_init();Flash内存器操作配置初始化-iflash_init();以及网络芯片初始化-eth_init();等本阶段硬件初始化过程调用;提示延时、菜单显示调用)【图4-4】main程序初始化【图4-5】main程序延迟【图4-6】Bootloader打印菜单函数打开Boot-XSBase270\src\serial.c文件,分别找到uart_init(void)、intuart_putc(intch)和intuart_getc(void)三个串口操作基本函数。主要完成串口初始化与从串口获取和输出字符等操作。实现对PXA270的串口相关寄存器进行配置。其他与串口相关的函数都直接或间接调用这三个函数。【图4-7】串口初始化函数【图4-8】串口输入、输出函数打开Boot-XSBase270\src\Partition.c文件,找到init_map(void)和find_map(constchar*name)函数,这两个函数主要完成对存储分配映射进行配置和查找某个指定类型的内存映射参数。其中parts结构体数组定义了整个系统的SRAM、SDRAM等内存映射的相关参数。【图4-9】DRAM\SRAM地址映像函数【图4-10】内存地址分配映射结构体数值打开Boot-XSBase270\src\Flash.c文件,该文件中函数主要完成对flash的编程、擦除、加/解锁等操作。其中iflash_init(void)函数主要实现查询平台的flash存储芯片的相关信息,flash操作的命令可参考flash芯片的资料文档。【图4-11】flash初始化函数打开Boot-XSBase270\src\lan91c111.c文件,该文件中函数主要实现lan91c111网络芯片的底层操作配置操作,其中lan91c111_init(void)函数由main.c文件中的eth_init()函数间接调用。具体寄存器操作方法参考lan91c111的资料文档。【图4-12】Ethernet初始化函数打开Boot-XSBase270\src\Network.c文件,该文件中的函数主要完成网络传输相关协议的封装(如:set_udp_header、set_ip_header、set_ether_header、set_arp_heade、set_icmp_header等)、网络数据包的解压(udp_recv_packet、ip_recv_packet、eth_recv_packet、arp_recv_packet、icmp_recv_packet)以及网络传输请求数据包的发送(send_arp_request_packet、send_icmp_echo_request等)等操作。【图4-13】网络传输函数打开Boot-XSBase270\src\tftp.c文件,该文件中的函数主要完成文件TFTP传输相关操作。【图4-14】tftp命令结构体定义(3)Blob跟踪调试信息输出打开Boot-XSBase270\src\main.c文件,屏蔽config_init函数后面的printf(\033[H\033[J\n);语句,同时将该语句添加到uart_init函数后,并在uart_init函数后面添加printf(UARTinitover\n);语句。【图4-15】跟踪UART打开Boot-XSBase270\src\Lan91c111.c文件,在lan91c111_init()函数返回前添加test_get_reg();函数,测试lan91c111网卡芯片的相关寄存器。【图4-16】测试网卡寄存器打开Boot-XSBase270\src\Time.c文件,分别在time_init()函数中添加如下调试输出信息。printf(time_init++\n);……printf(udelay:msecond_boundary:%d[0x%08lx]\n,msecond_boundary,msecond_boundary);printf(time_init--\n);【图4-17】跟踪时间初始化打开Boot-XSBase270\src\Partition.c文件,在init_map函数中增加如下调试信息。printf(Memorymapnameis%s\n,part-name);printf(MemorymapSRAMBaseAddressis0x%08x\n,part-sramb);printf(MemorymapSRAMSIZEis0x%08x\n,part-srams);printf(MemorymapDRAMBaseAddressis0x%08x\n,part-dramb);printf(MemorymapDRAMSizeis0x%08x\n,part-drams);printf(MemorymapMaxSizeis0x%08x\n,part-maxs);【图4-18】跟踪DRAM/SRAM映射关系打开Boot-XSBase270\src\Flash.c文件,去掉//#definedetail(fmt,args...)printf(fmt,##args)宏定义的屏蔽符“//”,使该宏定义功能有效。【图4-19】打印flash寄存器保存所有修改后的文件在Boot-XSBase270目录下利用make命令对修改后的源码进行编译;编译后将生成boot文件。makecleanmake【图4-20】Bootloader编译将成功编译后的boot文件拷贝到JFlash_MM文件夹中,连接JTAG,开启电源,并在该目录下执行下载烧录命令start.bat。.【图4-21】Bootloader烧写重新启动开发板,在延时时间内(3秒)按空格键,Blob显示修改后调试信息。【图4-22】存储器映射关系打印【图4-23】Flash寄存器信息打印【图4-24】Bootloader菜单打印3.主要仪器设备及软件:(1)PC(2)XSBase270ARM实验开发平台一套实验五Bootloader新增命令项实验(验证型实验4学时)1.目的要求:(1)熟悉Bootloader。(2)深入理解Bootloader的源代码。(3)熟练掌握Bootloader新增命令项的基本步骤。2.实验内容(1)打开Boot-XSBase270\src\menu.c文件,在DisplayMenu函数中增加:printf([d]LEDTest\n);使Bootloader程序在启动时提供显示LED灯测试选项。【图5-1】增加Bootloader菜单项(2)打开Boot-XSBase270\src\command.c文件,在该文件中增加测试LED灯命令项对象externstructcommand_tcmd_led;,并将命令项对象添加到命令列表结构体staticstructcommand_t*cmdlist[]中。【图5-2】增加命令结构体(3)打开Boot-XSBase270\src\main.c文件,在等待选项输入的地方增加对小写英文字符”d”输入条件的选择。【图5-3】增加命令菜单字符项(4)打开Boot-XSBase270\src\main.c文件,在选项判断的case语句中增加小写英文字符”d”输入条件的选择判断。case100:command_run(ledtest);break;【图5-4】增加命令菜单项响应(5)在Boot-XSBase270\sr

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

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

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

×
保存成功