基于linux的嵌入式流媒体点播系统 毕业论文.doc_第1页
基于linux的嵌入式流媒体点播系统 毕业论文.doc_第2页
基于linux的嵌入式流媒体点播系统 毕业论文.doc_第3页
基于linux的嵌入式流媒体点播系统 毕业论文.doc_第4页
基于linux的嵌入式流媒体点播系统 毕业论文.doc_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

海 南 大 学 毕 业 论 文(设计)题 目:基于linux的嵌入式流媒体点播系统学 号: 姓 名: 年 级:09级 学 院:海南大学应用科技学院 系 别:应用计算机系 专 业:网络工程 指导教师: 完成日期:2013 年 04月 25 日 摘 要随着嵌入式系统以及计算机网络通信技术、多媒体应用程序的快速发展,基于嵌入式linux的家庭娱乐中心、视频点播和实时会议系统已经成为一个开发的热点。这种系统因其体积小、功耗低、使用方便而广受青睐。论文主要做了uboot移植、kernel移植、以及播放器主界面设计的工作。内核采用linux-,针对mini2440开发板对内核做了板级的定制。使用 qt设计了播放器主界面。论文介绍了rtsp 流媒体协议的体系结构和工作原理。把流媒体视频点播相关技术应用到嵌入式系统中,在嵌入式s3c2440硬件平台和linux操作系统上开发实现一个vod系统。该视频点播系统提供了美观、友好的tq图形用户界面,可以进行本地播放和网络播放,实现了视频点播的基本功能。关键字:嵌入式系统;实时流传输协议;流媒体;视频点播abstractwith the embedded system and computer network communication technology, the rapid development of multimedia applications, home entertainment center, video on demand based on embedded linux and real-time conference system development has become a hot spot. this system because of its small volume, low power consumption, easy to use and popular.thesis mainly do the uboot, the transplantation of the kernel, and players main interface design work. the kernel of linux - used against mini2440 development threatening the custom kernel did the board level. based on the qt player main interface is designed.paper introduces the system structure and working principle of rtsp streaming protocols. the streaming video on demand technology applied to embedded systems, on s3c2440 embedded hardware platform and the linux operating system development and implementation of a vod system. the video on demand system provides the tq is beautiful, friendly graphical user interface, can undertake local broadcast and internet broadcast, has realized the basic function of video on demand.key words:embedded system; real time streaming protocol;stream media;video on demand目录1 绪论11.1 嵌入式linux流媒体点播的应用背景11.2 研究意义12 流媒体相关技术介绍22.1 vod介绍22.2技术介绍22.2.1 avi22.2.2 mpeg-432.3 流传输技术32.3.1 流媒体技术和流式传输方式32.4 实时流媒体传输协议介绍42.4.1 rtsp42.5 交叉编译53 系统的需求说明73.1多媒体点播系统功能需求74 系统的总体设计84.1 系统总体划分84.2实现模式:c/s模型95 系统的详细设计及实现115.1 嵌入式系统开发环境的搭建115.1.1 建立工作目录115.1.2 建立交叉编译环境115.2 嵌入式linux 的uboot移植125.2.1 bootloader介绍125.2.2 在嵌入式 linux 中bootloader 的重要性135.2.3 u-boot引导流程135.2.4 u-boot移植步骤145.2.5 建立开发板文件并测试编译环境155.2.6 在/board 中建立mini2440 目录和文件155.2.7 在 include/configs/中建立开发板配置文件155.3 linux内核配置与编译165.3.1 内核简介165.3.2 建立目标平台175.3.3 移植nand 驱动并修改分区信息185.3.4 为内核打补丁支持yaffs2195.3.5 移植dm9000 网卡驱动195.3.6 移植lcd 显示驱动205.3.7 添加触摸屏驱动215.3.8 移植sd 卡驱动225.4流媒体播放器设计235.4.1 播放器主界面工作流程235.4.2 播放解码处理245.4.3 播放器主界面设计246 系统的集成与调试306.1系统集成306.2 系统播放307总结32致谢33参考文献34341 绪论1.1 嵌入式linux流媒体点播的应用背景随着多媒体计算机技术、移动通信技术的快速发展以及便携式移动终端设备的普及,使嵌入式开发得到了快速发展。在现代计算机网络技术快速发展的基础上,多媒体计算机技术和多媒体网络技术越来越广泛地应用到视频点播系统。在远程医疗,酒店vod,远程实时视频会议上得到了越来越广泛的应用,并且智能化成为其发展一大趋势。1.2 研究意义在这个信息化的时代,嵌入视频vod系统正在融入人们的生活,比如ktv点播系统、智能电视等等,这些都使人们能更加高效便捷的享受信息资源,极大地方便了人们的生活,这使得嵌入式vod系统开发成为一个热点。嵌入式开发不同于传统的有着丰富资源的pc开发,嵌入式开发往往是基于受限的硬件资源,这在技术和实施难度上对嵌入式流媒体点播提出了更高的要求,成为研究嵌入式多媒体点播的难点。同时嵌入式技术发展迅速,随着嵌入式产品快速地更新换代,系统还要有良好的扩展性。2 流媒体相关技术介绍2.1 vod介绍vod是video on demand的缩写。视频点播是计算机技术、网络技术、多媒体技术发展的产物01。现代社会中,高端嵌入式移动终端成为人们接受信息资源的便捷方式。视频点播系统不仅可以为用户提供丰富的网络信息资源而且在远程教育、智能家电等领域得到越来越广泛的应用。用户可以按照自己的需求点播视频,即播即放,并且可以实现暂停、快进、后退等操作,这种系统播放等待时间小并且支持多种流媒体视频格式。随着智能家电、智能汽车的快速发展,嵌入式vod必将得到越来越广泛的应用。2.2技术介绍进入信息时代,数字化后的视频文件具有海量性,由于目前的网络带宽有限,在网络传输高清大视频文件是一件很不容易的事,因为传输速度和视频质量很难满足用户的需求。所以要实现视频点播的功能必须对这些要传输的视频数据进行压缩和解压缩。随着多媒体技术的不断发展,多媒体数据的存储与压缩技术已经相对比较成熟,例如h.261,mpeg-4 等,其中mpeg标准已经从mpeg-1、mpeg-2 发展到了目前应用比较广泛的mpeg-4 标准02。2.2.1 aviavi是将语音和影像同步组合在一起的文件格式,是微软公司1992年推出的视频格式,可以将视频和音频交织在一起进行同步播放。这种播放方式不仅可以提高系统的工作效率,同时也可以迅速地加载和启动播放程序,减少播放avi视频数据时的用户等待时间。avi格式文件结构由文件头、索引块和数据块组成。avi文件主要参数有影像参数、伴音参数和压缩参数。影像参数的视窗大小和帧率可以根据播放环境的硬件能力和处理速度进行调整,窗口越大视频文件越大。wav文件时avi文件中伴音信号来源,包括影像与伴音的交织参数和同步控制参数。avi支持256色和rle压缩,avi对视频文件采用有损压缩方式。这种视频格式的优点是可以跨多个平台使用,其缺点是视频文件太大,目前是一种常用的视频文件格式。2.2.2 mpeg-4mpeg-4是一种包含音频和图像的压缩技术,对图像的压缩算法提供的压缩比可达到200:1。mpeg-4 在较高的压缩比下也能获得较高的图像质量,最大的特点是基于对象的编码方式以及对合成对象的编码能力。它支持固定和可变速率视频编码,具有高效的压缩性,其编码系统是开放的,随时可以加入新的有效的算法模块。mpeg-4标准具有通用的访问性,适用于无线和有线网络以及固态存储,支持各种带宽的传输信道和接收端。可以利用很窄的带宽通过帧的重建技术压缩和传输数据,从而能以最少的数据获得最佳的图像质量。mpeg-4 的可视信息的码率范围可从564kbit/s直至 64kbit/s-4mbit/s,并且可以兼容 mpeg-1 和 mpeg-2 已经提供的大多数功能03。因此在mpeg-4数字电视、动态图像和移动通信等领域得到了普遍应用。2.3 流传输技术2.3.1 流媒体技术和流式传输方式流媒体是指使用流式传输的方式在网络上传输的媒体格式。流是对在网络上所传输的经过一定编码的多媒体信息的一种描述04。在进行网络播放时,等待时间和视频质量是用户主要的考虑因素。传统视频播放时必须整个视频文件必须全部下载下来才能观看,这会使得播放延时非常大。而现在很流行的嵌入式视频点播系统可以实现即播即放,极大地减少了等待时间,并且在播放时用户还可以进行相关的交互式操作。这种观看方式大大地满足了用户的需求。流式传输有两种方式:实时流式传输和顺序流式传输。传统的视频播放中主要采用顺序传输方式,使用这种方式用户一般只能观看自己已经下载的视频,缺乏灵活性。实时流传输允许用户在进行视频观看时进行相关的交互式操作,支持随机访问,比如前进、后退等。现对于传统的顺序传输方式视频播放,实时流传输更能满足用户需求,逐渐成为视频点播的主流方式。2.4 实时流媒体传输协议介绍实时流媒体播放协议簇主要由rtsp、rtp和trcp构成,整个rtsp协议栈是建立在tcp/ip协议栈之上的。其中rtsp提供控制功能,如播放器客户端播放、暂停、前进等功能,rtp协议负责流媒体数据的实时传输,rtcp负责检查反馈网络状况以进行相应的调整。协议簇的层次结构如图2-1所示。rtsp 层rtp /trcp层udp/tcp层ip层应用层网络层传输层 图2-1 rtsp协议栈2.4.1 rtsprtsp协议属于应用层协议,是一个多媒体播放控制协议,以c/s方式工作。在用户进行视频点播时,通过rtsp协议内部定义的方法可以实现交互式操作,比如暂停、后退、前进等。要实现rtsp的视频播放控制功能,不但要有协议还要有专门的客户端播放程序和视频服务器05。rtsp在进行控制信息交互式是保证交付质量的tcp连接,但在进行数据流传输时和反馈调整使用udp连接,会导致分组丢失。如图2-2所示。serverclient rtsp流控(tcp)rtp数据流(udp)rtcp分组(udp) 图2-2 基于c/s模式的rtsprtp协议(real time protocol)提供实时的数据流传输。在数据包中封装了发送数据的序列计数、标识符和时间戳等信息。rtp协议通常是用udp协议来封装的,所以只提供实时的数据传输,但是不保证传输的可靠性。所以视频播放时会出现视频模糊,视频质量不佳的现象。随着视频解压缩技术和网络带宽的不断提高,客户端的视频质量会越来越好。rtcp是rtp的实时传输控制协议,它用于监视网络的服务质量和在正在进行的与会者会话中传递信息。通过质量反馈来进行流量的拥塞控制,利用这些反馈信息进行传输速度的相应调整。rtcp是通过周期性地向会话的所有参加者进行通信来实现这样的功能的,根据会话者的数量来调整发包率。2.5 交叉编译嵌入式开发一般是基于一个资源受限的系统,直接在目标板上进行相关软件的编写不仅困难而且调试麻烦,一般的解决方案是利用交叉开发模型。即先在计算机上编写源程序,然后通过编译工具交叉编译,生成可以在目标平台上运行的二进制代码文件,下载到目标平台上的相应位置06。典型的嵌入式linux开发使用如图所示的宿主机/目标板开发模式。开发模型如图2-4所示。宿主机目标板网络/串口/jtag图2-3交叉开发模型交叉编译就是在一个平台上生成在另一个平台上执行的代码。本文的目标就是在x86平台上交叉编译,产生可以在arm开发板上运行的二进制文件。这需要在pc机上建立一个用于arm目标板的交叉编译环境,本机使用交叉编译器arm-linux-gcc-4.4.3配置如下:名 称 嵌入式linux 点播系统开发cpuamd 2445内 存2g虚拟机server2003下vmwearlinux 系统fedora 交叉编译器arm-linux-gcc-4.4.3表2-1 x86主机配置3 系统的需求说明3.1多媒体点播系统功能需求首先系统是基于mini2440开发板进行设计的,所以在uboot、kerne移植时要进行定制,包括mini2440板级的定制和和针对vod需求的定制。所以在移植时系统需要加入对网卡、触摸屏等的支持。其次点播系统是通过客户端/服务器模式实现的,所以系统的功能需求可以客户端和服务器两大部分来划分。客户端主要实现视频播放功能,用户启动系统后进入视频点播系统主界面,为用户提供网络点播和本地点播服务,播放时用户可以进行相关的交互式操作。服务器主要实现数据流的发送,使用户可以观看自己点播的视频文件。嵌入式流媒体客户端需要具备的基本功能如下:1) 提供有好的播放界面和交互式界面;1) 能读取视频文件,实现实时解码及音视频同步实时播放;2) 可以播放u盘中本地视频文件;3) 可以拨号连接服务器,读取服务器视频文件;4) 能够实现交互操作,实现对流媒体播放的暂停、快进、快退等功能;嵌入式流媒体服务器端需要具备的基本功能如下07:1)能够提供种类丰富的视频文件:如avi,rmvb等;2)以流式协议将视频文件发送给客户端,使用户可以观看其点播的视频文件;3)实现和客户端的同步交互式操作,比如实现同步的暂停、快进等操作。4 系统的总体设计该部分主要进行系统的整体设计,需要对系统进行总体划分,一般将嵌入式流媒体播放器的系统体系结构划分为三层,包括硬件层、内核层和应用层。本文是以mini2440为开发板,论文的主要工作集中于系统的移植和应用程序的开发。4.1 系统总体划分 通常嵌入式linux视频点播系统从软件的角度看通常可以分为四个层次,即引导加载程序,嵌入式linux内核,文件系统以及用户应用程序08。经过嵌入式u-boot的移植、arm-linux内核的配置与编译以及嵌入式根文件系统的创建,基于arm处理器平台的最小嵌入式系统就完成了。因为此时的系统还没有任何的用户应用程序,但是下载到开发板可与看到自己的根文件系统目录了。典型的bootloader、bootloader参数、内核映像和嵌入式根文件系统在flash上的存储如下图所示。图4-1嵌入式最小系统构成 gui图形用户界面、通信协议栈和音视频解码器mppalyer三个主要模块集成在一起就构成了论文的嵌入式用户应用程序。与前面的最小嵌入式系统结合一起就构成了视频点播系统体系。体系结构如图4-2所示。应用层:内核层:引导层:硬件层:通信协议栈音视频解码gui嵌入式应用程序linux内核根文件系统bootloader硬 件 平 台嵌入式微处理器外 围 设 备 图4-2 嵌入式流媒体播放系统体系结构4.2实现模式:c/s模型嵌入式视频点播系统要实现本地播放和网络播放的功能,本地播放是读取u盘中预先存在的视频文件进行播放。网络播放时在播放时连接服务器,连接成功后,读取服务器的视频资源,更新网络播放列表,点击相应的视频文件后,qt视频播放客户端会调用开源软件mplayer进行音视频解码将视频显示在播放器播放窗口,并且在播放的状态下支持随机访问,可以进行暂停、快进、快退等交互式操作。c/s工作模型如图4-3所示。vodserverclient rtsp控制信息(tcp)rtp音、视频(udp)rtcp分组(udp) http点播请求图4-3 vod 服务模型在用户进行播放点播的过程中,服务器必须要开启http 服务和流媒体传输两个服务10,通过 http 协议,用户可以向服务器端发送视频点播的请求,通过 rtp/rtsp进行视频数据流的传输和控制。播放器的rtsp 服务器工作流程11主要步骤如图4-4 所示。开始监听tcp端口等待客户连接请求连接接受连接创建新连接接受客户消息关闭连接执行客户消息响应客户消息结束nn图4-4服务器工作流程5 系统的详细设计及实现该部分介绍了系统的实施细节,包括嵌入式系统开发环境的搭建,uboot、kernel移植以及视频播放主界面的设计。5.1 嵌入式系统开发环境的搭建5.1.1 建立工作目录mkdir -p /opt/friendltarm/mini2440 /mini2440工作目录mkdie -p /tmp/linux /各种所需源文件都拷贝到该目录下5.1.2 建立交叉编译环境cd /opt/friendltarm/mini2440解压安装编译器arm-linux-gcc-4.4.3tar xvzf /tmp/linux/arm-linux-gcc-4.4.3.tgz c /添加系统环境变量如下gedit /root/.bashrcexport path=$path: /opt/friendlyarm/toolschain/4.4.3/bin解压安装linux-内核源代码tar xvzf /tmp/linux/linux-.tar.gz解压安装嵌入式图形系统arm-qtopia和x86-qtopia 源代码tar xvzf /tmp/linux/x86-qtopia.tgztar xvzf /tmp/linux/arm-qtopia.tgz解压安装嵌入式图形系统arm-qte-4.6.3 tar xvzf /tmp/linux/arm-qte-4.6.3-20100802.tar.gz解压安装busybox-1.13.3 源代码tar xvzf /tmp/linux/busybox-1.13.3-mini2440.tgz解压安装linux 示例程序tar xvzf /tmp/linux/examples-20100108.tgz解压安装uboot工作目录tar xvzf /tmp/linux/vboot-src.tar.gz创建bootloader 工作目录,里有vivi 和u-boot源代码tar xvzf /tmp/linux/mkyaffs2image.tgz c /改变工作目录后会被安装到/usr/sbin 目录下,自动生成mkyaffs2image 和 mkyaffs2image-128m。解压安装logomaker开机启动画面制作工具tar xvzf /tmp/linux/logomaker.tgz c /在开发时经常用到nfs、tftp和smb服务,所以系统服务要事先配置好并且保证正常运行。所建立的mini2440工作目录如5-1所示。图5-1 虚拟机下工作目录5.2 嵌入式linux 的uboot移植5.2.1 bootloader介绍嵌入式系统的引导加载程序是系统必不可少的一部分,引导加载程序是系统加电后运行的第一段软件代码。其作用类似于pc中的bios,bootloader就是在操作系统内核运行之前运行的一段小程序。这段程序主要作用就是初始化硬件设备、生成内存映射图等,为最后调用嵌入式内核做好充足的前期准备。bootloader一般有两种启动模式即启动加载模式和下载模式。下载模式主要是针对嵌入式开发人员的,因为嵌入式移植过程中的各种调试基本都是这种模式来实现的,下载模式可以通过串口、nfs、tftp等方式实现。在下载模式下,u-boot为用户提供一个命令行接口,通过接口可以使用u-boot提供的一些命令进行相应操作。启动加载模式是产品发布时必须置为的模式,在这种模式下启动系统不需要用户的干涉,自动从目标主机的存储设备上将操作系统加载到内存中运行。5.2.2 在嵌入式 linux 中bootloader 的重要性由于 bootloader 需要直接操作硬件,所以想在嵌入式世界建立一个通用的引导加载程序是很困难的,因为一般不同的硬件平台不同的操作系统所需的加载引导程序不同。所能做的就是让一种加载引导程序支持尽量多的平台,赋予它良好的移植性。u-boot 就是支持多平台多操作系统的优秀引导加载程序,这也是u-boot 的优势。因而针对不同的嵌入式平台要进行加载引导程序相关的修改以满足项目需求。5.2.3 u-boot引导流程bootloader启动流程大多经过两个阶段,即启动可以分为stage1和stage2。stage1完成初始化硬件的工作,为stage2准备足够的内存空间,并将stage2可执行映像复制到内存中,设置堆栈,然后转调到stage2的c入口。stage2一般包括以下几个步骤,初始化本阶段要用到的硬件设备,将制作好的内核映像和根文件系统从flash读到ram中,调用内核,跳转到 memstart+0x8000地址处,一般是使用x030008000地址。启动的stagel一般用汇编语言来实现,汇编语言能更加高效的实现对底层硬件的操作且代码量小,对应的是start.s文件。而stage2则一般用c语言来实现,这样做不仅可以实现更加复杂的功能,而且具有良好的可读性和移植性。启动代码中c语言的主函数是在lib_arm/board.c中的start_armboot。两个阶段的引导的主要流程如下所示。设置cpu为svc关闭看门狗/禁所有中断/设置cpu频率复制stage2可执行映像到sdram中设置堆栈指针跳转stage2 c入口stage2:加载内核和根文件设置内核的启动参数。调用内核stage1:检测内存映射图5-2 两个阶段启动流程图5.2.4 u-boot移植步骤移植就是根据开发板和系统需求做相应的修改。u-boot 还没有支持三星s3c2440微处理器,移植仍是用u-boot 支持的友善之臂sbc2410 的文件作蓝本来移植,因为sbc2410和mini2440硬件配置最为接近,使用一个模板可以加快移植的速度和效率。所以移植所要做的就是针s3c2440 和sbc2410 的不同,以及sbc2410 和mini2440 开发板的外设不同作相应的修改,并增加新的功能。s3c2440 和s3c2410 的区别主要是s3c2440的主频更高,其他内部寄存器基本都是兼容的。本系统中,使用mini2440开发板,采用u-boot作为s3c2440处理器的bootloader。5.2.5 建立开发板文件并测试编译环境修改顶层 makefile目的:定义交叉编译工具链和开发板配置选项。约定:代码中+和-号表示增删vi makefile+cross_compile = arm-none-linux-gnueabi-+mini2440_config : unconfig+$(mkconfig) $(:_config=) arm arm920t mini2440 andywsg s3c24x05.2.6 在/board 中建立mini2440 目录和文件在/board 目录中建立开发板mini2440 的目录,并复制sbc2410x 的文件到此,做适当修改。目的:以sbc2410x 为蓝本,因为sbc2410和mini2440配置最接近,代码复用,这样可以加快移植进度。cd boardmkdir andywsg/mini2440cp -arf sbc2410x/* andywsg/mini2440/cd andywsg/mini2440/mv sbc2410x.c mini2440.c5.2.7 在 include/configs/中建立开发板配置文件目的:制作mini2440所需头文件cp include/configs/sbc2410x.h include/configs/mini2440.h测试编译环境在uboot顶层目录执行make mini2440_configmake编译通过如图5-3所示。以上测试通过后,说明编译环境和基本的开发板代码创建都没有问题。下面所做工作就是针对mini2440进行修改,以满足项目需求。uboot修改主要经历四个阶段,第一阶段修改启动代码,包括初始化cpu频率,代码重定向等。第二阶段修改初始化代码,主要是mini2440平台初始化。第三阶段是初始化外设,包括lcd、网卡和yaffs2文件系统支持等。第四阶段修改编译配置文件,在所有有编译条件的地方加入对mini2440的编译支持,这样前面修改的代码才会在编译时编译进来。下面是对u-boot源码修改后编译的结果。 图5-3 uboot编译结果5.3 linux内核配置与编译5.3.1 内核简介内核是所有linux系统的核心软件组件,其性能很大程度上决定了整个系统的性能。本系统中,嵌入式linux内核选择。linux-本身已经提供了对mini2440的部分支持。内核移植就是根据开发系统的需要对已有的系统进行裁减,保留需要的模块去掉不需要的模块,生成一个适合目标嵌入式系统的过程。5.3.2 建立目标平台指定平台交叉编译变量cd linux-vi makefile-arch ?= $(subarch)-cross_compile ?=+arch ?= arm+cross_compile ?= arm-linux-这里面的arch ?= arm 是指定目标平台为arm平台,cross_compile ?= arm-linux-是指定交叉编译器是arm-linux-gcc-4.4.3。添加自己的开发板信息cd linux-rm -rf arch/arm/mach-s3c2440/mach-mini2440.ccp -arf arch/arm/mach-s3c2440/mach-smdk2440.c arch/arm/mach-s3c2440/mach-mini2440.cvi arch/arm/mach-s3c2440/mach-mini2440.c把machine_start(s3c2440, smdk2440) , 修改成machine_start(mini2440, friendlyarm mini2440 development board)。修定开发板时钟源频率在 mach-mini2440.c( 就是刚刚通过复制mach-smdk2440.c 得到的)static void _init smdk2440_map_io(void)函数中,把原来的16934400(代表原smdk2440 目标板上的晶振是16.9344mhz)改为mini2440 开发板上实际使用的12000000(代表mini2440 开发板上的晶振12mhz)。克隆smdk2440 成mini2440平台克隆自己的mini2440 平台,需要把mach-mini2440.c 中所有的smdk2440字符串改为mini2440。这里使用批处理命令在命令模式下输入:%s/smdk2440/mini2440/g。编译测试cd linux-make mini2440_defconfig /使用linux 官方自带的mini2440 配置make zimage /编译内核,生成的内核映像zimage位于arch/arm/boot编译通过,以上测试通过后,说明编译环境和基本的开发板的代码创建都没有问题。下载到内核,从串口可以看到可以启动信息,但是大部分的定制的驱动还没有添加,根文件系统也没有制作。下面进行的是主要硬件驱动文件的移植。5.3.3 移植nand 驱动并修改分区信息虽然比较新的内核linux在nand_ids.c 文件中自带了部分nand flash驱动,但是系统默认的分区不是该项目所需的。为了适合系统自带的nand flash 驱动接口,在nand flash的结构信息中还要添加相关信息,参考/arch/arm/plat-24xx/common-smdk.c上结构信息,在mach-mini2440.c添加如下信息。cd linux-vi arch/arm/mach-s3c2440/mach-mini2440.c /编辑平台初始化文件/创建mtd分区表static struct mtd_partition mini2440_default_nand_part = 0 = .name = supervivi, /bootloader分区,对应设备块/dev/mtdblock0.size = 0x00040000, /大小256k.offset = 0, /起始地址0x000000001 = .name = param, / supervivi 的参数区,对应块设备/dev/mtdblock1.offset = 0x00040000, .size = 0x00020000, /大小128k2 = .name = kernel, /内核分区,大小为5m,对应/dev/mtdblock2.offset = 0x00060000,.size = 0x00500000, /大小5m3 = .name = root, /根文件系统分区,对应/dev/mtdblock3.offset = 0x00560000,.size = 1024 * 1024 * 1024, ,4 = .name = nand, /表示整片的nand flash.offset = 0x00000000,.size = 1024 * 1024 * 1024, ;/下面是开发板的nand flash 设置表,一块板对应一个表static struct s3c2410_nand_set mini2440_nand_sets = 0 = .name = nand,.nr_chips = 1,.nr_partitions = array_size(mini2440_default_nand_part),.partitions = mini2440_default_nand_part,;/构建一个s3c2410_platform_nand类型的mini2440_nand_info结构体static struct s3c2410_platform_nand mini2440_nand_info = .tacls = 20, /nand电平nwe开始时间.twrph0 = 60, / nwe持续时间.twrph1 = 20, /nwe结束时间.nr_sets = array_size(mini2440_nand_sets),.sets = mini2440_nand_sets,.ignore_unset_ecc = 1,;/平台设备结构体数组,把nand flash 设备添加到目标平台设备集中static struct platform_device *mini2440_devices _initdata = &s3c_device_usb,&s3c_device_lcd,&s3c_device_i2c0,&s3c_device_iis,&s3c_device_nand, ;把nand flash 设备添加到开发板的设备列表结构;5.3.4 为内核打补丁支持yaffs2linux支持的文件系统很多,论文采用的是yaffs2文件作为根文件系统。进入 yaffs2 源代码目录执行如下操作:cd yaffs2./patch-ker.sh c /opt/friendlyarm/mini2440/linux-再进入linux-/fs 目录,看到如果已经多了一个yaffs2 目录,说明yaffs2 补丁已经成功打上。5.3.5 移植dm9000 网卡驱动网卡是一个平台设备,在目标平台初始化代码中/arch/arm/mach-s3c2440/mach-mini2440.c填写相应的结构表,具体添加如下:添加网卡设备的资源设置,才能够和dm9000 网卡驱动接口配合使用:static struct resource mini2440_dm9k_resource = /片选信息0 = .start = mach_mini2440_dm9k_base,.end = mach_mini2440_dm9k_base + 3,.flags = ioresource_mem,1 = .start = mach_mini2440_dm9k_base + 4,.end = mach_mini2440_dm9k_base + 7,.flags = ioresource_mem,2 = .start = irq_eint7,.end = irq_eint7, /说明中断管脚接在eint7,上升沿触发中断.flags = ioresource_irq | ioresource_irq_highedge,;static struct dm9000_plat_data mini2440_dm9k_pdata = /向驱动传入flags参数(使用16位数据线,没有eeprom)和dev_addr(mac地址).flags = (dm9000_platf_16bitonly | dm9000_platf_no_eeprom),;static struct platform_device mini2440_device_eth = .name = dm9000,.id = -1,.num_resources = array_size(mini2440_dm9k_resource),.resource = mini2440_dm9k_resource,.dev = .platform_data = &mini2440_dm9k_pdata,;把上面做好的网卡平台添加设备设备集中static struct platform_device *mini2440_devices _initdata = &s3c_device_usb,&s3c_device_lcd,&s3c_device_iis,&s3c_device_nand,&mini2440_device_eth,;5.3.6 移植lcd 显示驱动由于linux- 内核已经支持s3c2440 的lcd 控制器驱动,lcd工作中最关键的就是取决于时钟频率(clock frequency)参数的设置, linux- 内核是通过一个称为“pixclock”的参数来调节。这里实际设置数值为170000,单位是ps(picoseconds)。cd linux-vi arch/arm/mach-s3c2440/mach-mini2440.cmini2440开发板使用的是统宝3.5lcd,把友善之臂已经移植好的代码加入,统宝3.5lcd 的配置和参数设置如下。static struct s3c2410fb_display mini2440_lcd_cfg _initdata = if !defined (lcd_con5).lcdcon5 = s3c2410_lcdcon5_frm565 |s3c2410_lcdcon5_invvline |s3c2410_lcdcon5_invvframe |s3c2410_lcdcon5_pwren |s3c2410_lcdcon5_hwswp,else.lcdcon5 = lcd_con5,endif.type = s3c2410_lcdcon1_tft,.width = lcd_width,.height = lcd_height,.pixclock = lcd_pixclock,.xres = lcd_width,.yres = lcd_height,.bpp = 16,.left_margin = lcd_left_margin + 1,.right_margin = lcd_right_margin + 1,.hsync_len = lcd_hsync_len + 1,.upper_margin = lcd_upper_margin + 1,.lower_margin = lcd_lower_margin + 1,.vsync_len = lcd_vsync_len + 1,;/构建lcd配置结构体mini2440_fb_infostatic struct s3c2410fb_mach_info mini2440_fb_info _initdata = .displays = &mini2440_lcd_cfg,.num_displays = 1,.default_display = 0,.gpccon = 0xaa955699,.gpccon_mask = 0xffc003cc,.gpcup_mask = 0xffffffff,.gpdcon = 0xaa95aaa1,.gpdcon_mask = 0xffc0fff0,.gpdup = 0x0000faff,.gpdup_mask = 0xffffffff,.lpcsel = 0xf82,;5.3.7 添加触摸屏驱动由于linux- 内核没有包含支持s3c2440 的触摸屏驱动,因此需要添加设计一个触摸屏驱动文件,放置于linux-src/drivers/input/touchscreen 目录下,增加一个友善之臂提供的s3c2410_ts.c 文件。然后在 linux-/drivers/input/touchscreen/makefile 文件中添加该源代码的目标模块。vi linux-/drivers/input/touchscreen/make

温馨提示

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

评论

0/150

提交评论