武汉理工大学-嵌入式系统的实验报告-中国好学长系列之小灰灰的爸爸
- 格式:doc
- 大小:174.50 KB
- 文档页数:17
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==武汉大学计算机学院嵌入式实验报告武汉大学计算机学院课程实验(设计) 报告课程名称:嵌入式实验专业、班: 08级姓名:学号:学期: 201X-201X第1学期成绩(教师填写)实验一 80C51单片机P1口演示实验实验目的:(1) 掌握P1口作为I/O口时的使用方法。
(2) 理解读引脚和读锁存器的区别。
实验内容:用P1.3脚的状态来控制P1.2的LED亮灭。
实验设备:(1)超想-3000TB综合实验仪 1 台(2)超想3000仿真器 1 台(3)连线若干根(4)计算机1台实验步骤:(1) 编写程序实现当P1.3为低电平时,发光管亮;P1.3为高电平时,发光管灭。
(2) 修改程序在执行读P1.3之前,先执行CLR P1.3,观察结果是否正确,分析在第二种情况下程序为什么不能正确执行,理解读引脚和读锁存器区别。
实验结果:(1) 当P1.3为低电平时,发光管亮;P1.3为高电平时,发光管灭。
(2) 不正确。
因为先执行CLR P1.3之后,当读P1.3的时候它的值就一直是0,所以发光管会一直亮而不会灭。
单片机在执行从端口的单个位输入数据的指令(例如MOV C,P1.0)时,它需要读取引脚上的数据。
此时,端口锁存器必须置为‘1’,否则,输出场效应管导通,回拉低引脚上的高输出电平。
系统复位时,会把所有锁存器置‘1’,然后可以直接使用端口引脚作为输入而无需再明确设置端口锁存器。
但是,如果端口锁存器被清零(如CLR P1.0),就不能再把该端口直接作为输入口使用,除非先把对应的锁存器置为‘1’(如 SETBP1.0)。
(3) 而在引脚负载很大的情况(如驱动晶体管)下,在执行“读——改——写”一类的指令(如CPL P1.0)时,需要从锁存器中读取数据,以免错误地判断引脚电平。
嵌⼊式系统原理及应⽤实验报告嵌⼊式系统原理及应⽤1、实验⽬的练习ARM汇编语⾔程序设计。
2、实验环境PC个⼈计算机、Windows XP操作系统、ADS1.2集成开发环境软件。
3、实验要求⽤ARM指令集设计⼀段汇编语⾔程序,完成两个64位⼆进制数的乘法运算,两个乘数分别放在r1、r0和r3、r2中(r1和r3放⾼位字),结果存在r7、r6、r5、r4中。
4实验原理及基本技术线路图ARM的乘法指令把⼀对寄存器的内容相乘,然后根据指令类型把结果累加到其它的寄存器。
长整形的“乘累加”要使⽤代表64位的⼀对寄存器,最终的结果放在⼀个⽬标寄存器或者⼀对寄存器中。
乘法指令的语法:MLA {}{S} Rd,Rm,Rs,RnMUL{}{S} Rd,Rm,RsMLA 乘累加Rd=(Rm×Rs)+RnMUL 乘法Rd=Rm×Rs{}{S} RdLo,RdHi,Rm,RsSMLAL 长整型有符号乘累加[RdHi,RdLo]=[RdHi,RdLo]+(Rm×Rs)SMULL 长整型有符号乘法[RdHi,RdLo]=Rm×RsUMLAL 长整型⽆符号乘累加[RdHi,RdLo]=[RdHi,RdLo]+(Rm×Rs)UMULL 长整型⽆符号乘法[RdHi,RdLo]=Rm×Rs长整型乘法指令产⽣64位的结果。
由于结果太⼤,不能存放在⼀个32位寄存器,所以把结果存放在2个32位的寄存器RdLo和RdHi中。
RdLo存放低32位,RdHi存放⾼32位。
利⽤UMULL和SUMLL指令可以进⾏32位宽度的⽆符号或有符号的整数乘法运算,得到64位的结果。
在实际应⽤中,有许多需要长整型乘法运算的应⽤。
例如,处理C中long long整型算术运算等。
对于64位整数乘法运算可利⽤如下页图所⽰的扩展⽅法来实现。
其中:R0,R1分别存放被乘数的低32位和⾼32位;R2,R3分别存放乘数的低32位和⾼32位;128位结果由低到⾼依次存放在R4,R5,R6,R7中。
嵌入式实验报告 实验目的: 本次实验主要旨在让学生深入了解并掌握嵌入式系统的基本概念及编程技能,同时学会使用相关软件工具,以及理解相关硬件设备的工作原理。
实验内容: 1. 熟悉嵌入式系统开发环境 2. 学习并掌握嵌入式系统编程的基本要素 3. 掌握通过GPIO实现LED的控制 4. 掌握通过串口实现数据传输 5. 了解并掌握功能强大的LINUX操作系统,实现相关应用编程
实验装置及软件环境: 1. 单片机:STM32F103C8T6
2. 开发板:STM32F103C8T6核心板 3. 传输线:TTL转USB串口线 4. 环境:Windows7操作系统 5. 编程软件:Keil MDK-ARM和ST-Link驱动软件 6. 实验工具:Oscilloscope、减压器、LED灯
实验过程: 实验一:嵌入式系统开发环境搭建 1. 下载并安装Keil MDK-ARM软件和ST-Link驱动软件
2. 将USB转TTL线连接至STM32F103C8T6核心板串口1口、电源GND及电源口
3. 编译STM32F103C8T6核心板Blink程序,使用ST-Link下载程序到核心板 实验二:嵌入式系统编程的基本要素 1. 学习微处理器系统的硬件组成及其原理
2. 学习计算机数制、数据类型和相关计算及表示方法 3. 学习汇编语言的基本概念及语法 4. 学习C语言的基础语法和特点 实验三:通过GPIO实现LED的控制 1. 搭建实验工作台,连接同实验一
2. 根据STM32F103C8T6核心板原理图,配置GPIO控制LED 3. C编程调用库函数,实现LED闪烁 ```c #include
计算机学院实验报告课程名称:嵌入式系统开发专业:软件工程班级:122002学号:2姓名:郑鑫2015年12 月19 日实验室名称:计算机实验室实验机器号:实验分组:无实验时间:2015年9月25日指导教师:时振涛实验一:Android 开发环境搭建及调试一、实验目的和要求1. 掌握Android环境搭建方法,创建第一个Android应用程序HelloWorld,熟练掌握设置环境参数2. 了解Android SDK的目录结构、Android应用程序的程序结构3. 创建一个AVD,设置Android模拟器,并会操作Android模拟器4. 使用命令行工具管理模拟器5. 熟悉Android的调试工具DDMS,掌握Logcat的使用方法。
二、实验原理:1. 利用电脑搭建安卓开发环境2. 设置Android模拟器3. 使用命令行工具管理模拟器4. 操作Android模拟器5. 使用运行(Run)模式运行三、实验设备:1. PC计算机2. JDK安装包3. Eclipse安装包4. Android SDK安装包5. ADT插件四、实验内容初步了解android project建立过程以及如何运行模拟器,对android的运行原理进行简单了解;1.搭建配置Eclipse+Android开发环境2.创建一个简单的”Helloworld”工程3.设置Android模拟器:创建新的模拟器4.用命令行工具执行如下操作实现文件操作和管理模拟器:●拷贝文件到手机内存:adb push 源文件 [/位置/目标文件]●拷贝手机文件到电脑上:adb pull [源文件] [目标文件]●修正:adb kill-server●重启:adb start-server●把电脑上某个应用(.apk)文件部署到模拟器或手机中:adb install 文件名.apk●卸载手机上的程序:adb uninstall [包名]●查看当前的targets:android list targets●创建一个AVD,要求:名字:Hphone目标平台:Android2.3.2 SD容量:100M位置:c:\test外观:WQVGAandroid create avd –target 1 –n Hphone –c 100M –p c:\test –s WQVGA●列表显示当前所有AVD:android list avd●运行刚刚建立的AVD:emulator –avd Hphone●删除一个已存在的模拟器:android delete avd –n Hphone5.使用运行(Run)模式运行:设置“Run Configuration…”选项6.练习操作DDMS工具五、实验步骤和方法1、下载JDK1.82、官方下载Eclipse,解压Eclipse3、官方下载Android SDK(工具)并解压4、运行SDK Manager.exe,下载需要的SDK版本和API5、设置Android环境变量Android_SDK_Home:安装路径增加自动搜索路径环境变量:%ANDROID_SDK_Home%\tools:%ANDROID_SDK_Home %\platform_tools:6、安装ADT过程:Help->install.newsoforms->add->……->next-> ……end。
实验一熟悉嵌入式LINUX开发环境1、实验目的熟悉UP-TECHPXA270-S的开发环境。
学会WINDOWS环境与嵌入式Linu环境共享资源的基本方法。
2、实验内容学习UP-TECHPXA270-S系统的使用、XP和虚拟机之间传送文件方法以及UP-TECHPXA270-S和虚拟机之间共享目录的建立方法。
3、预备知识了解UP-TECHPXA270-S的基本结构和配置,Linux基本知识。
4、实验设备硬件:UP-TECHPXA270-S开发板、PC机(内存500M以上)。
软件:PC机操作系统RADHAND LINUX 9+MIMICOM+RAM LINUX操作系统5、实验步骤(1)、在虚拟机下练习Linux常用命令。
(注意以下操作只能在[root@BC root]#,也就是root文件夹下运行,不然会导致系统不能启动)a. 学习命令通过“man ***”和“*** --help”得到的命令使用方法。
b.学习并掌握如下命令:ls,cd ,pwd,cat,more,less,mkdir, rmdir ,rm,mv,cp,tar,ifconfig(2)、XP与虚拟机之间传送文件(Samba服务器建立、网络设置、文件传送);(3)、了解系统资源和连线;(4)、开发板与虚拟机之间共享目录建立(设置NFS、开发板IP设置、目录挂载),挂载文件;(5)vi(vim)的使用(6)输入qt,启动桌面,按CTRL+C退出6、实验报告要求(1)、XP和虚拟机之间传送文件步骤;虚拟机共享XP文件:选择虚拟机设置,设置要共享的文件启动Linux进入/mnt/hgfs即可看到共享文件夹服务器设置——samba服务器(设置需要共享的目录)XP共享虚拟机文件:服务器设置——samba服务器(设置需要共享的目录)确保网络的PING通(即在同一局域网):1.虚拟机的192.168.1.234(RH9)2.XP的为192.168.1.1253.在XP 下点击开始-》运行(\\192.168.1.234)4.用户名bc密码123456以上实现了Linux虚拟机(RH9)和XP的文件的共享(2)、开发板与虚拟机之间建立共享目录以及文件挂载步骤;1.服务器设置——nfs服务器(设置需要共享的目录)2.设置开发板的ip地址:ifconfig eth0 192.168.1.53.在实验箱终端里输入mount -t nfs -o nolock 192.168.1.234:/up-techpxa270/exp /mnt/nfs4./mnt/nfs即为共享目录(3)、请画出虚拟机、PC机和ARM实验箱之间的硬件连接图;(4)、在Linux中怎样配置网络;系统设置->网络,在新的选项卡中(5)、实验中遇到的问题与解决过程。
2008221104210068 陈见08计科2班嵌入式系统实验报告一一.实验目的:1.了解嵌入式开发中的硬件(e.g.EELIOD)与软件(e.g.bootloader)2.了解嵌入式系统的开发环境,内核的下载和启动过程3.了解Linux内核配置和编译过程•了解Linux内核源代码的目录结构以及各目录的相关内容•了解Linux内核一些基本配置选项内容和作用•掌握Linux内核的编译过程4.了解嵌入式文件系统的构建过程•了解嵌入式操作系统种文件系统的类型和作用•掌握利用BusyBox 软件制作嵌入式文件系统的方法•掌握嵌入式Linux 文件系统的的挂载过程二.实验内容:<1>嵌入式系统开发1、bootloader嵌入式系统中通常并没有像BIOS那样的固件程序,因此整个系统的加载启动任务完全由bootloader来完成。
其主要作用是:初始化硬件设备;建立内存空间的映射图;完成内核的加载,为内核设置启动参数。
bootloader 就是在操作系统内核运行之前运行的一段小程序。
通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
2、串口设置(minicom)多数嵌入式系统都通过异步串行接口(UART)进行初级引导。
这种通信方式是将字符一位一位地传送,一般是先低位、后高位。
因此,采用串行方式,双方最少可以只用一对连线便可实现全双工通信。
字符与字符之间的同步靠每个字框的起始位协调,而不需要双方的时钟频率严格一致,因此实现比较容易。
启动minicom▪主机运行minicom,该程序通过串口(RS232)和目标机连接。
▪ minicom-s表示对串口进行设置,普通用户不需要这一步。
▪串口设置/dev/ttys0 bps=115200,8位数据,无检验,无流控制。
▪bootloader提示符下面可设定本机IP,宿主机IP,将要下载的内核文件名,文件系统名及其它参数。
实验报告课程名称:嵌入式系统学院:信息工程专业:电子信息工程班级:学生姓名:学号:指导教师:开课时间:学年第一学期实验名称:IO接口(跑马灯)实验时间:11.16 实验成绩:一、实验目的1.掌握 STM32F4 基本IO口的使用。
2.使用STM32F4 IO口的推挽输出功能,利用GPIO_Set函数来设置完成对 IO 口的配置。
3.控制STM32F4的IO口输出,实现控制ALIENTEK 探索者STM32F4开发板上的两个LED实现一个类似跑马灯的效果。
二、实验原理本次实验的关键在于如何控制STM32F4的IO口输出。
IO主要由:MODER、OTYPER、OSPEEDR、PUPDR、ODR、IDR、AFRH和AFRL等8个寄存器的控制,并且本次实验主要用到IO口的推挽输出功能,利用GPIO_Set函数来设置,即可完成对IO口的配置。
所以可以通过了开发板上的两个LED灯来实现一个类似跑马灯的效果。
三、实验资源实验器材:探索者STM32F4开发板硬件资源:1.DS0(连接在PF9)2.DS1(连接在PF10)四、实验内容及步骤1.硬件设计2.软件设计(1)新建TEST工程,在该工程文件夹下面新建一个 HARDWARE文件夹,用来存储以后与硬件相关的代码。
然后在 HARDWARE 文件夹下新建一个LED文件夹,用来存放与LED相关的代码。
(2)打开USER文件夹下的test.uvproj工程,新建一个文件,然后保存在 LED 文件夹下面,保存为 led.c,在led.c中输入相应的代码。
(3)采用 GPIO_Set 函数实现IO配置。
LED_Init 调用 GPIO_Set 函数完成对 PF9 和 PF10 ALIENTEK 探索者 STM32F407 开发板教程 119 STM32F4 开发指南(寄存器版) 的模式配置,控制 LED0 和 LED1 输出 1(LED 灭),使两个 LED 的初始化。
试验三【1 】试验请求:装配Tornado ULIP仿真网卡驱动,启动2个vxSim目标体系,个中一个vxSim为TCP Client,另一个为TCP Server.TCP Server与Client经由过程socket API进行数据的收发.别的请求在VxWorks中集成target shell组件及ping相干组件,可以或许在两个vxsim上互相ping通,验证收集情形.最根本请求是可以或许完成数据收发.具体通讯内容及方法不限,可以自由施展,简略的可所以新闻收发,庞杂的可所以协定通讯.须要将target shell中ping通的截图放在试验陈述中.试验目标:熟习Tornado ULIP仿真网卡驱动的装配和运用;熟习VxWorks bootable工程的创建和VxWorks映像的生成;熟习VxWorks收集编程.一.试验道理TCP的双机通讯是基于socket套接字树立衔接的.收集的Socket数据传输是一种特别的I/O,Socket也是一种文件描写符.Socket也具有一个相似于打开文件的函数挪用Socket(),该函数返回一个整型的Socket描写符,随后的衔接树立.数据传输等操纵都是经由过程该Socket实现的.经常运用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM).流式是一种面向衔接的Socket,针对于面向衔接的TC P办事运用;数据报式Socket是一种无衔接的Socket,对应于无衔接的UDP办事运用.在本次试验中要用到的就是流式Socket.两个收集程序之间的一个收集衔接包含五种信息:通讯协定.当地协定地址.当地主机端口.远端主机地址和远端协定端口.Socket数据构造中包含这五种信息.二.设计解释本试验是一个须要运用到客户端/办事器通讯模式的问题.重要的设计流程为,底层的网卡驱动装配好后,挪用尺度的Socket套接字经由过程TCP/IP 协定进行通讯.办事器端等待办事.一旦有客户端的通讯请求,假如通讯协定相符,则树立衔接,进行通讯.办事器一方运用TCP套接字与客户端通讯.在办事的主轮回中,义务tcpServerWorkTask起首读取来自客户端的请求,并想掌握台输出客户信息,假如须要,将向客户端发送应答信息.客户端经由过程掌握台提醒输入,树立请求报文,然后发送到办事器,假如须要应答,则等待来自办事器端的回应.具体的通讯流程如下图:试验具体步调:1.装配ULIP适配器在掌握面板里选择“添加删除硬件”->“添加/消除装备故障”->“添加新设备”-> “从列表选择硬件”->“网卡”->”从磁盘装配”,接着选择tornado\host\x86-win32\bin\下的,然后肯定并封闭窗口;装好之后,在ipconfig /all的输出中可看到多了一个网卡windriver ulip;2.3.设置装备摆设ULIP适配器在IP栏输入(可所以),子网掩码设为,点高等,在wins页选择禁用TCP/IP上的NETBIOS,然后肯定封闭,然后可用验证适配器是否工作正常;4.启动Routing and Remote Access这个办事,并将该办事设为主动启动;5. 中的 #if TRUE 为#if FALSE.6.新建一个Bootable的工程,BSP选为simpc,然后编译,假如你想磨练一下收集功效,可在workspace的vxworks页的network components->networking protocols ->network applications->ping client点右键include ping client,从新build;7.Launch simulator,选择custom-built simulator,阅读选中适才编译出来的,processor no.设为0(full simulator可支撑16个simulator,并且可以或许互相通讯,它们的processor no.分离是0-15),肯定;8.Launch target server,封闭Launch simulator后会提醒你launch target server,点Details,选中Full simulator,修正上面的敕令行参数,将C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/tsfs改为体系中消失的目次,点OK 启动target server,然后你可以双击窗口右下方的target server图标检讨启动情形;也可以经由过程Tornado菜单(Tools->target server->configure)进行target server的设置装备摆设并启动它;9.假如Target server启动成功,你点launch shell启动一个shell,输入“ping "host 的ip",3”,回车,ping通了就解释收集仿真已经成功;10.将所需文件添加到工程,然后build工程.为每一台目标机设置装备摆设一个ta rgetserver,然后启动它们.为了实现双向通讯,必须将build生成的tcpServer.o和tcpClient .o都分离下载到两台目标机.在两台目标机的敕令行下将tcpServer.o和tcpClient.o load到内存,敕令如下:-> ld < tcpServer.o和-> ld < tcpClient.o.11. 在每一台目标机下启动办事器端的义务,敕令如下:-> sp tcpServer检讨当前的义务,即可以发明每一台目标机上都启动了tcpServer这个义务,暗示都处于监听状况.可以双向通讯了,两台目标机ip分离为192.168.225.1和192.168.225.2.三.运行成果图片(1) VxSim0 为TCP Client,先履行ping函数,ping办事器的ip地址,成功ping通,接着运行了函数client(“”,“my name is Dongwenjing, my number is 2011111785”),192.168.255.2为server的IP地址.Client顺遂与Server衔接后输入要发送的字符串,肯定后成功发送,并收到了server的答复.(2) VxSim1 为TCP Server,同样ping客户端的ip地址,成功.履行server函数,可以看到client发来的新闻.四.程序调试记载在程序调试的进程中消费时光较多的是在前期预备上,主如果ULIP仿真网卡的装配和设置装备摆设上,可能是因为本身在装配和设置装备摆设进程中的纰漏和步调漏掉,使得在敕令行中ping并没有ping通,后来查找原因又试验了一次,总算在敕令行中ping通.后来在同时启动两个VxSim的进程中也碰到了问题,经由向师兄们就教,解决了这个问题.。
《嵌入式系统原理及实验》实验报告Lab 1超级循环模式与头文件模式李颖琦学号:201013201009 电子邮件:zhangsan@2012年11月17日一、闪烁灯(一)实现原理1.总体思路:利用软件延迟实现led灯的闪烁。
2.硬件设计:电路图解释:c1,c2,x1构成的是震荡电路;r1,c3构成的是上位电路;p2.0,led,r2连进单片机,当p2.0=0时亮,1则灭。
(电路图/仿真图+解释。
)3.软件设计:开始P2.0 输出“1”;D1灭延时0.2秒P2.0 输出“0”;D1亮延时0.2秒流程图代码解释:左边是头文件,delay函数是实现软件延迟0.2s;右边是主函数,super loop 是实现led灯不断交替闪烁。
(流程图,算法解释,关键代码段+解释。
)(二)调试1.调试的方式:联合调试调试现象:当按调试按键后,电路图均有通电现象,即呈现的是做好准备能够正常工作。
(调试现象、详细过程。
)2.遇到问题的处理(如果有就写,不论是电路的问题还是软件的问题)(三)实验再思考1.进一步改进的设想(如果有)2.实验的收获(或总结):能够实现led灯闪烁,能够看懂程序的意思。
3.实验中尚不能解决的疑问(如果有)二、发光二极管显示一位十进制的BCD码(一)实现原理1.总体思路:再次利用软件延迟逐个实现led灯的闪烁。
2.硬件设计:电路图解释:c1,c2,x1构成的是震荡电路;r1,c3构成的是上位电路;p2.0-p2.3,led,r2-r5连进单片机,当p2.*=0时亮,1则灭,依次实现bcd二进制数0-9的转换(此截图为二进制数8的实验现象)。
3.软件设计:流程图基本同上小个实验代码解释:左边是主函数部分,super loop是以赋值的形式实现led灯在0-9位二进制数之间不断依次交替闪烁;右边是头文件,delay函数是实现软件延迟0.2s。
(二)调试1.调试的方式:联合调试调试现象:当按调试按键后,电路图均有通电现象,即2.遇到问题的处理:程序中的定义位声明,一定要分别以sbit p2_0=p2^0的形式来定义的原因。
----WORD格式--可编辑--------嵌入式系统实验报告内容第一章: ARM2410CL 嵌入式系统基础实验实验一 ARM2410CL嵌入式教学实验系统实验报告要求:(1)简述嵌入式 LINUX 开发的流程。
实验二嵌入式 LINUX 开发环境的配置实验报告要求:(1)简述嵌入式 LINUX 开发环境配置的具体步骤。
(2)简述网络文件系统( NFS)。
第二章:系统实验实验一LINUX基本应用程序编写实验实验报告要求:(1)简述交叉编译器基本概念及简述计算机平台和ARM 平台编译环境的异同。
(2)简述 Makefile 文件作用和基本组成。
(3)ARM 中怎样将编写的应用程序下载到LINUX中?怎样在 LINUX 中运行该程序?实验二串行端口程序设计实验报告要求:(1)简述 LINUX 下的串口程序设计的基本步骤。
(2)编写一个简单的文件收发程序完成串口文件的下载并画出实验流程图。
第三章:内核与根文件系统实验实验一内核移植与编译实验实验报告要求:(1) LINUX 内核移植的基本概念。
(2)简述 LINUX 内核配置和编译步骤。
实验二根文件系统实验实验报告要求:(1)简述文件系统的基本概念并列出LINUX 下根文件系统的目录结构及习惯用法。
(2)在 LINUX 下,怎样制作 cramfs 格式的根文件系统?实验心得:(要求写出关于本次实验收获及实验教学的意见及建议)注: 1.实验报告要求使用实验报告纸完成。
2.实验报告需在 17 周周五之前完成统一交与班长处。
实验报告书实验课程名称嵌入式操作系统开课学院计算机科学与技术学院指导教师姓名毛雪涛学生姓名小灰灰的爸爸学生专业班级中国好学长系列2013 —2014 学年第二学期实验课程名称:嵌入式操作系统实验课程名称:嵌入式操作系统实验课程名称:嵌入式操作系统第二部分:实验调试与结果分析(可加页)五、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)无六、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)一、准备工作建立工作目录,下载源码,安装交叉工具链,步骤如下。
mkdir /root/build_kernelcd /root/build_kernelwget -c /pub/linux/kernel/v2.6/linux2.6.14.1.tar.bz2tar jxvf linux2.6.14.1.tar.bz2export PATH=/usr/local/arm/3.3.2/binPATH二、修改顶层Makefile修改内核目录树根下的的Makefile,指明体系结构是arm,交叉编译工具是arm-linux-。
vi Makefile找到ARCH和CROSS_COMPILE,修改ARCH ?= armCROSS_COMPILE ?= arm-linux-保存退出。
三、设置flash分区此处一共要修改3个文件,分别是:arch/arm/mach-s3c2410/devs.c ;指明分区信息arch/arm/mach-s3c2410/mach-smdk2410.c ;指定启动时初始化drivers/mtd/nand/s3c2410.c ;禁止Flash ECC校验3.1指明分区信息在arch/arm/mach-s3c2410/devs.c文件中:vi arch/arm/mach-s3c2410/devs.c在arch/arm/mach-s3c2410/devs.c文件添加的内容包括:(1)添加包含头文件。
(2)建立nand flash分区表。
(3)假如分区信息(4)建立Nand Flash芯片支持(5)加入Nand Flash芯片支持到Nand Flash驱动(1)添加包含头文件。
#include <linux/mtd/partitions.h>#include <linux/mtd/nand.h>#include <asm/arch/nand.h>.../* NAND Controller */static struct mtd_partition partition_info[] ={{ /* 256kB */name: "boot",size: 0x00040000,offset: 0x0,},{ /*1.75MB */name: "kernel",size: 0x001C0000,offset: 0x00040000,}, { /* 30MB */name: "root",size: 0x01e00000,offset: 0x00200000,}, { /* 32MB */name: "user",size: 0x02000000,offset: 0x02000000,}};name: 代表分区名字size: 代表flash分区大小(单位:字节)offset: 代表flash分区的起始地址(相对于0x0的偏移)目标板计划分4个区,分别存放boot, kernel, rootfs以及以便以后扩展使用的用户文件系统空间。
(3)加入Nand Flash分区struct s3c2410_nand_set nandset ={nr_partitions: 4, /* 指明partition_info中定义的分区数目*/partitions: partition_info, /* 分区信息表*/};(4)建立Nand Flash芯片支持struct s3c2410_platform_nand superlpplatform={tacls:0,twrph0:30,twrph1:0,sets: &nandset,nr_sets: 1,};sets: 支持的分区集nr_set:分区集的个数(6)加入Nand Flash芯片支持到Nand Flash驱动另外,还要修改此文件中的s3c_device_nand结构体变量,添加对dev成员的赋值struct platform_device s3c_device_nand = {.name = "s3c2410-nand", /* Device name */.id = 1, /* Device ID *//* Add the Nand Flash device */.dev = {.platform_data = &superlpplatform}};name: 设备名称id: 有效设备编号,如果只有唯一的一个设备为1,有多个设备从0开始计数.num_resource: 有几个寄存器区resource: 寄存器区数组首地址dev: 支持的Nand Flash设备3.2 指定启动时初始化kernel启动时依据我们对分区的设置进行初始配置.arch/arm/mach-s3c2410/mach-smdk2410.c文件vi arch/arm/mach-s3c2410/mach-smdk2410.c修改smdk2410_devices[].指明初始化时包括我们在前面所设置的flash分区信息static struct platform_device *smdk2410_devices[] __initdata = {s3c_device_usb,s3c_device_lcd,s3c_device_wdt,s3c_device_i2c,s3c_device_iis,* 添加如下语句即可*/s3c_device_nand,};保存,退出。
3.3 禁止Flash ECC校验我们的内核都是通过UBOOT写到Nand Flash的, UBOOT通过的软件ECC算法产生ECC 校验码, 这与内核校验的ECC码不一样, 内核中的ECC码是由S3C2410中Nand Flash控制器产生的. 所以, 我们在这里选择禁止内核ECC校验.修改drivers/mtd/nand/s3c2410.c 文件:vi drivers/mtd/nand/s3c2410.c找到s3c2410_nand_init_chip()函数,在该函数体最后加上一条语句:chip->eccmode = NAND_ECC_NONE;保存,退出。
OK.我们的关于flash分区的设置全部完工.四、支持启动时挂载devfs为了我们的内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/dev为devfs文件系统,修改fs/Kconfig文件vi fs/Kconfig找到menu "seudo filesystems"添加如下语句:config DEVFS_FSbool "/dev file system support (OBSOLETE)"default yconfig DEVFS_MOUNTbool "Automatically mount at boot"default ydepends on DEVFS_FS五、配置编译内核cp arch/arm/configs/smdk2410_defconfig .configmake menuconfig在smdk2410_defconfig基础上,我所增删的内核配置项如下:这里约定“#”后面的是注释部分。
Loadable module support -->Enable loadable module supportAutomatic kernel module loadingSystem Type -->S3C2410 DMA supportBoot options --> Default kernel command string:noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200#说明:mtdblock2代表我的第3个flash分区,它是我的rootfs# console=ttySAC0,115200使kernel启动期间的信息全部输出到串口0上.# 2.6内核对于串口的命名改为ttySAC0,但这不影响用户空间的串口编程。
# 用户空间的串口编程针对的仍是/dev/ttyS0等Floating point emulation -->NWFPE math emulationThis is necessary to run most binaries!!!#接下来要做的是对内核MTD子系统的设置Device Drivers -->Memory Technology Devices (MTD) -->MTD partitioning support#支持MTD分区,这样我们在前面设置的分区才有意义Command line partition table parsing#支持从命令行设置flash分区信息,灵活RAM/ROM/Flash chip drivers --><*> Detect flash chips by Common FlashInterface (CFI) probe<*> Detect nonCFIAMD/JEDECcompatibleflash chips<*> Support for Intel/Sharp flash chips<*> Support for AMD/Fujitsu flash chips<*> Support for ROM chips in bus mappingNAND Flash Device Drivers --><*> NAND Device Support<*> NAND Flash support for S3C2410/S3C2440 SoC Character devices >Nonstandard serial port supportS3C2410 RTC Driver#接下来做的是针对文件系统的设置,本人实验时目标板上要上的文件系统是cramfs,故做如下配置File systems --><> Second extended fs support#去除对ext2的支持Pseudo filesystems -->/proc file system supportVirtual memory file system support (former shm fs)/dev file system support (OBSOLETE)Automatically mount at boot (NEW)#这里会看到我们前先修改fs/Kconfig的成果,devfs已经被支持上了Miscellaneous filesystems --><*> Compressed ROM file system support (cramfs)#支持cramfsNetwork File Systems --><*> NFS file system support保存退出,产生.config文件.编译内核make zImage注意:若编译内核出现如下情况LD .tmp_vmlinux1armlinuxld:arch/arm/kernel/vmlinux.lds:1439: parse errormake: *** [.tmp_vmlinux1] Error 1解决方法:修改arch/arm/kernel/vmlinux.ldsvi arch/arm/kernel/vmlinux.lds将文件尾2条的ASSERT注释掉;/* ASSERT((__proc_info_end __proc_info_begin), "missing CPU support") *//* ASSERT((__arch_info_end __arch_info_begin), "no machine record defined") */然后重新make zImage即可。