《嵌入式Linux系统的研究及其在串口通信中的应用.pdf》由会员分享,可在线阅读,更多相关《嵌入式Linux系统的研究及其在串口通信中的应用.pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 嵌入式嵌入式 Linux 系统的研究及其在串口通信中的应用系统的研究及其在串口通信中的应用 竹林,祝忠明(成都理工大学 通信与信息系统系,成都 610059)摘要摘要:研究了典型的嵌入式 Linux 操作系统,概述了如何构建嵌入式 Linux 开发环境,分析了 Linux 内核的修改和剪裁,并在开发板上实现串口通信。关键字:关键字:嵌入式系统;linux;内核;裁剪 Research and Application of Embedded Linux System Based on ARM Zhu lin,Zhu zhongming (Chengdu University of Techno
2、logy,Chengdu 610059)Abstract:Typical Embedded Linuxoperating systems are studied,it is summarized how to build a development condition of the embedded Linux and analyzed deeply how to modify and tailor the Linux kernel and serial communication are realized on the developing board.Keywords:embedded;o
3、perating;system;linux;kernel;ailor 1、引言引言 Linux 内核进行修改和剪裁以满足系统的需求,是移植技术中的关键。本文主要研究了如何对 Linux 操作系统进行修改和剪裁,并在开发板上实现了串口通信。2、嵌入式嵌入式 Linux 操作系统分析操作系统分析 Linux 系统内核的分析:Linux 系统使用了单一内核结构,即操作系统中所有的系统相关功能都被封装在内核中。程序通过一套称作系统调用(System Call)的界面访问内核结构。在 Linux 中,可以动态装入和卸载内核中的部分模块。Linux 内核由 5 个 部分组成:进程管理、内存管理、文件系统管
4、理、进程间通信和网络接口。典型的嵌入式 Linux 操作系统有 2 类:第一类如CLinux,其是为了支持没有 MMU(内存管理单元)的处理器而对标准 Linux 作出的修正。CLinux 保留了 Linux 的大部分优点:稳定良好的移植性、优秀的网络功能、支持各种文件系统以及标准丰富的 API 等。第二类是将 Linux 开发成实时系统尤其是硬(firm)实时系统,应用于一些关键的控制场合,如 RTLinux。3、基于、基于 ARM 平台的嵌入式平台的嵌入式 Linux 系统的研究系统的研究 3.1 嵌入式平台及开发环境的建立嵌入式平台及开发环境的建立 HFRK2410 开发板是基于 S3C
5、2410 高性能 ARM 处理器的嵌入开发平台,CPU 采用 S3C2410ARM920T。开发过程为:Linux 下建立交叉编译器,在Windows 操作系统中用 ADS 开发工具实现启动程序,在 Linux 操作系统下,用交叉编译器进行 Linux 内核、库函数及应用程序的编译。3.2 BootLoader 代码分析代码分析 嵌入式系统中,Boot Loader 是在操作系统内核或用户应用程序运行之前运行一段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。大多数 BootLoader 都包
6、含 2 种不同的操作模式:启动加载(BootLoading)模式和下载(DownLoading)模式。启动加载(Boot Loading)模式:也称为“自主”模式。即 BootLoader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。这种模式是 Boot Loader 的正常工作模式,在嵌入式产品发布的时候,BootLoader 必须工作在这种模式下。下载模式:在这种模式下,目标机上的 BootLoader 将通过串口连接或网络连接等通信手段从主机下载文件。从主机下载的文件通常首先被 BootLoader 保存到目标机的 RAM 中,然后再被 Bo
7、otLoader 写到目标机上的 FLASH 类固态存储设备中。BootLoader 的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用 BootLoader 的这种工作模式。工作于这种模式下的 BootLoader 通常都会向其终端用户提供一个简单的命令行接口。3.3 内核的修改和剪裁内核的修改和剪裁 内核的初始化分为以下几个阶段:(1)内核的入口 stext。stext 是 BootLoader 所调用的内核入口,从 stext 进入后,将完成一些针对程序运行环境的建立。(2)内核的初始化函数 start_kernel。start_kernel 是内核初始化的
8、主体。在调用这个函数的时候,系统已经有了一个初始化的页目录表和堆栈。(3)内核的初始化线程 init。在 start_kernel 中,通过创建了一个内核进程来执行 init 函数,进行初始化。(4)系统的初试化程序 修改内核启动部分源代码:主要是修改 makefile 文件,以及加上 NAND Flash的支持和 mtd 分区表的填写。目的是指定目标 CPU 的体系结构为 ARM 及交叉编译器前缀为 arm-linux-,并在内核启动时能初始化 NAND Flash。修改的步骤为:(1)下载并解压 Linux 内核(2)修改 makefile 文件#ARCH?=$(SUBARCH)修改为 A
9、RCH:=arm。(3)修改相关的文件 修改 archarmmach-s3c2410devs.c 文件 增加头文件定义:#include#include#include 增加 NAND Flash 分区信息,将分区信息和 bootloader 程序一致。修改 archarmmach-s3c2410mach-smdk2410.c 文件 做完以上修改再经内核编译后就可以在 hfrk2410 开发板上运行了。(4)编译内核 编译内核需要 3 个步骤,分别是创建内核依赖关系、创建内核镜像文件和创建内核模块。命令依次为:make dep,make zImage,make modules。编译完成以后,会
10、生成镜像文件 arch/arm/boot/zImage,把这个文件下载到开发板上,就会看到 Linux2.6 的内核启动信息,即完成了 Linux2.6 内核移植的第一步。(5)加载 YAFFS2 文件系统(Yet Another Flash File System,YAFFS)(6)内核的剪裁 使用 Linux 自身的配置工具,编译定制内核。根据功能对内核进行剪裁,要达到的目标是:保证串口下载调试信息,提供必要的系统操作,支持应用程序正常运行,即完成串口通信。配置的 Linux 内核如下:Code maturity level options-代码成熟等级选项(不选)Prompt for d
11、evelopment and/or incomplete code/drivers 默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的 与驱动。通用设置选项:支持处理器在程序之间同步和交换信息、支持热插拔 General setup-*System VIPC*Support for hot-pluggable devices 可加载模块:使用模块支持、支持模块卸载、支持内核自动加载部分模块 Loadable module support-*Enable loadable module support*Module unloading*Automatic kernel modul
12、e loading 总线支持配置:有关 PCMCIA 不选 Bus support-PCCARD(PCMCIA/CardBus)support-Enable PCCARD debugging 16-bit PCMCIA support(NEW)Load CIS updates from userpace(EXPERIMENTAL)(NEW)PCMCIA control ioctl(obsolete)(NEW)支持的可执行文件格式:支持 ELF,ELF 是开放平台下最常用的二进制文件,它支持不同的硬件平台。Userspace binary formats-*Kernel support for
13、ELF binaries 设备驱动:支持 MTD 分区,支持 NAND Flash、网卡 CS8900 Device Drivers-Memory Technology Device(MTD)support*MTD partitioning support*Direct char device access to MTD devices*Caching block device access to MTD devices NAND Flash Device Drivers-*NAND Device Support*NAND Flash support for S3C2410/S3C2440 S
14、oC*S3C2410 NAND driver debug Network device support-Ethernet(10 or 100Mbit)-CS8900 support(7)建立根文件系统 根文件系统的作用是存放了各种工具、应用程序、init 程序、必需的库和需要加载的模块。根文件系统采用 cramfs 格式,并使用工具软件 busybox 来建立。通过以上步骤,内核已经正常启动,首先检测硬件平台,然后初始化网卡、USB 以及其他硬件,最终挂载文件系统 YAFFS,显示 Linux 命令行的提示符。4、基于、基于 ARM 平台的嵌入式平台的嵌入式 Linux 在串口通信中的应用在串
15、口通信中的应用 该系统只设计了一路与 UART0 相连的 RS-232C 接口电路,通过 9 芯的 D型插头,与外设可方便的连接,同时设计了数据发送与接收的状态指示 LED,当有数据通过串行口传输时,LED 闪烁,便于用户掌握其工作状态,以及进行软、硬件的调试。串口通信的程序流程图如图 1 所示。图 1 串口通信的程序流程图(1)使用标准的文件打开函数操作来打开串口:int fd;/*以读写方式打开串口*/fd=open(/dev/ttyS0,O_RDWR);if(-1=fd)perror(提示错误!);/*不能打开串口一*/(2)最基本的设置串口包括波特率设置,效验位和停止位设置。串口的设置
16、主要是设置 struct termios 结构体的各成员值。(3)读写串口 设置好串口之后,把串口当作文件读写就可以了。发送数据:char buffer1024;int Length=1024;int nByte;nByte=write(fd,buffer,Length);写数据:char buff1024;int Len=1024;int readByte=read(fd,buff,Len);(4)关闭串口 Close(fd);5、结束语、结束语 在嵌入式系统平台的开发使用过程中,经常使用串行接口与 PC 主机进行通信。在此平台上,可以运行嵌入式 Linux 操作系统,使用串口下载应用程序等
17、。由此可见,在嵌入式系统中实现串口通信,可延伸系统的应用触角,扩大系统的数据采集和过程控制的范围。参考文献参考文献 1马忠梅等.ARM&Linux 嵌入式教程M.北京:北京航空航天大学出版社,2004.2孙天泽等.嵌入式设计及 Linux 驱动开发指南M.北京:电子工业出版社,2002.3毛德操.Linux 内核源代码情景分析M.杭州:浙江大学出版社,2001/4李善平等.Linux 与嵌入式系统M.北京:清华大学出版社,2003.5陈莉君.Linux 操作系统内核分析M.北京:人民邮电出版社,2000.6张斌,高波.Linux 网络编程.北京M:清华大学出版社,2000.7胥静.嵌入式系统设计与开发实例详解基于 ARM 的应用M.北京:北京 作者简介 竹林竹林,硕士研究生,研究方向为数字信号处理。