基于ARM9的Linux嵌入式系统移植与驱动开发.docx_第1页
基于ARM9的Linux嵌入式系统移植与驱动开发.docx_第2页
基于ARM9的Linux嵌入式系统移植与驱动开发.docx_第3页
基于ARM9的Linux嵌入式系统移植与驱动开发.docx_第4页
基于ARM9的Linux嵌入式系统移植与驱动开发.docx_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

II Abstract With the development of the information technology, embedded systems has been broadly applied in each field of famlily and industry. And the increasingly wide range of applications,the complexity of embedded systems is constantly increasing. Now,the embedded operating system has become one of the most important part of the embedded system. In the embedded operating systems,The Linux operating system has become more and more attened,because of its open source,small core,good performance;whats more,Linux2.6 introduces many new features that make it an excellent and suitable operating system for embedded computing. Undoubtedly, the embedded Linux operating systemwill bring large economic value and application prospects. This thesis is accomplished based on the automatic meter reading system for a power company in Nanjing, and the main contribution is to introduce transplantation of the embedded Linux system, as well as the driver development of corresponding peripheral device. This paper accomplish the transplantation of the embedded Linux system based on AT91SAM9260EK,and including build the development platform,build the embedded cross-compile environment; Based on the analysis of the booting and loading processBootLoader of the embedded system,implements the transplantation of Uboot on the platform. After the detailed analysis of the kernel structure and booting process of Linux system, according to the terminal hardware platform,analyze the process of transplantation and cut of the Linux kernel. In accordance with the application requirements,we select the YAFFS2 as our root file syetem,and detailedly introduce the process of the implementation of the YAFFS2 file system. Finally,develop the drivers of the related equipment, especially the LCD(UC1698U), improve the original way of direct access GPIO port,and combining the GPIO and framebuffer to develop the new driver. The framebuffer is the cache for display, write data to the cache, the controller will automatically read the data from the cache and display. The development of GUI based on Qt/Embedded need the support of framebuffer technology. But for the type of LCD, the display controller can not automatically read the data from the cache, use the kernel timer to update the framebuffer for real-time display and develop the GUI of test based on Qt/Embedded. Key words: embedded Linux system, ARM9,YAFFS2,driver,FrameBuffer I 摘要 随着信息技术的不断发展,嵌入式系统已经广泛应用于工业和家庭的各个领域。其复杂性也随之不断增加,嵌入式操作系统成为了嵌入式系统中最重要的组成部分之一。 在嵌入式操作系统中,Linux 操作系统得到了越来越多的关注,Linux 系统开源、具有精简的内核以及优异的性能。另外,Linux2.6 包含许多新的特性,为其在嵌入式领域的应用提供了更多更好的支持,嵌入式 Linux系统将会有巨大的市场价值以及应用前景。 本文基于南京某电力公司自动抄表系统,对负荷控制管理终端平台进行了 Linux 系统移植以及对 LCD 等外围设备的驱动开发。本系统的 CPU 采用 ATMEL 公司的以 ARM926T为内核的 AT91SAM9260EK 处理器。采用了基于 2.6 内核版本的嵌入式 ARM Linux,最终完成基于 ARM9 的嵌入式 Linux 系统移植开发。具体包括搭建开发平台,建立嵌入式交叉编译环境;在分析嵌入式系统引导加载程序 BootLoader 的基础上,结合本目标板修改 Uboot源码并进行 Uboot 的编译和移植;通过分析嵌入式 Linux 系统的内核结构和启动流程,实现了针对本目标板的内核源码修改、编译以及移植;同时按照应用需求,选择 YAFFS2 文件系统作为根文件系统,并给出根文件系统实现的过程;最后开发终端外围设备相应的驱动程序,重点围绕 LCD(UC1698U)展开,改进原来直接读写 GPIO 口的驱动方式,采取直接读写 GPIO 和帧缓冲相结合的方式开发新的驱动程序。帧缓冲是一块显示缓存,通过向该缓存中写入数据,显示控制器就会自动的从中读取数据并显示出来,在 LCD 设备上基于Qt 的图形用户界面的开发也需要帧缓冲技术的支持。但对于本类型的 LCD,显示控制器并不能自动完成缓冲区数据读取,本文从软件的角度借助内核定时器最终完成缓冲区更新并实时显示,最后开发基于 Qt/Embedded 的用户图形测试界面。 关键词: 嵌入式 Linux 系统,ARM9 ,YAFFS2 文件系统,驱动,帧缓冲 III 目录 第一章 绪论 . 1 1.1 选题背景以及研究内容 . 1 1.1.1 选题背景 . 1 1.1.2 研究内容 . 2 1.2 课题来源以及论文的主要工作 . 4 第二章 搭建嵌入式 Linux 开发平台. 5 2.1 开发平台硬件参数 . 5 2.2 开发宿主机交叉编译环境的建立 . 5 2.2.1 arm-none-Linux-gnueabi-gcc 的安装 . 6 2.2.2 TFTP 和 NFS 的配置. 6 2.3 本章小结 . 6 第三章 BootLoader 的设计与移植 . 7 3.1 BootLoader 概述 . 7 3.2 BootLoader 的操作模式 . 8 3.3 Uboot 的源码结构 . 8 3.4 Uboot 的编译及其在目标板上的移植 . 9 3.4.1 Uboot 的源码修改以及编译. 9 3.4.2 Uboot 的移植.12 3.5 本章小结 .13 第四章 Linux 内核的编译及其移植.14 4.1 嵌入式操作系统选择 .14 4.2 Linux 内核结构及启动过程.15 4.2.1 Linux 内核的启动过程 .15 4.3 Linux 内核源码的修改、编译及移植.17 4.3.1 基于目标板修改 Linux 内核源码 .17 4.3.2 根据需求裁剪 Linux 内核.22 4.3.3 Linux 内核的移植 .25 4.4 本章小结 .27 第五章 嵌入式 Linux 根文件系统 .29 5.1 嵌入式 Linux 的文件系统的结构 .29 5.2 文件系统选择及编译工具简介 .30 5.2.1 根文件系统选择 .30 5.2.2 Busybox 简介 .30 5.2.3 Busybox 简介函数库及其安装 .31 5.3 YAFFS2 文件系统移植的实现 .31 5.3.1 YAFFS2 文件系统的创建 .31 5.3.2 YAFFS2 文件系统的移植 .34 5.4 本章小结 .35 第六章 嵌入式 Linux 设备驱动程序.36 6.1 嵌入式 Linux 设备驱动程序概述 .36 6.1.1 嵌入式 Linux 驱动程序简介 .36 6.1.2 设备驱动程序框架 .37 6.2 初始集中器 LCD 设备驱动程序分析 .39 6.3 改进的基于帧缓冲的 LCD 驱动程序 .41 Research on System Transplantation and Driver Development of Embedded Linux Based on ARM9 Thesis Submitted to Nanjing University of Posts and Telecommunications for the Degree of Master of Engineering By Nie Heping Supervisor: Prof. Qiu Xiaohui April 2013 京邮电大学硕士研究生学位论文 第一章 绪论 3 为了满足集中器的要求,充分发挥集中器承上启下的作用,我们选择嵌入式 Linux 操作系统做为集中器的操作系统。主要的研究内容如下: (1)根据终端需要对嵌入式 Linux内核进行修改。 确定了操作系统,在对 Linux源码以及启动流程的基础上,还要对选择的嵌入式 Linux系统进行定制以达到我们的要求。比如涉及到的集中器的通信方式方面,集中器远程抄表的通信方式既有无线方式,又包含有线方式1314。无线方式主要和手持终端进行近距离的通信,比如红外通信、蓝牙通信等。有线方式包括各种串行总线技术(RS232、RS485、CAN总线等)、电力线载波、公共电话网等。相比其他有线通信方式,RS485 通信方式支持多节点、远距离以及灵敏度高,且只对接口的电气特性做出规定,不涉及接插件、电缆或协议,在此基础上用户可以建立自己的高层通信协议,RS485 已成为工业应用中数据传输的首选15-17。所以本集中器也应支持 RS485 通信方式,这就需要对内核源码进行修改以驱动终端外围的 RS485 端口。 (2)YAFFS2 文件系统选择 下一步要选择一个合适的文件系统来管理文件。YAFFS 文件系统是专门针对 NAND 闪存设计的嵌入式文件系统,目前有 YAFFS 和 YAFFS2 两个版本,因为 YAFFS2 能更好的支持大容量的 NAND FLASH 芯片,同时考虑集中器的进一步的发展,需要大容量的 NAND FLASH 来满足业务需求,在这里我们选择 YAFFS2 文件系统。 (3)围绕 UC1698U 开发基于帧缓冲技术的驱动程序 成功编译和移植 BootLoader 以及嵌入式 Linux 内核和文件系统后,嵌入式 Linux 系统就可以正常启动和运行。为了驱动外设能正常工作,还要针对本集中器所有外设,开发相应的驱动程序,本文以 LCD 设备为例来讨论驱动的开发过程。针对本目标板的 LCD,对原来采用的直接读写 GPIO 口驱动的方式进行改进,采用基于直接读写 GPIO 口驱动与帧缓冲驱动相结合的方式进行。在驱动支持帧缓冲技术的基础上,在 LCD 设备上就可以开发基于Qt/Embedded 或者 MiniGui、GtkFB 的图形用户界面,相比于靠描点绘制的图形用户界面,界面会较友好,有层次感,更方便用户和集中器的交互,用户体验较好,同时可移植性也较强。除此之外,基于 Qt/Embedded 或者 MiniGui、GtkFB 更方便开发高级图形界面或图形用户程序。FrameBuffer 译作帧缓冲,是基础图形设备,是一种专门为开发高级图形界面或者图形应用程序提供基本函数库的驱动程序接口。在此技术中,显示设备会被抽象成为一段内存缓冲区,我们通过不停的向内存缓冲区中写入数据, 显示控制器就自动的从中读取数据并显示出来1819,这样就屏蔽了显示设备底层的差异,对应用程序的开发人员来讲,就不需要对底层的驱动深入了解,应用程序开发人员的开发效率也会提高。通过阅读本 LCD京邮电大学硕士研究生学位论文 第一章 绪论 1 第一章 绪论 1.1 选题背景以及研究内容 1.1.1 选题背景 传统电力网供电系统依靠人力对商业用电和生活用电进行抄读,不仅人工成本高,而且报表生成周期长、效率低,根据报表的统计结果分析用户需求也因此比较慢,不能及时反映系统用电量的需求分布情况,致使抄表结果对供应系统网络的优化缺乏参考价值,不但降低供电效率,而且还会影响供电质量12。此外,传统抄表方式依靠人力抄表,抄取电量数据的耗时较长,且无法实时的监控所有用户电表数据,这样就使得所获取的电表数据不精确,所获得的整个电网数据的可统计性比较弱,针对电网的改良,此数据的参考价值也不高3-5。与此同时,传统抄表系统对电网中漏电、窃电现象也不能进行正确的评估与确认,抄表时还需要抄表人员到用户家中抄读电表数据,这无疑给用户带来一定的麻烦,耗费大量的人力财力,可能还会引起用户的反感和不安,还有可能给犯罪分子以可乘之机6。 鉴于传统人力抄表和数据分析系统的上述局限,迫使人们寻找一种高效率、高可靠性的抄表方式,以便能够及时的获得所有用户某个时间的用电数据,完成对用电数据的计算和分析。 自动抄表系统(Automatic Meter Reading-AMR)7是在传统人工抄表方式不能满足生产和生活需要的情况下产生的,一般是指利用微电子、计算机网络、传感等技术自动读取和处理表数据,将城市居民水、电、气信息进行综合处理的系统8。现在发展中的自动抄表系统具有如下特点910: (1)高效率 电力网依靠人工对工农业生活用电进行数据采集,消耗大量人力物力,抄表周期相对比较长,效率极其低。而自动抄表系统可以替代大量的人力物力,节约了资源,获得了一定的经济效益。 (2)数据处理的周期缩短 使用自动抄表系统,即使是无人值守的情况下,都可以每天定点定时的监控区域范围内的用户用电情况,获得用电数据,同时也可以对所获得的数据存储和分析处理,整个过程基本不受人工干预,比起人工统计抄表数据或者是生成数据报表,数据处理周期大大缩短。 (3)精确度高 参考性强 传统人工抄表方式依靠人力抄取电量数据,只能逐个的进行抄IV 6.3.1 帧缓冲驱动简介 .41 6.3.2 改进的基于帧缓冲的 LCD 设备驱动设计.44 6.3.3 帧缓冲驱动程序的测试 .47 6.4 本章小结 .48 第七章 总结与展望 .49 参考文献.51 附录 1 程序清单 .53 附录 2 攻读硕士学位期间撰写的论文.54 致谢.55 京邮电大学硕士研究生学位论文 第二章 搭建嵌入式 Linux 开发平台 5 第二章 搭建嵌入式 Linux 开发平台 2.1 开发平台硬件参数 集中器采用 ATMEL 公司的 AT91SAM9260EK 作为处理芯片,AT91SAM9260EK 是一款 ARM926EJ-S 内核的工业级芯片,带有 USB2.0 协议的 USB HOST 和 Device 接口,支持全功能的 9 线串口等。 开发板硬件资源: 由 AT91SAM9260EK 数据手册可得核心板资源参数: n AT91SAM9260EK(ARM926EJ-S),主频 180M(达到 200MIPS),工业级; n 8K 字节的高速数据缓存器,8K 字节的高速指令缓冲区; n 64M Bytes NAND FLASH; n 32M Bytes SDRAM; 串口 n 一个 DEBUG 口; n 三个标准 RS232 口; n 三个标准 RS485 口; 网口 n 一个 100M 网口; USB 接口 n 一个 USB HOST(USB 2.0 Full Speed)接口; n 一个 USB Device(USB 2.0 Full Speed)接口; 其他设备 n 160*160 LCD 显示设备; n RTC 实时时钟(带电池); n 按键键盘; 2.2 开发宿主机交叉编译环境的建立 交叉编译是嵌入式开发过程中的一项重要技术,一般的嵌入式目标系统没有足够的资京邮电大学硕士研究生学位论文 第一章 绪论 4 的数据手册,UC1698U 的显示控制器并不能自动更新这段内存缓存区,不能实时的将缓冲区的数据更新到屏幕。为了在本 LCD 上开发出基于 Qt/Embedded 的图形用户界面,方便用户和集中器的交互,在这里借助内核的定时器将帧缓冲区的数据实时更新至屏幕,完成基于 FrameBuffer 的驱动开发。 1.2 课题来源以及论文的主要工作 针对嵌入式 Linux 系统移植存在的问题,结合南京某公司负荷控制管理终端平台的开发工作,本文的章节安排如下: 第一章是绪论内容,结合本课题选题背景引出本文研究内容。 第二章重点介绍搭建嵌入式 Linux开发平台,建立交叉编译环境,为后续 BootLoader、kernel 及文件系统的编译和移植做准备。 第三章对 BootLoader 的结构,启动流程进行了分析;针对选用的 Uboot 不支持所选YAFFS2 文件系统烧写的问题进行了研究,修改 Uboot 源码并重新编译,最终将编译生成的Uboot 镜像移植到本目标板中,修改后的 Uboot 可稳定在目标板中运行。 第四章分析 Linux 内核的源码结构以及启动过程2021,结合本目标板,对内核源代码进行修改:根据需要为 Linux 内核添加分区表信息;在 Linux 内核源码中添加 RS485 模式串口设备驱动代码,使得目标板支持 RS485 远程通信方式,;将 YAFFS2 文件系统的相关补丁添加到内核源码;修改内核根目录下的 Makefile 文件并对内核进行裁剪,使生成的内核既满足我们的要求,占用空间又小;最后借助于 TFTP 软件在目标板进行移植。 第五章介绍嵌入式文件系统结构,尤其是 YAFFS2 文件系统,介绍了文件系统制作工具 Busybox,并详细给出了该文件系统的编译和移植过程。当 Linux系统启动时,可以成功的挂载 YAFFS2 文件系统并能稳定的运行。 第六章分析嵌入式设备驱动开发流程,重点对驱动程序中的帧缓冲技术进行了研究。针对本目标板,采取直接读写 GPIO 口和帧缓冲相互结合的方式来开发驱动,并且在该 LCD设备上,改善原来采用的描点方式绘制的图形用户界面,采取基于 Qt/Embedded 的图形用户界面,也需要支持帧缓冲技术。但本目标板上的 LCD 设备显示控制器并不支持缓冲区的自动更新,在这里我们借助内核定时器完成自动更新并实时的显示到 LCD 界面上。最终开发了基于 Qt/Embedded 的用户图形界面验证该帧缓冲驱动的可靠性、稳定性,结果表明该驱动可以稳定的运行于嵌入式 Linux系统中。 第七章总结与展望,对本文所完成的工作进行了总结;并展望嵌入式领域的未来。京邮电大学硕士研究生学位论文 第二章 搭建嵌入式 Linux 开发平台 6 源供编译过程使用,就需要借助主机,在主机中完成编译,采用交叉编译技术,可以利用主机足够的资源编译成功后移植到目标机上运行。Linux下的交叉编译环境包括: (1)针对目标系统的编译器 (2)针对目标系统的二进制编译工具 (3)目标系统的标准 c 库 (4)目标系统的 Linux 内核头文件 2.2.1 arm-none-Linux-gnueabi-gcc 的安装 本系统中 Uboot、kernel、文件系统的编译工具链都是统一的,所选择的都是arm-none-Linux- gnueabi- gcc,我们在这里选择下载制作好的交叉编译链,然后稍作修改就能为我们所用。下载的压缩包:arm-2008q1-126-arm-none-Linux-gnueabi-i686-pc-Linux-gnu.tar。 解压后里面的 arm-none-Linux-gnueabi-gcc 就是我们要用的交叉编译链。 在/etc/bash.bashrc 中修改 PATH 环境变量,添加工具链的路径:$ export PATH=$PATH: /home/teen/arm- linu/arm-2008q1/bin,保存退出,重新登录 root 时新的环境变量就会生效。 2.2.2 TFTP 和 NFS 的配置 在进行移植内核镜像文件和根文件系统时,Uboot 通过 TFTP 协议将二者下载到目标板的 SDRAM 中,因此要在宿主机上设置 TFTP 服务器。当利用 NFS 文件系统共享文件时,还需在宿主机上设置 NFS 服务器。在本系统中,宿主机的 IP 为 8,网关为0 ,子网掩码为 ,目标板的 IP 为 9 。 NFS 目录/home/teen/nfsroot。 2.3 本章小结 本章首先介绍了硬件开发平台参数,然后详细阐述了交叉编译环境搭建的过程,同时在Linux 主机上配置了 TFTP 和 NFS 服务器,为后续嵌入式源码编译、调试以及最终镜像移植做好准备。京邮电大学硕士研究生学位论文 第三章 BootLoader 的设计与移植 7 第三章 BootLoader 的设计与移植 3.1 BootLoader 概述 在嵌入式 Linux系统中,通常可分为四个层次,这四个层次自上而下依次是:用户应用程序,文件系统,操作系统内核,引导加载程序。其中引导加载程序是系统加电后运行的第一段软件代码,由固件中的 Boot 代码和 BootLoader 两大部分组成。其中 BootLoader 运行在操作系统之前,为操作系统的调用做准备。在调用操作系统之前,BootLoader 完成的工作主要有初始化目标板软硬件设备、建立内存映射图、设置好系统软硬件环境22。图 3.1给出了整个 BootLoader 的工作流程。 经过矢量表跳转,进入特权模式,关闭中断 一个事件引起 boot(例如上电、复位、看门狗超时) 初始化处理 清除指令和 cache 重定位Uboot后半部代码到内存,跳转执行 建立堆栈和初始化数据段 初始化并检查硬件系统其他部件(串口、网口) 重定位 Uboot 后半部代码到内存,跳转执行 建立堆栈和初始化数据段,初始化并检查硬件系统(串口、网口) 显示各种检测信息及 boot 菜单 寻找内核并引导,依次寻找下列设备(串口、网口、flash) 将操作系统内核引导到 SDRAM 操作系统内核拷贝到 flash? 拷贝到 flash 跳转到 SDRAM中操作系统入口 N 图 3.1 BootLoader 工作流程图 Y 京邮电大学硕士研究生学位论文 第一章 绪论 2 读,不能获得某一个时刻所有用户的用电统计数据。这样得到的数据参考性不大,不方便供电部门对用电进行合理的分配管理。正是基于自动抄表系统如此多的优势,近年来无论是国内还是国外,对自动抄表系统的研究一直是热点之一。一般自动抄表系统由主站、集中器、采集器、终端电能表以及数据传输通道构成,一般远程电力抄表系统的系统架构如图 1.1 所示: 图 1.1 自动抄表系统架构 我们在这里研究的是自动抄表系统中的集中器,因为集中器的开发是远程抄表系统开发的核心任务之一11,集中器在整个系统中的地位十分重要,相当于人体脊椎,起承上启下作用。集中器向上连接着主站服务器,负责接收并下达主站服务器命令,对电网的数据进行监控或者抄读采集器数据;向下连接着采集器或者是终端电表,读取采集数据或终端电表数据进行存储并上传至主站服务器以便进行数据处理。除此之外,集中器还应具有显示、统计以及报警功能等,以便能实现现场调试检查与设置12;同时,集中器也可以和不同的接口设备进行相连,如图 1.1 中的手持终端。鉴于集中器在整个自动抄表系统中的关键地位,无论是对硬件平台还是软件平台,对集中器系统进行改进都是积极的意义。本文以南京某电力公司的集中器为背景,展开对集中器的软件部分的研究。 1.1.2 研究内容 本文研究的集中器,硬件平台是南京某电力公司提供的,该集中器采用的处理芯片是ATMEL 公司生产的 AT91SAM9260EK,内存 32M,配有一个 160*160 的 LCD(UC1698U)。京邮电大学硕士研究生学位论文 第三章 BootLoader 的设计与移植 8 3.2 BootLoader 的操作模式 一般来讲,BootLoader 有两种操作模式,包括启动加载模式和下载模式。这种操作模式的划分是对于开发人员来说的。 (1)启动加载模式 即自主模式,整个启动过程无需用户的介入,BootLoader 自主将操作系统从目标机上的存储设备中加载到目标板的 SDRAM 中运行。这种自主启动加载模式,是最终发布版本,也是我们用户在日常生活中所看到的启动模式。 (2)下载模式 在该模式下,目标机的 BootLoader 将通过串口或者网口等方式与宿主机通信并下载文件(包括内核镜像文件、根文件系统镜像等)。从宿主机下载的文件通常首先保存在目标机的内存中,然后根据实际情况在内存中执行或者写到目标板上的 FLASH 等非易失存储设备中。当 BootLoader 工作在此模式下时,通常需要向它的终端用户提供相应的命令接口23。 本系统中使用的是 Uboot,既支持启动加载模式,又可以通过用户的介入进入下载模式。在两种模式间,用户可以根据需要进行切换。Uboot 在启动时,首先默认进入的是启动加载模式,但是在启动 Uboot 后、加载内核镜像文件之前,Uboot 会提供一定时间等待用户的干预,该时间是由宏 CONFIGBOOTDELAY 定义的,若用户进行了干预,则会切换到下载模式,反之继续执行加载内核镜像文件。 3.3 Uboot 的源码结构 Uboot,全称 Universal Boot Loader,是遵循 GPL 条款的开放源码项目。其源码目录以及编译形式与 Linux内核及其的相似。除此之外,Uboot 可靠性高、稳定性强、适用性好,支持多个处理器系列、多种嵌入式操作系统内核

温馨提示

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

评论

0/150

提交评论