《基于ARM9的Linux嵌入式系统移植与驱动开发.docx》由会员分享,可在线阅读,更多相关《基于ARM9的Linux嵌入式系统移植与驱动开发.docx(52页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、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 o
2、ne 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
3、 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
4、 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 a
5、nalysis 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 transplanta
6、tion 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), impr
7、ove 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
8、 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, AR
9、M9,YAFFS2,driver,FrameBuffer I 摘要 随着信息技术的不断发展,嵌入式系统已经广泛应用于工业和家庭的各个领域。其复杂性也随之不断增加,嵌入式操作系统成为了嵌入式系统中最重要的组成部分之一。 在嵌入式操作系统中,Linux 操作系统得到了越来越多的关注,Linux 系统开源、具有精简的内核以及优异的性能。另外,Linux2.6 包含许多新的特性,为其在嵌入式领域的应用提供了更多更好的支持,嵌入式 Linux系统将会有巨大的市场价值以及应用前景。 本文基于南京某电力公司自动抄表系统,对负荷控制管理终端平台进行了 Linux 系统移植以及对 LCD 等外围设备的驱动开发。
10、本系统的 CPU 采用 ATMEL 公司的以 ARM926T为内核的 AT91SAM9260EK 处理器。采用了基于 2.6 内核版本的嵌入式 ARM Linux,最终完成基于 ARM9 的嵌入式 Linux 系统移植开发。具体包括搭建开发平台,建立嵌入式交叉编译环境;在分析嵌入式系统引导加载程序 BootLoader 的基础上,结合本目标板修改 Uboot源码并进行 Uboot 的编译和移植;通过分析嵌入式 Linux 系统的内核结构和启动流程,实现了针对本目标板的内核源码修改、编译以及移植;同时按照应用需求,选择 YAFFS2 文件系统作为根文件系统,并给出根文件系统实现的过程;最后开发终
11、端外围设备相应的驱动程序,重点围绕 LCD(UC1698U)展开,改进原来直接读写 GPIO 口的驱动方式,采取直接读写 GPIO 和帧缓冲相结合的方式开发新的驱动程序。帧缓冲是一块显示缓存,通过向该缓存中写入数据,显示控制器就会自动的从中读取数据并显示出来,在 LCD 设备上基于Qt 的图形用户界面的开发也需要帧缓冲技术的支持。但对于本类型的 LCD,显示控制器并不能自动完成缓冲区数据读取,本文从软件的角度借助内核定时器最终完成缓冲区更新并实时显示,最后开发基于 Qt/Embedded 的用户图形测试界面。 关键词: 嵌入式 Linux 系统,ARM9 ,YAFFS2 文件系统,驱动,帧缓冲
12、 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 的操作模式
13、 . 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
14、 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 嵌
15、入式 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
16、 Heping Supervisor: Prof. Qiu Xiaohui April 2013 京邮电大学硕士研究生学位论文 第一章 绪论 3 为了满足集中器的要求,充分发挥集中器承上启下的作用,我们选择嵌入式 Linux 操作系统做为集中器的操作系统。主要的研究内容如下: (1)根据终端需要对嵌入式 Linux内核进行修改。 确定了操作系统,在对 Linux源码以及启动流程的基础上,还要对选择的嵌入式 Linux系统进行定制以达到我们的要求。比如涉及到的集中器的通信方式方面,集中器远程抄表的通信方式既有无线方式,又包含有线方式1314。无线方式主要和手持终端进行近距离的通信,比如红外通信、
17、蓝牙通信等。有线方式包括各种串行总线技术(RS232、RS485、CAN总线等)、电力线载波、公共电话网等。相比其他有线通信方式,RS485 通信方式支持多节点、远距离以及灵敏度高,且只对接口的电气特性做出规定,不涉及接插件、电缆或协议,在此基础上用户可以建立自己的高层通信协议,RS485 已成为工业应用中数据传输的首选15-17。所以本集中器也应支持 RS485 通信方式,这就需要对内核源码进行修改以驱动终端外围的 RS485 端口。 (2)YAFFS2 文件系统选择 下一步要选择一个合适的文件系统来管理文件。YAFFS 文件系统是专门针对 NAND 闪存设计的嵌入式文件系统,目前有 YAF
18、FS 和 YAFFS2 两个版本,因为 YAFFS2 能更好的支持大容量的 NAND FLASH 芯片,同时考虑集中器的进一步的发展,需要大容量的 NAND FLASH 来满足业务需求,在这里我们选择 YAFFS2 文件系统。 (3)围绕 UC1698U 开发基于帧缓冲技术的驱动程序 成功编译和移植 BootLoader 以及嵌入式 Linux 内核和文件系统后,嵌入式 Linux 系统就可以正常启动和运行。为了驱动外设能正常工作,还要针对本集中器所有外设,开发相应的驱动程序,本文以 LCD 设备为例来讨论驱动的开发过程。针对本目标板的 LCD,对原来采用的直接读写 GPIO 口驱动的方式进行
19、改进,采用基于直接读写 GPIO 口驱动与帧缓冲驱动相结合的方式进行。在驱动支持帧缓冲技术的基础上,在 LCD 设备上就可以开发基于Qt/Embedded 或者 MiniGui、GtkFB 的图形用户界面,相比于靠描点绘制的图形用户界面,界面会较友好,有层次感,更方便用户和集中器的交互,用户体验较好,同时可移植性也较强。除此之外,基于 Qt/Embedded 或者 MiniGui、GtkFB 更方便开发高级图形界面或图形用户程序。FrameBuffer 译作帧缓冲,是基础图形设备,是一种专门为开发高级图形界面或者图形应用程序提供基本函数库的驱动程序接口。在此技术中,显示设备会被抽象成为一段内存
20、缓冲区,我们通过不停的向内存缓冲区中写入数据, 显示控制器就自动的从中读取数据并显示出来1819,这样就屏蔽了显示设备底层的差异,对应用程序的开发人员来讲,就不需要对底层的驱动深入了解,应用程序开发人员的开发效率也会提高。通过阅读本 LCD京邮电大学硕士研究生学位论文 第一章 绪论 1 第一章 绪论 1.1 选题背景以及研究内容 1.1.1 选题背景 传统电力网供电系统依靠人力对商业用电和生活用电进行抄读,不仅人工成本高,而且报表生成周期长、效率低,根据报表的统计结果分析用户需求也因此比较慢,不能及时反映系统用电量的需求分布情况,致使抄表结果对供应系统网络的优化缺乏参考价值,不但降低供电效率,
21、而且还会影响供电质量12。此外,传统抄表方式依靠人力抄表,抄取电量数据的耗时较长,且无法实时的监控所有用户电表数据,这样就使得所获取的电表数据不精确,所获得的整个电网数据的可统计性比较弱,针对电网的改良,此数据的参考价值也不高3-5。与此同时,传统抄表系统对电网中漏电、窃电现象也不能进行正确的评估与确认,抄表时还需要抄表人员到用户家中抄读电表数据,这无疑给用户带来一定的麻烦,耗费大量的人力财力,可能还会引起用户的反感和不安,还有可能给犯罪分子以可乘之机6。 鉴于传统人力抄表和数据分析系统的上述局限,迫使人们寻找一种高效率、高可靠性的抄表方式,以便能够及时的获得所有用户某个时间的用电数据,完成对
22、用电数据的计算和分析。 自动抄表系统(Automatic Meter Reading-AMR)7是在传统人工抄表方式不能满足生产和生活需要的情况下产生的,一般是指利用微电子、计算机网络、传感等技术自动读取和处理表数据,将城市居民水、电、气信息进行综合处理的系统8。现在发展中的自动抄表系统具有如下特点910: (1)高效率 电力网依靠人工对工农业生活用电进行数据采集,消耗大量人力物力,抄表周期相对比较长,效率极其低。而自动抄表系统可以替代大量的人力物力,节约了资源,获得了一定的经济效益。 (2)数据处理的周期缩短 使用自动抄表系统,即使是无人值守的情况下,都可以每天定点定时的监控区域范围内的用户
23、用电情况,获得用电数据,同时也可以对所获得的数据存储和分析处理,整个过程基本不受人工干预,比起人工统计抄表数据或者是生成数据报表,数据处理周期大大缩短。 (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 开发平
24、台 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 N
25、AND 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 开发宿主机交叉编译环境的建立 交叉编译是嵌入式开发过程中的一项重要技术,一般的嵌入式目标系统没有足够的资京邮电大学硕士研究生学位论文
26、第一章 绪论 4 的数据手册,UC1698U 的显示控制器并不能自动更新这段内存缓存区,不能实时的将缓冲区的数据更新到屏幕。为了在本 LCD 上开发出基于 Qt/Embedded 的图形用户界面,方便用户和集中器的交互,在这里借助内核的定时器将帧缓冲区的数据实时更新至屏幕,完成基于 FrameBuffer 的驱动开发。 1.2 课题来源以及论文的主要工作 针对嵌入式 Linux 系统移植存在的问题,结合南京某公司负荷控制管理终端平台的开发工作,本文的章节安排如下: 第一章是绪论内容,结合本课题选题背景引出本文研究内容。 第二章重点介绍搭建嵌入式 Linux开发平台,建立交叉编译环境,为后续 B
27、ootLoader、kernel 及文件系统的编译和移植做准备。 第三章对 BootLoader 的结构,启动流程进行了分析;针对选用的 Uboot 不支持所选YAFFS2 文件系统烧写的问题进行了研究,修改 Uboot 源码并重新编译,最终将编译生成的Uboot 镜像移植到本目标板中,修改后的 Uboot 可稳定在目标板中运行。 第四章分析 Linux 内核的源码结构以及启动过程2021,结合本目标板,对内核源代码进行修改:根据需要为 Linux 内核添加分区表信息;在 Linux 内核源码中添加 RS485 模式串口设备驱动代码,使得目标板支持 RS485 远程通信方式,;将 YAFFS2
28、 文件系统的相关补丁添加到内核源码;修改内核根目录下的 Makefile 文件并对内核进行裁剪,使生成的内核既满足我们的要求,占用空间又小;最后借助于 TFTP 软件在目标板进行移植。 第五章介绍嵌入式文件系统结构,尤其是 YAFFS2 文件系统,介绍了文件系统制作工具 Busybox,并详细给出了该文件系统的编译和移植过程。当 Linux系统启动时,可以成功的挂载 YAFFS2 文件系统并能稳定的运行。 第六章分析嵌入式设备驱动开发流程,重点对驱动程序中的帧缓冲技术进行了研究。针对本目标板,采取直接读写 GPIO 口和帧缓冲相互结合的方式来开发驱动,并且在该 LCD设备上,改善原来采用的描点方式绘制的图形用户界面,采取基于 Qt/Embedded 的图形用户界面,也需要支持帧缓冲技术。但本目标板上的 LCD 设备显示控制器并不支持缓冲区的自动更新,在这里我们借助内核定时器完成自动更新并