1、学位论文基于s3c2440的嵌入式linux操作系统内核研究 学校代码: 11059 学 号:0805070285Hefei University 毕业论文(设计)BACHELOR DISSERTATION论文题目: 基于S3C2440的嵌入式 LINUX操作系统内核研究 学位类别: 工学学士 学科专业: 自动化 作者姓名: 郭辉 导师姓名: 干开峰 完成时间: 2012年5月12号 基于S3C2440的嵌入式LINUX操作系统内核研究中文摘要嵌入式Linux是以Linux为基础的嵌入式操作系统,可应用于多种硬件平台,是一个和Unix相似、以内核为基础的、具有完全的内存访问控制,支持大量硬件等
2、特性的一种通用操作系统。它能够适应对工业控制领域高实时性的要求,被广泛应用在移动电话、个人数字助理、媒体播放器、消费性电子产品以及航空航天等领域中。本课题是以GT2440开发板为平台来研究Linux操作系统的内核,GT2440采用高主频高性能的SamsungS3C2440A处理器作为主控芯片,接口资源丰富,具有通用性。主要完成Nand Flash驱动、LCD驱动、CS8900A网卡驱动、UDA1341声卡驱动、触摸屏驱动、SD卡驱动、RTC驱动和USB驱动等移植实现。最后把移植的内核文件下载到GT2440开发板进行测试,测试结果验证了内核移植的正确性。关键词:嵌入式系统;S3C2440;Lin
3、ux内核移植;驱动移植 Study of Embedded Linux Operating System Kernel Based on S3C2440 AbstractEmbedded Linux is a embedded operating system based on Linux, which can be applied to a variety of hardware platforms, with full memory access control, supporting for a lot of hardware features. It can adapt to real
4、-time requirements on the field of industrial control, it is widely used in mobile phones, personal digital assistants, media players, consumer electronics, and aerospace and other fields.The kernel of the Linux operating system is studied based on the GT2440 in the topic, the GT2440 uses high frequ
5、ency and high-performance SamsungS3C2440A processor as the master chip, whose interface is rich in resources and versatile. Primarily the transplanting of NandFlash drive,LCD driver,CS8900A LAN Driver,UDA1341 sound card driver, touch screen driver, SD card driver, RTC driver and USB driver are finis
6、hed. Finally, the kernel file transplanted is downloaded to the GT2440 development board for testing, and the test results verify the correctness of the kernel transplantation.KEY WORD: Embedded system;S3C2440;Linux kernel porting;Drive transplant目录第一章 前言 11.1 嵌入式系统简介 11.2 嵌入式操作系统概述 21.3 章节安排 2第二章 开
7、发环境搭建 32.1 硬件平台 32.2 交叉开发环境 62.2.1 交叉开发环境简介 62.2.2 交叉编译环境的建立 6第三章 嵌入式Linux内核移植实现 83.1 嵌入式Linux内核概述 83.2 嵌入式Linux内核移植实现 103.2.1 移植准备工作 103.2.2 CS8900A网卡驱动移植 113.2.3 UDA1341声卡驱动移植 153.2.4 触摸屏驱动移植 163.2.5 Nand Flash驱动移植 183.2.6 yaffs2文件系统的支持 203.2.7 LCD驱动的移植 213.2.8 RTC驱动移植 223.2.9 USB驱动移植 22第四章 系统的功能测
8、试 244.1 测试准备 244.2 CS8900A网卡测试 244.3 UDA1341测试 244.4 触摸屏测试 254.5 LCD测试 254.6 RTC实时时钟测试 264.7 USB驱动测试 26第五章 总结 28参考文献 29致 谢 30第一章 前言一.1 嵌入式系统简介根据IEEE的定义,嵌入式系统是控制、监视或者辅助装置、机器和设备运行的装置。从中可看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。嵌入式系统是与应用紧密结合的,具有很强专用性,必须结合实际系统需求进行合理的裁减利用。国内一个普遍被认同的定义是:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应
9、用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统1。嵌入式系统有以下一些特点:1.系统内核小。由于嵌入式系统一般是应用于小型电子装置的,系统资源相对有限,所以内核较传统的操作系统要小得多。比如Enea公司的OSE分布式系统,内核只有5K。2.专用性强。嵌入式系统的个性化很强,其中的软件4种嵌入式操作系统的调度机制和硬件的结合非常紧密,一般要针对硬件进行系统的移植,即使在同一品牌、同一系列的产品中也需要根据系统硬件的变化和增减不断进行修改。同时针对不同的任务,往往需要对系统进行较大更改,程序的编译下载要和系统相结合,这种修改和通用软件的升级是完全两个概念。3.系统精简。嵌入式系统一
10、般没有系统软件和应用软件的明显区分,不要求其功能设计及实现上过于复杂,这样一方面利于控制系统成本,同时也利于实现系统安全。4.高实时性的系统软件是嵌入式软件的基本要求。而且软件要求固态存储,以提高速度;软件代码要求高质量和高可靠性。5.嵌入式软件开发要想走向标准化,就必须使用多任务的操作系统。嵌入式系统的应用程序可以没有操作系统直接在芯片上运行;但是为了合理地调度多任务、利用系统资源、系统函数以及和专家库函数接口,用户必须自行选配开发平台,这样才能保证程序执行的实时性、可靠性,并减少开发时间,保障软件质量。6.嵌入式系统开发需要开发工具和环境。由于其本身不具备自举开发能力,即使设计完成以后用户
11、通常也是不能对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发,这些工具和环境一般是基于通用计算机上的软硬件设备以及各种逻辑分析仪、混合信号示波器等。开发时往往有主机和目标机的概念,主机用于程序的开发,目标机作为最后的执行机,开发时需要交替结合进行2-3。一.2 嵌入式操作系统概述嵌入式操作系统(Embedded Operation System,EOS)是一种用途广泛的系统软件,过去它主要应用于工业控制和国防系统领域。EOS负责嵌入系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。目前,已推出一些
12、应用比较成功的EOS产品系列。常见的嵌入式操作系统有uC/OS II、RT-thread、uCLinux、FreeRTOS、RTX、Arm-Linux、VxWorks、RTEMS、pSOS、Nucleus、PalmOS、Windows CE、Windows XP Embedded、Windows Vista Embedded、嵌入式Linux等4。嵌入式Linux操作系统是指对Linux经过小型化裁剪后,能够固化在容量只有几十万字节或几十亿字节的存储器芯片或单片机中,应用于特定嵌入式场合的专用Linux操作系统。嵌入式Linux操作系统具有以下特点:1.内核完全开放;2.强大的网络支持功能;3
13、.具备一整套工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,并且可以跨越嵌入式系统开发中仿真工具的障碍;4.具有广泛的硬件支持特性;5.遵循通用国际标准,便于程序的移植。本课题选择了嵌入式Linux操作系统作为研究对象,移植内核并下载运行。一.3 章节安排第一章,前言,简要介绍嵌入式系统以及嵌入式操作系统的概念;第二章,开发环境搭建,介绍内核移植的硬件平台以及交叉编译环境的建立;第三章,内核移植实现,简要介绍一下嵌入式linux内核,并详细介绍内核移植步骤;第四章,系统功能的测试,下载测试软件到开发板,观察是否能实现所需功能,第五章,总结,对毕业设计进行一个总结。第二章 开发环境搭建二
14、.1 硬件平台GT2440是一款具有极高性价比的嵌入式开发系统,采用高主频高性能的SamsungS3C2440A处理器作为主控芯片,专业的电路设计,优秀的LAYOUT,采用高品质的PCB板材和元器件,使其具备优越的稳定性;GT2440开发板总体结构如图1所示。图1 GT2440开发板总体结构图GT2440开发板硬件资源特性如下: CPU处理器-Samsung S3C2440A,主频400MHz,最高533Mhz SDRAM内存- 板载64M SDRAM- 32bit数据总线- SDRAM时钟频率高达100MHz FLASH存储- 板载256M Nand Flash,掉电非易失- 板载2M No
15、r Flash,掉电非易失,已经安装BIOS LCD显示- 板上集成4线电阻式触摸屏接口,可以直接连接四线电阻触摸屏- 支持黑白、4级灰度、16级灰度、256色、4096色STN液晶屏,尺寸从3.5寸到12.1寸,屏幕分辨率可以达到1024x768象素; 接口和资源- 1个10M以太网RJ-45接口(采用CS8900网络芯片)- 3个串行口- 1个USB Host- 1个USB Slave B型接口- 1个SD卡存储接口- 1路立体声音频输出接口,一路麦克风接口;- 1个2.0mm间距20针标准JTAG接口- 4 USER Leds- 4 USER buttons- 1个PWM控制蜂鸣器- 1
16、个可调电阻,用于AD模数转换测试- 1个I2C总线AT24C08芯片,用于I2C总线测试- 1个20pin摄像头接口- 板载实时时钟电池- 电源接口(12V),带电源开关和指示灯 系统时钟源- 12M无源晶振 实时时钟- 内部实时时钟(带后备锂电池) 扩展接口- 1个34 pin 2.0mmGPIO接口- 1个44 pin 2.0mm系统总线接口地址空间分配和片选信号定义S3C2440支持两种启动模式:一种是从Nand Flash启动;一种是从Nor Flash启动。在此两种启动模式下,各个片选的存储空间分配是不同的,如图2所示。图2 硬件资源分配上图中,左边是nGCS0片选的Nor Flas
17、h启动模式下的存储分配图;右边是Nand Flash启动模式下的存储分配图。在进行器件地址说明之前,有一点需要注意,nGCS0片选的空间在不同的启动模式下,映射的器件是不一样的。由上图可以知道:在NANDFlash启动模式下,内部的4K Bytes BootSram被映射到nGCS0片选的空间;在Nor Flash启动模式下(非Nand Flash启动模式),与nGCS0相连的外部存储器Nor Flash就被映射到nGCS0片选的空间。SDRAM地址空间:0x300000000x340000005。二.2 交叉开发环境二.2.1 交叉开发环境简介嵌入式系统是专用计算机系统,由于其处理能力和存储
18、能力较弱及特殊的处理器结构,使嵌入式系统中不能安装开发软件。所以,在进行嵌入式开发时,往往采用交叉编译的方式。所谓交叉编译是指在宿主机(host)中编辑和编译程序,并在目标机(target)中运行由主机编译得到的可执行代码6。二.2.2 交叉编译环境的建立1.在Windows中安装虚拟机,虚拟机版本为Vmware Workstation 8.0.2。2.在Vmware Workstation虚拟机中安装Linux操作系统,版本为Red had linux 9.0。3.在Linux操作系统中安装安装交叉编译器arm-linux-gcc。下载arm-linux-gcc-4.3.3.tgz,进行解压
19、操作:#tar xzvf arm-linux-gcc-4.3.3.tgz / 修改环境变量:在etc/profile中添加export PATH=/usr/local/arm/4.3.3/bin:$PATH。然后输入:arm-linux-gcc v出现如图3所示的信息,说明交叉编译环境搭建成功。图3 交叉编译器版本显示3.在Windows中安装一些工具软件,如文本编辑器Notepad+,串口通信secureCRT,烧录工具DNW等,便于开发。第三章 嵌入式Linux内核移植实现三.1 嵌入式Linux内核概述Linux是最受欢迎的自由电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的
20、类Unix操作系统。Linux最早是由芬兰黑客Linus Torvalds为尝试在英特尔x86架构上提供自由免费的类Unix操作系统而开发的。该计划开始于1991年,在计划的早期有一些Minix黑客提供了协助,而今天全球无数程序员正在为该计划无偿提供帮助7。内核指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统叫作Linux操作系统。嵌入式Linux内核的体系结构如下:1.进程调度:负责控制进程对CPU的使用。CPU是计算机系统中最核心的资源,调度程序负责在可运行进程中公平地选择,使其中之一成为运行进程,从
21、而充分利用CPU的资源。同时,它也负责保证内核及时对硬件进行操作。2.内存管理:标准Linux的内存管理支持虚拟内存,进程的代码、数据和堆栈的总量可以超过实际内存的大小。而Linux大致可以根据平台有无存储管理单元分为两个类别:一类是和标准Linux一样运行在有硬件存储管理器的处理器上,另外一类通常针对无硬件存储管理器的CPU进行裁剪和移植。3.虚拟文件系统:隐藏了不同硬件的具体细节,为所有设备提供统一的接口。虚拟文件系统可再分为逻辑文件系统和设备驱动程序两部分。逻辑文件系统指Linux支持的文件系统,如etx2、jffs和nfs等。设备驱动程序是具体操作硬件控制器的代码。4.网络接口:负责支
22、持标准的网络通信协议和各种网络硬件设备。其中网络通信协议部分负责实现各种标准的链路层、网络层和传输层协议;而设备驱动程序负责对网络硬件进行具体操作。5.进程间通信:支持进程间各种通信机制。其通信手段主要有:信号、文件锁、管道、等待队列、信号量、消息队列、共享内存和套接字。Linux内核系统模块结构及相互依赖关系如图4所示。虚拟文件系统文件系统网络接口内存管理进程调度进程间通信图4 Linux内核系统模块结构及相互依赖关系由上图可以看出,所有的模块都与进程调度模块存在依赖关系。因为它们都需要依靠进程调度程序来挂起(暂停)或重新运行它们的进程。通常,一个模块会在等待硬件操作期间被挂起,而在操作完成
23、后才可继续运行。例如,当一个进程试图将一数据块写到软盘上去时,软盘驱动程序就可能在启动软盘旋转期间将该进程置为挂起等待状态,而在软盘进入到正常转速后再使得该进程能继续运行。另外3个模块也是由于类似的原因而与进程调度模块存在依赖关系。其他几个模块的依赖关系有些不太明显,同样也很重要。进程调度子系统需要使用内存管理来调整特定进程所使用的物理内存空间。进程通信子系统则需要依靠内存管理器来支持共享内存通信机制。这种通信机制允许两个进程访问内存的同一区域以进行进程间信息的交换。虚拟文件系统也会使用网络接口来支持网络文件系统(NFS),同样也能使用内存管理子系统提供内存虚拟盘(ramdisk)设备。而内存
24、管理子系统也会使用文件系统来支持内存数据块的交换操作8。Linux内核源码目录如下:1.Documentation:这个目录下面没有内核代码,只有很多质量参差不齐的文档,但往往能够给我们提供很多的帮助。2.arch:所有与体系结构相关的代码都在这个目录以及include/asm-*/目录中,Linux支持的每种体系结构在arch目录下都有对应的子目。3.drivers:这个目录是内核中最庞大的一个目录,显卡、网卡、SCSI适配器、PCI总线、USB总线和其他任何Linux支持的外围设备或总线的驱动程序都可以在这里找到。4.fs:虚拟文件系统(VFS,Virtual File System)的代
25、码,和各个不同文件系统的代码都在这个目录中。Linux支持的所有文件系统在fs目录下面都有一个对应的子目录。5.include:这个目录包含了内核中大部分的头文件,它们按照下面的子目录进行分组。include/asm-*/,这样的子目录有多个,每一个都对应着一个arch的子目录。6.init:内核的初始化代码。包括main.c、创建早期用户空间的代码以及其他初始化代码。7.ipc:即进程间通信(interprocess communication)。它包含了共享内存、信号量以及其他形式IPC的代码。8.kernel:内核中最核心部分,包括进程的调度(kernel/sched.c),以及进程的创
26、建和撤销(kernel/fork.c和kernel/exit.c)等,和平台相关的另外一部分核心的代码在arch/*/kernel目录。9.lib:库代码,实现了一个标准C库的通用子集,包括字符串和内存操作的函数(strlen、mmcpy和其他类似的函数)以及有关sprintf和atoi的系列函数。与arch/lib下的代码不同,这里的库代码都是使用C编写的,在内核新的移植版本中可以直接使用。10.mm:包含了体系结构无关部分的内存管理代码,体系相关的部分位于arch/*/mm目录下。:网络相关代码,实现了各种常见的网络协议,如TCP/IP、IPX等。12.scripts:该目录下没有内核代码
27、,只包含了用来配置内核的脚本文件。当运行make menuconfig或者make xconfig之类的命令配置内核时,用户就是和位于这个目录下的脚本进行交互的。13.block:block层的实现。最初block层的代码一部分位于drivers目录,一部分位于fs目录,从2.6.15开始,block层的核心代码被提取出来放在了顶层的block目录。14.crypto:内核本身所用的加密API,实现了常用的加密和散列算法,还有一些压缩和CRC校验算法。15.security:这个目录包括了不同的Linux安全模型的代码,比如NSA Security-Enhanced Linux。16.soun
28、d:声卡驱动以及其他声音相关的代码。17.usr:实现了用于打包和压缩的的cpio等9。三.2 嵌入式Linux内核移植实现三.2.1 移植准备工作1.为了方便修改程序,在windows平台下面操作。需要windows和Linux之间共享文件,实现如下:(1)安装smb服务器。(2)配置smb服务器:建立一个共享的目录和win7可以访问的用户名和密码。(3)在win7中创建一个虚拟网卡,设置虚拟网卡的静态ip地址,例如:192.168.3.1。(4)设置虚拟机网络:vmnet8,host-only;subnet的ip:192.168.3.0。(5)设置linux eth0的ip地址和虚拟网卡i
29、p地址在一个网段,例如:192.168.3.100。(6)启动smb服务器:#service smb start。(7)win7中win+r输入192.168.3.100即可访问共享的资源。2.准备内核干净的源码,从官网下载,本课题用的是linux2.3.61版本的内核,即文件linux-2.6.31.tar.bz2。解压至工作目录linux-2.6.31。3.指定内核为arm,交叉编译器为linux修改linux-2.6.31下的Makefile:183行:linux ARCH ?=arm184行:CROSS_COMPILE ?=arm-linux-修改Makefile权限为可写可执行,保存
30、。4.修改时钟修改arch/arm/mach-s3c2440/mach-smdk2440.c163行:s3c24xx_init_clocks(12000000)。5.载入配置文件#make menuconfig进入Load an Alternate Configuration File输入2440的默认配置文件:arch/arm/configs/s3c2410_defconfig在System Type下,s3c24XX Machine那部分,只选中:SMDK2410/A9M2410SMDK2440SMDK2440 with S3C2440 cpu moudle进入Kernel Feature
31、s选择Use the ARM EABI to compile the kernel和Allow old ABI binaries to run with this kernel保存配置文件改名为:.config并退出10。编译:#make zImage,把镜像烧进NandFlash跑一下,看串口是否打印出信息。三.2.2 CS8900A网卡驱动移植CS8900A工作流程图如图5所示。图5 CS8900A工作流程图移植时首先确定网卡的地址为0x19000000,中断号为EINT9。修改drivers/net/cs89x0.c,指定CS8900A使用的资源:#elif defined(CONFIG_ARCH_S3C2410)#include #include #define S3C24XX_PA_CS8900 0x19000000static unsigned int netcard_portlist _initdata =0,0;static u
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1