1、摘要目录摘要IABSTRACTII前言IV1 绪论11.1 电子相册市场成长的必然性11.2设计理念12 硬件设计方案22.1 采用此硬件方案的优势32.2 采用Linux操作系统的优势32.3 S3C24010处理器42.4 小结93 LINUX系统的建立93.1 Linux的启动过程93.2 启动代码和BootLoader103.3 U-BOOT的移植和修改步骤113.4 Linux内核移植143.5 文件系统的创建153.6 Qt/Embedded核心技术163.7 小结204 基于嵌入式的电子相册应用程序设计204.1图片播放模块204.2 移动设备读取模块234.3 设置模块254.
2、4 小结27结论28参考文献29致谢31附录32摘要随着数码相机的盛行,传统相机逐渐退出历史的舞台。对于数码相片的欣赏和摆设,人们一般只能通过PC机,极其不方便。电子相册正是迎合这种需求,它体积小,能随时更换相片,并具有USB传输功能,能够即插即用,拥有较大的存储空间。本设计采用了比较通用的S3C2410系列处理芯片为主芯片和源代码开放的嵌入linux操作系统共同建立的平台设计了电子相册系统,主要实现的功能有对多种格式相片在640*480LCD触摸屏上以幻灯形式播放、USB读取等功能。该设计具有成本低,功能强大等特点。关键词:S3C2410 Nandflash LCD触摸屏 linuxIVAB
3、STRACTABSTRACTWith the popularity of digital camera, traditional camera gradually withdraw from the stage of history. For digital photo appreciation and furnishings, it is generally only through the PC, is extremely inconvenient. Electronic album is to meet this demand, its small size, can be replac
4、ed at any time photos, and with the USB plug and play, with a large storage space. This design uses a more generic S3C2410 series processing chip-based chips and open source embedded Linux operating system designed to establish a platform for the electronic album, The main functions of a variety of
5、formats photos on the touch screen of 640 * 480LCD a slide show playback, USB read. The design has a low cost, powerful features.Key words: S3C2410 Nandflash LCD touch screen Linux 前言前言随着数码相机的大量普及和人们对多媒体娱乐播放的需求,各种记忆卡越来越多地被运用于存放数码照片和多媒体文件。不同用户的计算机中存满各种照片,连桌上相框中照片的更换频率也提高了。先输出照片,然后更换到相框中,这样的程序比较烦琐,常常要
6、通过计算机才能将相片进行显示与分享。对数码相片进行便捷的显示、分享、编辑、删除、打印等操作逐渐成为市场的需求。电子相框,数码伴侣等概念型产品逐渐出现在数码市场,电子相册也由概念型产品进入市场已有六、七年。目前,电子相册产品主要应用于礼品市场,其真正的目标用户却是非常广泛的,并且它的最终消费人群应该是以家庭为主的普通消费者,其应用的领域将更广阔。国内也有厂家很早就注意到这类产品的良好的发展趋势,例如曾作为NHJMP4中国地区总代理的北京中电金捷数码科技有限公司,就及时地推出了自有品牌的金捷电子相册,并且以出众的外观设计和良好的口碑效应,以及亲民的价格赢得了市场的青睐。27黑龙江八一农垦大学毕业设
7、计(论文)1 绪论1.1 电子相册市场成长的必然性(1)市场需求的必然性在上世纪末本世纪初,电子相册呈现迅速发展的势头,普及型数码相机的分辨率由200万象素增长到现在的8001500万象素,价格也由300美元左右下降到现在的120美元左右。随着数码相机的日益普及,作为一种以数字照片的保存、回放和浏览为核心功能的产品电子相册自然迎合了消费者的需求。(2) 核心器件性能和价格的合理化推动市场的发展电子相册有三大核心器件:处理器,半导体存储器和LCD显示单元。随着ARM的不断发展,电子相册所需要的ARM+Jpeg处理器技术已为许多厂商所拥有,集成了USB Host及卡接口单元的产品也屡见不鲜。Nan
8、dflash技术飞速发展,单位容量的价格在过去的六年中约下跌40至50倍。电子相册是以数字照片的存储和浏览为主要功能的产品,由于需要满足跟PC相同的类似功能,这类产品的主要特征是:(1)有大容量的内置数据存储器;(2)USB 等各种卡接口,并支持内部存贮器与各种数据存贮器之间的同步以及相互拷贝;(3)强大的文件管理功能:浏览,搜寻,命名(重命名),复制,删除,备份等;(4)带或不带内建显示单元,有能支持其它高分辨率显示设备的接口(如色差,VGA甚至是HDMI);与其他产品的功能结合的产品形态以及大头贴等产品,用于不在本文所包含的范围内。1.2设计理念本设计采用了比较通用的S3C2410系列处理
9、芯片为主芯片和源代码开放的嵌入linux操作系统共同建立的平台设计了电子相册系统,主要实现的功能有对多种格式相片在640*480LCD触摸屏上以幻灯形式播放、USB读取等功能。该设计具有成本低,功能强大等特点。针对nandflash启动的支持,实现了启动引导程序U-BOOT的修改和移植,以及嵌入式linux内核的裁剪和驱动的修改,包括nandflash分区、LCD驱动修改等;在软件开发的同时,我们根据该项目设计需求,完成了电路原理图和PCB版图的设计。在硬件上,可以再加一个DSP处理器,专门用来处理音视频的解码,实现视频播放功能;也可以增加以太网络或WIFI模块,实现上网获取图片的功能。2 硬
10、件设计方案本设计选用方案:以ARM9CPU_S3C2410为核心,以Linux操作系统为软件核心架构。基于ARM的微处理器具有低功耗、低成本、高性能等特点,ARM采用RISC(精简指令集计算机)架构和流水线结构,使用了大量的寄存器,具有极高的工作效率。其中,RISC架构具有如下特点:固定长度的指令格式,指令归整、简单,基本寻址方式只有23种,使用单周期指令,便于流水线操作。ARM微处理器按性能分为以下系列:ARM7,ARM9,ARM9E,ARM10E,SecureCore Xscale。ARM支持两种类型的指令集:一种是32位的ARM指令,以字对准保存;另一种是16位的Thumb指令,半字对准
11、保存。ARM具有7种工作状态:USR:正常的程序执行状态FIQ:用于高速数据传输或通道处理IRQ:用于通用的中断处理SVC:操作系统使用的保护模式ABT:用于虚拟存储及存储保护UND:当出现未定义指令终止时进入该模式SYS:运行具有特权的操作系统任务在ARM体系中有一个重要的概念异常:当正常的程序执行流程发生暂时的停止时就叫做异常,例如处理一个外部的中断请求。在处理异常之前,当前的处理器状态必须被保留,当异常处理完后,异常发生前的程序可以继续执行。处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。ARM支持的异常类型有:复位:复位电平有效时,产生复位异常;未定义指令:遇到不能处理的指
12、令时,产生未定义指令异常;软件中断:执行SWI指令产生,用于用户模式下的程序调用特权操作指令;指令预取中止:处理器预取指令的地址不存在,或该地址不允许当前指令访问,产生指令预取中止异常;数据中止:处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常;中断服务请求:外部中断请求有效,且CPSR中的1位为0时,产生IRQ异常;快速中断请求:快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。2.1 采用此硬件方案的优势如上所述:(1)系统芯片功能强大,实现的功能多,对于新的多媒体格式支持性好,只需要安装更新的软件;(2)硬件电路简单,可采用标准电路,不需耗费过
13、多的资源(人力,资金等);(3)可以在硬件上增加模块,留作二次开发使用,极为方便;(4)S3C2410是一个比较成熟的芯片,技术积累齐全;(5)S3C2410支持丰富的存储卡接口。2.2 采用Linux操作系统的优势Linux是一种自由和开放源码的类Unix操作系统。目前存在着许多不同的Linux,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,从手机、平板电脑、路由器和视频游戏控制台,到台式计算机、大型机和超级计算机。Linux是一个领先的操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统。严格来讲,Linux这个词本身只表示Linux内核,但实际上
14、人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。Linux是我国软件的国策,尤其是在IT行业,庞大的使用群体、开放的体系和丰富资源使得Linux将是日后普及和推广的重点。Linux的优越性日益凸显Linux将是我们学习和工作实用的首选。目前,很多网络技术、服务器、网络设备都是基于Linux操作系统,并且在不少时尚的手机、PDA、媒体播放器等消费类电子产品中已经广泛使用Linux作为操作系统。在Linux软件国策的指引下,Linux已经得到很大的普及。很多学生已经自发地通过书籍、互联网等资源学习Linux。综上所述,提高技术水平就是以市场流
15、行需求为导向进行研发,特别是像嵌入式种工程类的技术。在条件允许的情况下,我们甚至应该时刻与国际接轨,掌握当前最领先的技术。2.3 S3C24010处理器2.3.1 S3C2410简介S3C2410为手持设备和一般类型应用提供了低价格、低功耗、高性能小型微控制器的解决方案。采用272脚FPGA封装,内含一个ARM920T内核。为了降低系统成本,S3C2410A 提供了以下丰富的片内外围。ARM9-S3C2410处理器,ARM920T核由ARM9TDMI、存储管理单元,MMU和高速缓存三部分组成。其中MMU可以管理虚拟内存,高速缓存由独立的16KB地址和16KB数据高速Cache组成。ARM92T
16、0有两个内部协处理器:CP14和CP15。CP14用于调试控制CP15用于存储系统控制以及测试控制。总的资源如下:内核工作电压为1.2V,内存工作电压兼容1.8V/2.5V/3.3V,外围I/O口使用3.3V,集成16KB的指令缓存和16KB的数据缓存,带MMU(Memory Management Unit),支持SRAM和SDRAM等内存。LCD控制器接口(最高支持4K色的STN和256K色的TFT)4通道DMA控制器3通道UART2通道SPI接口IIC总线接口IIS音频编解码数据接口AC97音频接口MMC/SD存储卡接口2通道USB传输接口和1个复用的USB设备接口4通道PWM(脉宽调制)
17、定时器和1个看门狗定时器8通道10位ADC和一个触控屏接口实时时钟130个GPIO口和24通道外部中断源接口片上PLL时钟发生锁相环总的方案图如图2.1:LCD显示ARM芯片S3C2410RESET电 路SDRAMNandFlash时钟电路USB接口电源图2.1 硬件系统框图2.3.2 SDRAM存储接口电路SDRAM:同步动态随机存储器,同步是指 Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写。使用S3C2410的nGCS6片选信号的数据总线与上S3C2410的
18、低16位相连。操作地址的最小值变为0x00000004,所以将S3C2410的ADDR2-ADDR14顺序与KM416S4030的A0-A12,HY29LV160的A1-A13相连。KM416S4030的BA0、BA1是SDRAM内部BANK选择地址线,代表着SDRAM内存的最高地址,因为两片KM416S4030组成了64M的内存,也就是说要26根地址线来实现寻址,所以将BA0、BA1分别与S3C2410的ADDR24和ADDR25引脚相连原理图如图2.2所示:图2.2 SDRAM存储电路2.3.3 NANDFLASH存储电路Nand-flash内存是flash内存的一种,其内部采用非线性宏单
19、元模式,为固态大容量内存的实现提供了廉价有效的解决方案。Nand-flash存储器具有容量较大,改写速度快等优点,适用于大量数据的存储,因而在业界得到了越来越广泛的应用,如嵌入式产品中包括数码相机、MP3随身听记忆卡、体积小巧的U盘等。NOR和NAND是现在市场上两种主要的非易失闪存技术。当前NORFLASH价格比较昂贵,考虑到成本问题,本设计采用了64M的K9F1208U0B Nand Flash作为介质存储电路,将K9F1208U0B的I/O0-7与上S3C2410的数据总线DATA0-7相连,实现数据的读写。S3C2410中Nand Flash控制器的R/nB与K9F1208U0B的R/
20、nB相连,可以检查nFCE/GPA22、nFRE/GPA20、nFWE/GPA19分别与K9F1208U0B的CLE、nCE、nRE、new是否相连。分别可以控制K9F1208U0B的地址锁存使能、命令锁存使能、片选使能、读使能和写使能。原理图如图2.3所示:图2.3 NandFlash 存储电路2.3.4 电源模块S3C2410的电源引脚分为:VDDalive引脚给处理器复位模块和端口寄存器提供1.8V电压;VDDi和VDDiarm为处理器内核提供1.8V电压;VDDi_MPLL提供1.8V模拟电源和数字电源;VDD_UPLL为UPLL提供1.8V模拟电源和数字电源;VDDOP和VDDMOP
21、分别为处理器存储端口提供3.3V电压;VDDRTC为 处理器内的ADC系统提供3.3V电压;VDDRTC为时钟电路提供1.8V电压,该电压在系统掉电后仍需要维持。在该系统中,需要使用1.8V和3.3V的直流稳压电源。为简化系统电源电路的设计,要求整个电路系统的输入为高质量的5V直流稳压电源,然后采用两个LM117电压稳压器转成3.3V的VDD和VCC;再采用IN4148稳压管来保证电源输入电压的稳定性。 组成。复位电路是用一个74HC14反施密特触发芯片实现两级非门是用于按钮去抖动和波形整形;nRESET端的输出状态与RESET端输出状态相反,用于低电平复位的器件。电源电路
22、如图2.4所示:图2.4 电源电路2.3.5 USB 电路模块根据S3C2410内部的USB控制器,它的接口规范:主机接口的正负数据线分别接15K欧姆的下拉电阻,并且分别通过22欧姆的电阻与CPU的Dpn和DNn相连;设备接口的正数据线要接1.5K欧姆的上拉电阻,而负数据线接470欧姆的下拉电阻,正负数据线与CPU之间接22欧姆的终端电阻。2.3.6 LCD电路模块LCD 的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光出射与否而达到显示目的。现在LC
23、D已经替代CRT成为主流,价格也已经下降了很多,并已充分的普及。图2.5和图2.7是S3C2410X芯片内部集成的LCD控制器的外部管脚图和内部方框图,其中内部的寄存器作用如下:REGBANK有17个可编程寄存器组和256*16的调色板存储器,用来设定LCD控制器。LCDCDMA是一个专用DMA,自动从帧存储器传输视频数据到LCD控制器,用这个特殊的DMA,视频数据可不经过CPU干涉就显示在屏幕上。VIDPRCS接受从LCDCDMA来的视频数据,并在将其改变到合适数据格式后,经VD23:0将之送到LCD驱动器,如4/8单扫描或4双扫描显示模式。LENDLCD-PWRENLCDVF0LCDVF1
24、LCDVF2S3C2410LCD控制器VD23-0VM/VDEN/TPVFRAME/VSYNC/STVVLINE/VSYNC/CPVVCLK/LCD HCLK图2.5 S3C2410 LCD控制器外部管脚图由于S3C2410内部集成的LCD控制器如上所以设计的外接LCD电路模块如图2.6: 图2.6 LCD模块电路2.4 小结本章节首先介绍了嵌入式ARM-Linux系统的组成,并简要介绍了Linux操作系统的历史及Linux操作系统在嵌入式领域的应用。介绍了S3C2410的功能,并对SDRAM存储接口电路、NANDFLASH存储电路、电源模块、USB电路模块和LCD电路模块的设计进行了说明。对
25、系统各组成部分功能作了简要说明,对系统主要技术指标、性能及结构特点亦作了简要介绍。3 Linux系统的建立本设计采用的是嵌入式Linux系统,嵌入式Linux(Embedded Linux)是指对Linux经过裁剪小型化后,可固化在存储器或单片机中,应用于特定嵌入式场合的专用Linux操作系统。Linux做嵌入式的优势:首先,Linux是开放源代码,是遍布全球的众多Linux爱好者和Linux开发者的强大技术支持;其次,Linux的内核小、效率高,内核的更新速度很快,Linux可以定制,其系统内核最小只有约134KB;第三,Linux是免费的OS,在价格上极具竞争力。Linux还有着嵌入式操作
26、系统所需要的很多特色,突出的就是Linux适应于多种CPU和多种硬件平台,是一个跨平台的系统。到目前为止,它可以支持二三十种CPU。而且性能稳定,裁剪性很好,开发和使用都很容易,移植性很强,移植的速度远远超过Java的开发环境,即用Linux环境开发的产品,二次开发方便。同时,Linux内核的结构在网络方面是非常完整的,Linux对网络中最常用的TCP/IP协议有最完备的支持,提供了包括十兆、百兆、千兆的以太网络,以及无线网络、Toker ring(令牌环网)、光纤甚至卫星的支持。还有使用Linux开发无线连接产品的开发者越来越多。3.1 Linux的启动过程嵌入式Linux的启动流程大概如下
27、:第一阶段,用户上电,CPU进入自动实模式,通常是从ROM-BIOS的地址0xffff0开始执行代码,按BIOS中设置的启动设备进行启动,接着启动设备上安装的引导程序lilo或grub开始引导Linux。第二阶段,Linux首先进行内核的引导,主要完成磁盘引导、读取机器系统数据、实模式和保护模式的切换、加载数据段寄存器以及重置中断描述符表等。第三阶段,执行init系统初始化工作,init程序调用了rc.sysinit和rc等程序,而rc.sysinit和rc在完成初始化和运行服务的任务后,返回init。第四阶段,init启动mingetty,打开终端供用户登录系统,用户登录成功后进入了shel
28、l,这样就完成从开机到登录的整个启动过程。应用程序文件系统参数内核BootLoader图3.1 Linux系统各部分软件图一个嵌入式Linux系统从软件的角度看通常可以分为四个层次:(1)引导加载程序。包括固化在固件中启动代码和Bootloader两大部分。(2)Linux内核。特定于嵌入式电路板的内核以及控制内核引导系统的参数。(3)文件系统。包括根文件系统和建立于Flash内存设备上的文件系统,一般有RAMDISK、CRAMFS和YAFFS等。(4)用户应用程序。特定于用户开发的应用程序。3.2 启动代码和BootLoader引导加载程序是系统加电后运行的第一段代码,对嵌入式系统来讲是一个
29、非常重要的系统组成部分。但在嵌入式系统中,一般并没有像PC中BIOS那样的固件程序,因此在一般的系统中,整个系统的加载启动任务就完全由BootLoader来完成。在一个基于ARM嵌入式系统中,系统上电或者复位时通常都从0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader,通过这小段程序可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做准备。BootLoader的启动过程可以是单阶段的,也可以是多阶段的。大多数单阶段的BootLoader应用于简单的系统,一般为没有操作系统的系统。通常多阶段的Boot
30、Loader能提供更为复杂的功能以及更好的可移植性。从固态存储设备上启动的BootLoader大多数是两阶段的启动过程,也就是启动过程可以分为stage1和stage2两部分:(1)Stage1为启动代码,它是CPU上电后执行的第一段代码负责初始化最原始的硬件资源,例如屏蔽CPU中断、工作频率、内存参数和设置堆栈等。由于在初始化原始硬件资源之前程序是直接控制CPU工作,所以该部分的启动代码必须要用汇编语言编写。(2)Stage2是紧接着启动代码之后的程序,负责初始化本阶段要用到的硬件资源,为内核设置启动参数:还要提供一定的命令行接口,用于进行系统调试,最后要负责引导操作系统。由于涉及复杂的功能
31、,所以通常用C语言编写,C语言入口点由上一级启动代码引导进入。大多数BootLoader都包含两种不同的操作模式:启动加载(Boot loading)模式和下载(Down loading)模式,这种区别仅对于开发人员才有意义。但从最终用户的角度看,BootLoader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。(1)启动加载模式:这种模式也称为自主(Autonomous)模式,即BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程没有用户的介入。这种模式是BootLoader的正常工作模式。在嵌入式产品发布的时候,BootL
32、oader显然必须工作在这种模式下。(2)下载模式:在这种模式下,目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机上下载文件,比如下载应用程序、数据文件、内核映像等。BootLoader是依赖于硬件实现的,特别是在嵌入式系统中。不同体系结构需求的BootLoader是不同的,除了体系结构,BootLoader还依赖于具体的嵌入式板级设备的配置。也就是说,对于两块不同的嵌入式板而言,即使它们基于相同的CPU构建,运行在其中一块电路板上的BootLoader未必能够运行在另一块电路开发板上,要使之后的软件系统能正常地运行起来,就必须确保BootLoader能正确地从ROM中被
33、读取运行,并且具备引导操作系统的能力,所以要对BootLoader进行正确移植和修改。3.3 U-BOOT的移植和修改步骤3.3.1 U-BOOT由Nand Flash启动概述U-BOOT支持从NOR Flash启动,本设计用的是Nand Flash因为Nand Flash的价格相对便宜。为了解决Nand Flash不能直接本地读取数据的问题,本系统需要对U-BOOT进行修改,使得启动代码能被存储在Nand Flash中也能正常运行。S3C2410本身也针对从Nand Flash启动的方案采取了相应的措施。它在Nand Flash控制器端采用了4KB的内部缓冲区,CPU上电后会把Nand Fl
34、ash的前4KB代码自动转移到内部缓冲中执行。通过OM【1:0】信号跳线可以选择是否启用该启动方式:OM【1:0】=00时处理器从Nand Flash启动;OM【1:0】=01时处理器从16位宽的rom启动;OM【1:0】=10时处理器从32位宽的rom启动;OM【1:0】=11时测试模式的rom启动;当使用Nand Flash启动时,4KB的内部缓冲区会被映射到0x0地址,此地址存放了CPU上电后的第一条指令。在U-BOOT的Start.S中,要跳过之前介绍的“搬移ROM中的程序到RAM”那一步,然后插入自己修改的NAND启动代码。本设计中,U-BOOT调试用到的硬件和功能主要有一个串口,D
35、M9000E网卡支持tftp下载,工作频率为200M的S3C2410处理器,JTAG口烧写U-BOOT映像文件,1片4M*16位数据宽度的Nand Flash地址范围为0x010000000x01800000和1片32MB16位SDRAM位数据宽度的SDRAM地址范围为0x300000000x32000000。Flash使用了2410处理器的BANK0单元。3.3.2 U-BOOT基本配置移植步骤本设计采用U-BOOT 1.1.4进行修改移植,交叉编译器是cross_2.95.3做法是在U-BOOT已经支持的开发板中选择一种和目标板接近的并在其基础上进行修改,代码修改的步骤如下:(1)在U-B
36、OOT 1.1.4的根目录的Makefile中加入my2410_config:unconfig,其中的参数意思arm:CPU的架构;ARM920t:CPU的类型;(2)建立自己开发板所需目录、文件配置文件。(3)建立board/my2410目录,拷贝board/smdk2410下的文件到board/my2410目录,将smdk2410.c更名为my2410.c(4)修改my2410目录下的Makefile文件,将OBJS=smdk2410.o flash.o 修改为OBJS=my2410.o flash.o(5)建立配置文件cp include/configs/smdk2410.h inclu
37、de/configs/my2410.h(6)排除编译器问趔。修改cpu/ARM920t/config.mk中的PLATFORM_CPPFLAGS+=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)改为: cpu/ARM920t/config.mk中的PLATFORM_CPPFLAGS+=$(call cc-option,-mapcs-32,$(call cc-option,-mabi=apcs-gnu)(7)修改include/configs/my2410.h文件中的内容#define CFG_PROMPT “my2410” /*我自己U-BOOT的调试平台
38、名字*/#define CONFIG_BOOTDELAY /*自动启动时间为3秒*/#define CONFIG_BOOTARGS “noinitrd root=/dev/mtdblock/3 init=linuxrc console=ttyS0” /*Nand Flash 第三分区,串口0,Linux 2.4内核,也可以不设,在移植后用Nand Flash的命令再设置*/3.3.3启动代码的移植S3C2410被配置成从NAND闪存启动,上电后,S3C2410的NAND闪存控制器会自动把NAND闪存中的前4K数据搬移到内部RAM中,并把0X00000000设置为内部RAM的起始地址,CPU从内
39、部RAM的0X00000000位置开始启动。因此要把最核心的启动程序放在NAND闪存的前4K中。由于NAND闪存控制器从NAND闪存中搬移到内部RAM的代码是有限的,所以,在启动代码的前4K里,必须完成S3C2410的核心配置,并把启动代码的剩余部分搬到RAM中运行。在U-BOOT中,前4K完成的主要工作就是U0BOOT启动的第一个阶段(stage1)。根据U-BOOT的执行流程图,可知要实现从NAND闪存中启动U-BOOT首先需要初始化NAND闪存,并从NAND闪存中把U-BOOT搬移到RAM中,最后需要让U-BOOT支持,NAND闪存的命令操作。3.3.4 Nand Flash环境参数的设
40、置U-BOOT默认从NOR FLASH启动,此时环境参数可以存放在NOR FLASH中,也可以存放在NAND FLASH中。在NOR FLASH中时,参数的存储位置由CFG_ENV_ADDR决定。此外必须有CFG_ENV_IS_IN_FLASH、CFG_ENV_SIZE这两个宏定义。如果U-BOOT从NAND FLASH启动,由于从NAND FLASH启动时S3C2410内部的4K SRAM被影射到Ngcso,故此时NOR FLASH是无效,也不能对NOR FLASH进行操作。因此环境变量是不能存储在NOR FLASH上,此时只能将环境变量存储到NAND FLASH中。这样必须在my2410.
41、h中做如下修改。/*#define CFG_ENV_IS_IN_FLASH 1 */ /*注释掉此行,添加下面三行*/#define CFG_ENV_IS_IN_NAND 1#define CFG_ENV_OFFSET 0xf0000#define CFG_ENV_SIZE 0x10000由于u-BOOT默认条件下是不传递环境参数到LINUX内核的TAG区(默认从0X30000100开始),为了能够用U-BOOT引导LINUX内核,必须定义以下配置,把信息传入LINUX核心。#define CONFIG_SETUP_MEMORY_TAGS#define CONFIG_INITRD_TAG#de
42、fine CONFIG_CMDLINE_TAG3.4 Linux内核移植本设计采用的Linux内核是MIZI公司的2.4.18内核结合系统的硬件要求,需要对内核的适当配置,主要的修改包括了根目录和arch/arm/boot等目录下的Makefile分别针对Nand Flash、LCD驱动、USB主机驱动、启动挂载devfs支持文件系统、Cramfs,Yaffs文件系统的支持以及声音系统的支持进行源代码的修改。对内核进行配置就是对其硬件进行裁剪,通过导入与S3C2410接近SMDK2410的默认配置可以简化其配置过程。S3C2410的默认配置在kernal/arch/arm/
43、defconfigs/smdk2410.config里面。先进行手动裁剪,再进入图形配置界面配置。3.4.1 LCD驱动分析和修改S3C2410本身具有LCD控制器接口,通过设置该部分的寄存器可以比较方便地对液晶显示屏进行控制,这样也大大简化了显示驱动程序的设计。Linux对LCD是以字符设备方式加以访问和管理的,它把要显示的数据一字节一字节地送往LCD控制器。3.4.2 配置图形手动修改后,再终端输入命令make menuconfig进入内核配置画面,选择相关的选项之后保存退出。(1)make menuconfig:该命令用来调用图形化菜单式的配置内核界面。这种配置方法比用命令行方式更有效率
44、。配置对SCSI设备的支持。在Linux中,大多数USB驱动程序会“钩住”另外一个驱动系统。经过以上配置并编译后,对于USB存储设备来说,一些关键的驱动模块会被编译进内核,如usbcore.o,usb-ohci.o和usb-storage.o。其usbcore.o是支持USB所需要的最基础模块;usb-ohci.o是主机协议模块;usb-storage.o是存储设备所需用到。在加载了以上模块后,当插入U盘时系统中就会出现一个SCSI硬盘,通过正确地挂载操作则可以使用该U盘。(2)make depend:此命令用于为Linux项目产生,depend文件。当编译一个庞大的项目时,如果没有depen
45、d文件,编译器就无法判断出文件之间的依赖关系,这样会造成大量的重复编译,甚至使编译无法正常进行。所以,在每次增加源代码头文件时,都必须运行一次“make depend“以更新各目标文件的依赖关系。这个命令只用于Linux2.4的内核,Linux2.6的不需要。(3)make zImage:编译器按照之前的配置选项生成Linux内核的机器代码映像,其中“zImage”是经过压缩并可以自解压的代码映像。(4)下载,用U-BOOT进行下载。3.5 文件系统的创建在嵌入式Linux中,文件系统可分为根文件系统和子文件系统。根文件系统包含基本的操作系统命令和维护工具,启动时需要根文件系统来挂载,通常在系
46、统建立后无需作出改动,每次启动都会恢复到原始的状态,这样有利于系统的稳定性,即使用户进行了错误操作也不至于对操作系统造成永久破坏;子文件系统通常是适合对嵌入式存储介质频繁进行读写操作的文件系统,用于保存经常需要修改的数据。常用的文件系统包括ROMfs,JFFS2,Yaffs,ETX2,NFS,Cramfs等。本设计用到的Cramfs(Compressed RAM File System)作为根文件系统,是为压缩式文件系统,特点是数据可经过压缩而保存在ROM中,经过修改的数据在掉电或重启后不会被保留,而是恢复到原始状态;并且在读取数据时选择性读取,可大大节省内存资源。本设计还用到yaffs(Ye
47、t Another Flash File System)子文件系统,它是一种日志结构的文件系统,专门为Nand Flash设计的,其速度快、占用内存少且易于移植,还为Nand Flash供写均衡和垃圾收集等底层操作,能有效地降低Flash出现坏块的几率。3.5.1创建根文件系统根文件系统是存放运行、维护系统的Busybox、库文件、配置文件和脚本等,也可以安装各种软件包。其中的Busybox用于提供shell命令集;配置文件用来初始化和布局文件系统;库文件为应用程序和操作系统提供API函数接。Busybox将许多常用的UNIX命令和工具经过功能裁减结合到一个单独的可执行程序中,能够在满足一般嵌入式系统的应用,并节省了存储空间。它采用一种很巧妙的办法减少自己的体积:所有的命令都通过“插件”的方式集中到一个可执行文件中,在实际应用过程中通过不同的符号链接来确定要执行哪个操作。采用单一执行文件的方式能最大限度地共享系统资源,对于资源相对紧张的系统来说是非常合适的。3.5.2 yaffs文件系统的移植移植步骤如下:1.在内核中建立YAFFS目录fs/yaff