S3C2440平台论文(精选7篇)
S3C2440平台论文 篇1
1 引言
21世纪是后计算机时代,人们每天都会接触很多的嵌入式产品,手机、PDA等手持式信息设备发展迅速。这些设备的关键在于人机交互技术的体现,所以一个十分友好的图形用户界面(GUI)是必不可少的。
目前嵌入式Linux的主流GUI系统主要有Mini GUI,Micro Windows,O pen GUI,Qt/Embedded等[1],这些GUI在接口定义、体系结构、功能特性等方面存在很大差别。Mini GUI具有良好的软件架构,通过抽象层将其上层和底层操作系统隔离开来,开发的重点在于窗口系统,但由于支持力量比较薄弱,其维护和再开发成本不可预计。Micro Windows以较小的资源消耗、通用的帧缓冲(Frame Buffer)技术、灵活的分层设计模式和丰富的AP支持等特点获得广泛的关注,但其图形引擎无任何硬件加速能力,算法低效,代码质量较差。Open GUI基于用汇编语言实现的X86图形内核,提供了高层的C/C++图形/窗口接口,它的资源消耗小,但可移植性差,不支持多进程。
Qt/Embedded[2]是一个多平台的C++图形用户界面应用程序框架,易扩展,可移植性好,支持多个GUI平台的交互开发。从个人消费电子到工业控制设备,Qt/Embedded被广泛地应用于各种嵌入式产品和设备中。
2 Qt/Embedded的移植与开发
2.1 总体流程
Qt/Embedded是著名的Qt库开发商Trolletch公司(2008年6月被诺基亚公司收购)开发的图形化界面开发工具Qt的嵌入式版本。Qt/Embedded采用Server Client结构,延续了Qt在X上的强大功能,在底层摒弃了Xlib,仅采用Frame Buffer作为底层图形接口。同时将外部输入设备抽象为keyboard和mouse输入事件,底层接口支持键盘、鼠标、触摸屏以及用户自定义的设备等[3]。
Qt/Embedded的类库完全采用C++封装,控件资源丰富,可移植性较好,开放的源码使得开发人员可以在GPL许可协议下自由地进行嵌入式GUI应用程序的移植与开发。Qt/Embedded移植与开发总体流程如图1所示。
2.2 系统平台的介绍
笔者采用广州友善之臂公司设计的Micro2440开发板作为硬件平台,该开发板由核心板与底板组成。核心板上集成了三星公司400 MHz的微处理器S3C2440,64 Mbyte的SDRAM,64 Mbyte NAND Flash以及2 Mbyte NOR Flash。底板上则集成了一些常规外设接口。在软件方面,使用Linux-2.6.13稳定内核的操作系统,根文件系统为缺省安装的文件系统,采用基于arm-linuxgcc-3.4.1的函数库。
整个系统软件由引导装载程序(U-Boot)、设备驱动(包括帧缓冲)、嵌入式Linux内核、文件系统(YAFFS)以及基于Qt/Embedded的应用程序组成[4]。系统平台结构如图2所示。
3 Qt/Embedded开发环境的搭建及其移植[5,6,7]
搭建编译平台是嵌入式GUI的必要工作。Qt/Embedded的软件开发环境主要包括嵌入式Linux操作系统、软件开发工具链以及相关源码包。本文的开发环境是在个人PC上安装VMware Workstation 6.5.1和Red Hat Linux 9.0操作系统,内核版本是2.6.13,与目标板上运行的版本一致。采用的交叉编译器为armlinux-gcc-3.4.1,源码包为qt-embedded-linux-opensource-src-4.5.3和qt-x11-opensource-src-4.5.3。
3.1 X11虚拟环境搭建
在PC机上编译好的qt-x11可以生成Qt开发工具,如用户界面编译器(UIC)与虚拟帧缓冲服务器(QVFB),作为交叉编译环境的支持。虚拟环境搭建过程如下:
1)在PC平台文件系统中建立工具包目录,将源码包分别用tar命令解压并放置其中。
2)进入qt-x11目录,在终端键入./configure命令对qt-x11安装环境进行配置,根据源码包配置选项和系统情况生成makefile文件,为make做准备。
3)配置完成以后,键入make命令,从makefile中读取指令进行编译,用来创建库文件,编译例程和指南,需要等待一段比较长的时间。
4)编译完成之后,进入tools目录下的qvfb目录,键入make对其进行编译。最后回到qt-x11目录,键入make install进行安装。
5)make install完成之后,会在/usr/local目录下生成一个Trolltech目录,这就是qt-x11-opensource-src-4.5.3安装后所在目录。将/usr/local/qt/qt-x11-opensource-src-4.5.3/tools/qvfb目录下的qvfb相关文件拷贝到/usr/local/Trolltech/Qt-4.5.3/bin目录下。至此X11环境就搭建好了。
3.2 交叉编译环境实现
通过qt-x11提供的库和开发工具,可以进行Qt应用程序的开发,但是若需要在目标板上运行该程序,则还需使用qt-embedded库对该程序进行交叉编译,才能得到在ARM平台上运行的可执行程序。这就需要搭建qt-embedded交叉编译环境,其实现过程如下:
1)安装交叉编译器。工具包目录中键入tar xvzf arm-linux-gcc-3.4.1.tgz-C/,执行该命令将arm-linuxgcc安装到/usr/local/arm/3.4.1。然后设置路径变量,修改/etc/profile文件,在最后一行添加export PATH=/usr/local/arm/3.4.1/bin:$PATH。
2)进入qt-embedded目录,键入./configure-embe-dded arm-xplatform qws/linux-arm-g++-depths 4,8,16,32,配置参数指定ARM平台,并支持4,8,16,32位的显示颜色深度。
3)使用make命令进行编译,用来生成qt-embedded库。
4)使用make install进行安装。完成后,qt-embedded被安装在/usr/local/Trolltech/Qt Embedded-4.5.3目录下。
3.3 移植Qt/Embedded到S3C2440
Qt/Embedded应用程序在S3C2440平台上的运行需要有qt-embedded库支持。在开发板的根目录下新建如下目录:
/usr/local/Trolltech/Qt Embedded-4.5.3/bin//安装运行库文件
/usr/local/Trolltech/Qt Embedded-4.5.3/lib/fonts//安装字体库文件
把PC上对应目录下交叉编译后生成的qtembedded库文件和字体文件,分别拷贝到上述目录中。注意,运行库文件一般只拷贝lib Qt Gui.so.4,libts-0.0.so.0,lib Qt Core.so.4,lib Qt Network.so.4,如果文件是到共享库的链接文件,则把该共享库也要拷贝上,字体库则需拷贝一种就可以了。设置开发板环境变量:
4 Qt/Embedded应用程序开发实例
Qt是一个创建GUI程序的C++类库,编写Qt应用程序的主要工作是基于已有的Qt类去编写用户类。笔者以发布一个图片浏览工具(Img Viewer)为例,简单地介绍Qt/Embedded应用程序的开发过程。
4.1 Qt/Embedded开发工具
强大的工具支持是进行Qt/Embedded图形用户开发的优势所在。除了前面提到的QVFB和UIC工具外,Qt designer(图形设计器)工具为GUI窗口组建,提供了一种可视化的设计能力,非常方便高效;qmake工具能为不同平台的开发项目创建makefile配置文件;编程助手assistant能随时随地给编程带来帮助。
笔者采用Qdevelop4.4.3来编写Qte程序。Qdevelop是一个跨平台集成开发环境,完全致力于Qt4的开发。
4.2 Qt/Embedded程序文件编写
Qt/Embedded源程序一般应该包含以下文件:1个主程序文件(main.cpp)、多个源程序文件(source.cpp)与对应的头文件(source.h)以及用来生成makefile的项目文件(.pro)。在本次开发中,并没有使用Qt designer来进行可视化窗口设计,完全借助Qdevelop纯代码进行编写,这样能更好地体会Qt/Embedded GUI设计的精髓所在。基本操作步骤如下:
1)编写头文件imgviewer.h。
在Qdevelop中新建工程imgviewer.pro,并添加头文件imgviewer.h。头文件定义了实例中需要用到的各种窗体控件,包括菜单(QMenu)、工具条(QtoolBar)、动作(Qaction)以及各种操作的槽函数(slots)。
2)编写源文件imgviewer.cpp。
源文件中设置了字体,规定了窗口属性,并且创建了动作、菜单和工具条等一系列的实现函数。这里会接触到Qt最重要的特性:信号与槽机制(signal&slot)。信号与槽机制提供了任意两个Qt对象之间的通信机制,信号会在某个特定情况或动作下被触发,槽是用于接收并处理信号的函数。其常用格式为bool QObject::connect(Object1,SIGNAL(signal1),Object2,SLOT(slot)),以及与这个函数对应的disconnect函数,可以将信号和槽断开连接。下面介绍一段简单的程序,该程序设置了打开单个文件这一动作:
open File Action=new QAction(QIcon(":/images/open-file.png"),tr("Open"),this);//创建一个Open动作,并调用openfile.png图标,图标位于资源库images文件夹下。
open File Action->set Status Tip(tr("Open File"));//设置该图标的状态提示为"Open File"。
connect(open File-Action,SIGNAL(triggered()),this,SLOT(slot Open File()));//连接信号与槽,触发open File Action这一动作时,将进行slot Open File()这一过程的处理。
3)编写主函数main.cpp。
Qt/Embedded应用程序应该包含一个主函数,该函数是应用程序的入口点。结合imgviewer.h和imgviewer.cpp,可以看到所有应用程序开发主函数main.cpp编写的框架结构:
//QApplication包含了Qt图形化应用程序的各种资源、基本设置、控制流以及事件处理等。若是Qt的非图形化应用程序,则需包含
4)生成makefile文件及编译链接生成可执行文件。
借助qmake工具可以生成makefile文件,实现过程为:qmake-o Makefile imgviewer.pro。然后在命令行下输入make命令对整个工程进行编译,就能生成X86架构的二进制文件,这便是QVFB能执行的应用程序。如果再用Qt/Embedded的库对整个工程进行交叉编译链接,就能得到在S3C2440平台上运行的可执行文件。
4.3 结果发布及测试
将交叉编译好的可执行程序imgviewer拷贝进开发板/usr/local/Trolltech/Qt Embedded-4.5.3/bin目录下,在终端下键入./imgviewer,即可运行程序。运行结果见图3。
5 小结
嵌入式技术的关键在于人机交互技术的体现,基于Qt/Embedded的GUI为嵌入式Linux系统用户提供了良好的使用和交互环境。笔者通过一个简单的应用程序,对Qt/Embedded在S3C2440平台下的移植与开发进行了详细介绍,为类似的GUI程序开发提供了一个参考。
参考文献
[1]AHN S H,SUL D M,CHOI S C,et al.Implementation of lightweight graphic library builder for embedded system[C]//Proc.The8th International Conference on Advanced Communication Technology.Phoenix,USA:IEEE Press,2006:166-168.
[2]Trolltech.Online reference documentation[EB/OL].[2010-05-05].http://doc.trolltech.com/.
[3]梅宽勤.基于Qt/Embedded的图像用户界面移植[D].上海:复旦大学,2007.
[4]赵拯宇,张雪英,金刚.Qt/Embedded和Qtopia在OMAP5912平台上的移植及应用[J].仪器仪表用户,2009,16(2):108-110.
[5]孙琼.嵌入式Linux应用程序开发详解[M].北京:人民邮电出版社,2006.
[6]成洁,卢紫.Linux窗口程序设计[M].北京:清华大学出版社,2008.
[7]BLANCHETTE J,SUMMERFIELD M.C++GUI Qt4编程[M].2版.闫锋欣,曾泉人,张志强,译.北京:电子工业出版社,2008.
S3C2440平台论文 篇2
1 开发平台搭建
1.1 硬件平台构建
本系统选用的mini2440开发板是目前国内性价比较高的一款ARM板,该板采用的是Samsung S3C2440处理器,并采用了专业稳定的CPU内核电源芯片和复位芯片来确保系统的稳定性。系统结构图如图1所示:
1.2 交叉编译环境的建立
基于Linux操作系统搭建的开发环境一般由目标系统硬件和宿主机所构成[2]。由于大多数嵌入式目标系统硬件不能为编译过程提供足够的资源,只好将编译工作转移到PC机中进行即交叉编译。本文使用的交叉编译器为arm-linux-gcc3.4.1,安装过程如下:
1)解压缩:#tar jxvf/usr/src/arm-linux-gcc-3.4.1.tar.bz2
2)将文件移到/usr/local/arm目录下:#mv/root/usr/local/arm/3.4.1/usr/local/arm
3)配置路径:#export PATH=/usr/local/arm/3.4.1/bin/:$PATH
1.3 引导程序Bootloader移植
嵌入式Linux系统软件平台一般是由系统引导程序、内核和根文件系统构成[3]。引导加载程序是在内核运行之前运行的一段程序,用来完成硬件设备的初始化和内存空间映射图的建立,以便为最终调用操作系统内核做好准备。
本文采用光盘自带的vivi源代码包,将其复制到文件夹目录并执行解压缩操作,进入vivi源代码目录,依次执行:
#make menuconfig
#make
生成vivi文件,然后把vivi烧写到目标板中运行。
1.4 Linux内核移植
Linux内核主要由内存管理、进程调度、虚拟文件系统、网络接口、进程间通信五个子系统构成。一般情况下嵌入式系统的所有数据必须存储在Flash存储设备中[4]。获取目标板移植的内核,并根据ARM体系结构编译该内核,操作步骤如下:
1)解压内核压缩包;
2)通过如下命令编辑内核根目录下的Makefile文件,修改交叉编译器:
ARCH=arm
CROSS COMPILE=arm-Linux-
3)调出编译菜单并配置参数:#make menuconfig
4)生成依赖关系:#make dep
5)清除旧的内核目标文件:make clean
6)编译内核:make z Image
7)如果选择了模块,则必须编译模块:make modules
在内核文件的/arch/arm/boot目录下会生成z Image文件,之后将其烧写到ARM板上。
1.5 构建yaffs根文件系统
YAFFS是专门为Flash设计的嵌入式文件系统,运行速度快、占用内存少,并且具有较好的移植性。为了保证PC机上调试的程序在开发板上也能正常运行,断电后亦能保存,需要将程序和模块添加到根文件系统中,然后整体移植到开发板将其固化。一个嵌入式Linux文件系统必须包括基本目录、设备节点、内核模块、内核镜像、链接库、系统和用户应用程序等[5]。使用mkyaffsimage工具制作yaffs文件系统映像,具体操作如下:
1)将mkyaffsimage.tgz文件拷贝到某一个目录文件夹,然后执行命令:
#tar xvzf mkyaffsimage.tgz-C/usr/sbin
2)拷贝root_default.tgz文件到目录文件下并执行解压缩命令:
#tar xvzf root_default.tgz-C/usr/src/filesystem
3)将制作的应用程序或其他文件拷进文件系统
4)使用mkyaffsimage制作yaffs文件系统映象:
mkyaffsimage root_default yaffs_root.img
将yaffs_root.img烧写到对应分区中,重启ARM板即可。
2 USB设备驱动的实现
运行Linux,即启用了内存管理单元,系统不能直接对物理地址进行访问,若要对某一外部设备进行读写,需通过系统内核调用该设备的驱动来实现。该系统采用专用于嵌入式Linux的spca5xx驱动,将其作为驱动模块,添加到内核中后重新烧入开发板即可使用。
将USB摄像头连接到PC机上,出现如图2所示信息,即表明加载spca5xx成功。
3 视频采集的实现
在Linux系统中Video for Linux内核驱动为视频应用程序提供了一系列API接口函数,通过这些函数可以执行摄像头打开、读写、关闭等基本操作。视频采集的流程如图3所示:
打开视频设备文件/dev/video0,通过open()函数打开摄像头,调用ioctl(fd,VIDIOCGPICT,&capability)函数获取摄像头的相关参数,填充在video_capablity结构体中,利用ioctl(fd,VIDIOCGPICT,&picture)获得图像的亮度、灰度、颜色等相关信息,并填充在结构体video_picture中,可根据需求将需要设置的值赋给相应的结构体来重新定义参数。在图像获取中该系统选用的是mmap()内存映射方式来实现各进程共享内存。普通文件被映射到进程地址空间之后,进程不必再调用read(),write()等操作,而可以像访问普通内存一样对文件进行访问,因而提高了读取效率。使用该方式获取图像,需要先设置图像帧的缓冲区结构struct video_mmap,然后调用ioctl(fd,VIDIOCMCAPTURE,&grab_buf)开启采集命令。利用ioctl(fd,VIDIOCSYNC,&frame)等待采集完成,将捕获到的图像将放在映射的内存区域内,读取该内存数据即可获得图像数据,完成采集后调用close(fd)函数关闭设备文件停止采集。
4 系统的测试与结果
执行“#./caiji”指令,通过摄像头完成采集图像指令,获得图像1.jpg。由于1.jpg图片在开发板内,需要使用get指令将其取出在PC机上浏览。如图4、图5所示:
系统所采集的图像如下图:
5 结束语
基于嵌入式Linux系统的图像采集系统是为适应当前嵌入式技术发展和实际市场需求而进行研究的,它能够方便的实现图像的采集与显示。本文在ARM+Linux开发平台下完成了基于S3C2440的视频图像采集系统,经过大量实验验证了系统的准确性和稳定性,该系统可广泛应用于视频监控、自动控制、人工智能等各个领域,具有广阔应用前景。
参考文献
[1]邓漫龄.ARM嵌入式Linux系统的研究与实现[D].北京:北京邮电大学硕士论文,2009.
[2]戴丽,张维勇,刘征宇,钱军.嵌入式无线视频监控系统的设计与实现[J].合肥工业大学学报,2008,31(1):4-9.
[3]Rajesh K,Sridharan K,Srinivasan K.The design and development of a web-based data acquisition system[J].IEEE Instruction and Measurement,2002,51(3):425-433.
[4]刘伟华,刘仁学.基于S3C2440与Linux的A R M9嵌入式系统的构建[J].冶金自动化,2008(2):407-413.
S3C2440平台论文 篇3
Bootloader (引导加载程序) 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序, 我们可以初始化硬件设备、建立内存空间的映射图, 从而将系统的软硬件环境带到一个合适的状态, 以便为最终调用操作系统内核准备好正确的环境[2]。嵌入式系统中的Bootloader是嵌入式系统开发的难点之一, 同时是系统运行的一个前提条件, 没有这段和硬件紧密相关的代码, 多么精悍的内核也不能发挥作用[3]。Bootloader是严重地依赖于硬件而实现的, 特别是在嵌入式系统中, 不同体系结构的处理器需要不同的 Bootloader , 即使是基于同一种处理器构建的不同开发板 , 通常也需要进行 Bootloader 移植工作。因此, 在嵌入式系统中建立一个通用的Bootloader几乎是不可能的, 所以本文是实现针对以S3C2440微处理器为核心的特定目标板的Bootloader的开发。
Bootloader的启动流程一般分为两个阶段stage1和stage2:
Bootloader的stage1通常包括以下步骤:
1) 硬件设备初始化。
2) 为加载Bootloader的stage2准备RAM 空间。
3) 拷贝Bootloader的 stage2 到 RAM 空间中。
4) 设置好堆栈。
5) 跳转到 stage2 的 C 入口点。
Bootloader的 stage2 通常包括以下步骤:
1) 初始化本阶段要使用到的硬件设备。
2) 检测系统内存映射 (memory map) 。
3) 将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中。
4) 为内核设置启动参数。
5) 调用内核[1]。
2 U-boot及其启动流程
U-Boot (Universal Bootloader) , 是德国DENX小组开发的嵌入式CPU的Bootloader引导程序, 是遵循GPL条款的开放源码项目。它是在PPC-Boot的基础上进化而来的。它支持多种嵌入式操作系统内核, 支持多个处理器系列, 具有较高的可靠性、稳定性和丰富的设备驱动源码。
U-boot的启动流程也分为stage1和stage2两个阶段, 主要体现在cpu/arm920t/start.S、lib_arm/board.c和common/main.c这三个文件上。
U-boot代码区 (TEXT_BASE=0x33F80000) 定义在board/smdk2440/config.mk文件中。
(1) stage1
U-boot的stage1一般通过start.S来实现, 它是用汇编语言写成的。由于一个可执行的Image必须有一个入口点, 并且只能有一个全局入口, 通常这个入口放在ROM (Flash) 的0x0地址, 因此, 必须通知编译器以使其知道这个入口, 该工作可通过修改连接器脚本文件u-boot.lds来完成, u-boot.lds文件用来设置U-boot中各个目标文件的连接地址, 通过ENTRY (_start) 指定汇编程序入口点, 从而进入汇编程序start.S。
start.S开始的一段代码是处理器的异常处理向量表, 接下来系统复位。
Stage1的流程图如图1所示:
(2) stage2
Board.c文件中的start_armboot函数是C代码部分开始的函数, 该函数首先通过初始函数表完成一系列系统的初始化操作, 包括以下内容:CPU的基本设置, 开发板的基本初始化 , 初始化中断, 初始化环境变量, 初始化波特率, 串口通讯初始化, 控制台初始化第一阶段, 通知代码已经运行到该处, 配制可用的内存区。Stage2有流程图如图2所示:
完成上述初始化后, 进入的命令了循环, 通过一个for循环实现, for循环中调用main.c文件中的main_loop函数[4,5]。
U-boot是自由的软件, 其源代码开放, 其源代码可以从其项目主页上免费获得。本文采用的版本为u-boot-1.1.6
3 目标板Bootloader的设计与实现
U-boot支持很多种目标系统板的类型, 为了减少移植开发的工作量, 可以选择一种和目标开发板相近的类型对其进行修改。
3.1 硬件平台
3.2 建立对目标板board的支持
在board目录下的新建smdk2440文件夹, 并将smdk2410目录下文件复制到smdk2440目录下, 将smdk2410.c重命名为smdk2440.c, 主要修改的文件包括lowlevel_init.S、flash.c、smdk2410.c、Makefile文件。
lowlevel_init.S文件是内存区的配置情况, 参照芯片手册[6]第五章修改宏REFCNT为0x4f4
/*period=7.8125us, HCLK=100Mhz, (2048+1-7.8125*100) */
smdk2440.c文件主要是GPIO和PLL的配置, 通过修改宏M_MDIV、M_PDIV、M_SDIV和U_M_MDIV、U_M_PDIV、U_M_SDIV的值, 修改CLKDIVN, MPLLCON, UPLLCON寄存器, 相应的值为如下。
CLKDIVN寄存器值为
0x05 /* FCLK:HCLK:PCLK = 1:4:8 */;
MPLLCON寄存器值为
(0x7f<<12) | (0x02<<4) | (0x01)
/* (M_MDIV << 12) + (M_PDIV << 4) + M_SDIV*/
UPLLCON寄存器值为
(0x38<<12) | (0x02<<4) | (0x02)
/* (U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV*/
Makefile文件增加对smdk2440.c的依赖关系
COBJS:= smdk2440.o flash.o
3.3 CPU/Arm920t目录下CPU相关代码修改
在start.S文件中设置CLKDIVN寄存器:
ldrr0, =CLKDIVN
movr1, #5 /*FCLK:HCLK:PCLK = 1:4:8*/
strr1, [r0]
参照芯片手册第七章修改s3c24x0子目录下speed.c文件中, 将get_PLLCLK函数的返回值改为
return ( (CONFIG_SYS_CLK_FREQ * m * 2) / (p << s) ) ;
修改get_HCLK函数的返回值, 增加的代码如下:
unsigned long clkdiv;
unsigned long camdiv;
int hdiv = 1;
clkdiv = clk_power->CLKDIVN;
camdiv = clk_power->CAMDIVN;
switch (clkdiv & 0x6) {
case 0: hdiv = 1;
break;
case 2: hdiv = 2;
break;
case 4: hdiv = (camdiv & 0x100) 8 : 4;
break;
case 6: hdiv = (camdiv & 0x200) 6 : 3;
break;}
return get_FCLK () / hdiv;
get_PCLK函数的返回值可参照get_HCLK函数做相应的修改。
3.4 相关头文件
修改include目录下的s3c2410.h、s3c24x0.h、复制include/configs目录下的smdk2410.h, 并重命名为smdk2440.h。由于本开发板采用的是网卡是DM9000, 所以需要将CS8900的部分改为以下所示:
#define CONFIG_DRIVER_DM9000 1
#define CONFIG_DM9000_BASE0x20000300
#define DM9000_IO CONFIG_DM9000_BASE
#define DM9000_DATA
(CONFIG_DM9000_BASE + 4)
#define CONFIG_DM9000_USE_16BIT
修改如下宏:
网卡Mac地址 (CONFIG_ETHADDR) ,
IP地址 (CONFIG_IPADDR) ,
宿主机IP地址 (CONFIG_SERVERIP) ,
更改u-boot起动后的提示符,
#define CFG_PROMPT" SMDK 2440 # "
在s3c2410.h文件中增加函数:
static inline S3C2440_NAND * const
S3C2440_GetBase_NAND (void)
{
return (S3C2440_NAND * const)
S3C2410_NAND_BASE;
}
参见S3C2440芯片手册[6]第六章内容在s3c24x0.h中增加一个S3C2440_NAND结构体。
3.5 Makefile文件
修改根本录下的Makefile文件, 为目标板smdk2440增加编译项
smdk2440_config: unconfig
@$ (MKCONFIG) $ (@:_config=) arm arm920t
smdk2440 NULL s3c24x0
其中各项的意思为:
arm : CPU的架构 (ARCH)
arm920t :CPU的类型 (CPU)
smdk2440 : 开发板的型号 (BOARD)
NULL :开发者 (vender)
s3c24x0 : 片上系统 (SOC)
3.6 目标文件的生成及测试
当对源代码修改完毕后, 进入U-boot目录下输入:
make smdk2440_config
make
之后会生成五个文件:u-boot、u-boot.bin、u-boot.srec、u-boot.map、System.map。通过JTAG将二进制文件u-boot.bin烧入Flash中即可, 拔掉J TAG接头并复位目标板, 超级终端输出如下信息:
U-Boot 1.1.6 (Nov 23 2007 - 15:04:32)
U-Boot Code : 33F80000 - >33F710800
BSS - >33FA2850
RAM Configuration:
Bank #0 :30000000 64MB
Flash : 2MBIn : serialOut : serial
Err : serial
SMDK2440#:
4 结束语
至此, U-boot移植到目标板的工作就已完成, 并且能稳定的运行在目标板上。对于嵌入式应用, 一个高效且可定制的Bootloader会使后续开发工作, 加载Linux内核和文件系统达到事半功倍的效果。
摘要:Bootloader (引导加载程序) 是嵌入式系统开发的一个重要环节, 它把操作系统和硬件平台衔接起来, 对嵌入式系统的后继软件开发十分重要。U-boot是一个功能十分强大的Bootloader, 本文深入研究了U-boot的运行原理, 在基于以三星公司S3C2440微处理器为核心的开发板为背景, 分析、探讨并且实现了基于U-boot的系统引导加载程序的构建。
关键词:嵌入式系统,Bootloader,S3C2440,u-boot
参考文献
[1]詹荣开.嵌入式系统Boot Loader技术内幕http://www.ibm.com/developerworks/cn/linux/l-btloader/index.html 2003.12.01
[2]孙琼.嵌入式Linux应用程序开发详解[M].北京:人民邮电出版社, 2006.
[3]孙天泽, 袁文菊, 张海峰.嵌入式设计及Linux驱动开发指南[M].北京:电子工业出版社, 2006.
[4]陈华锋, 吕杨.U-boot在S3CEV40上的移植分析与实现[J].计算机与数字工程, 2007, 3 (8) .
S3C2440平台论文 篇4
Bootloader的开发是嵌入式系统开发必不可少的环节[1], 一个好的Bootloader不仅可以给项目的后续开发工作带来很大便利, 而且在项目开发结束后对用户使用产品也提供了很多方便。但是, 由于嵌入式的硬件是无标准、非规范的[2], Bootloader的功能又是直接与微处理系统相关的[3], 所以给开发人员的工作带来了许多不便。在实际的项目开发中, 一般都需要对特定的硬件系统进行Bootloader的设计, 可是从头开发一套系统的Bootloader是非常复杂并且耗时的[4], 针对这一难点, 微软公司推出的面向嵌入式应用领域的操作系统Windows CE体现了非常大的优势, Windows CE具有强大的操作系统功能、稳定可靠的性能、高度的模块化、可定制性、与桌面Windows平台一致的开发特性[5]。它最大的优势是具有高度的模块化, 可以提供与硬件无关的软件框架, 把与硬件无关但是又代表普遍通用性的内容抽取出来, 形成标准函数库[6]。而与硬件相关的不具有通用意义的BootLoader代码则由开发人员具体负债开发, 这样就给开发人员带来了相当大便利, 并且开发出的Bootloader因是严格按照微软提供的模板开发, 所以又有很好兼容性且效率高[7]。
由于Bootloader的实现依赖于 CPU 的体系结构, 因此从固态存储设备上启动的BootLoader大多都是两个阶段的启动过程[8]。本文以飞凌嵌入式公司的产品TE2440为例, 详细分析Windows CE BootLoader开发的两个阶段过程。TE2440的微处理器采用三星公司的S3C2440A, 主频400 MHz, 内置64 MB SDRAM 和64 MB NANDFLASH, 10 M网口, 采用CS8900Q3。S3C2440支持2种启动模式:一种是从NandFlash启动;另一种是从NorFlash启动, TE2440支持从NandFlash启动。
1Bootloader的第一阶段分析
为了防止给后来的调试工作带来更多的麻烦, 要尽量使第一阶段做尽可能少的工作, 只要使CPU正常工作起来即可, 然后把大量复杂的初始化工作留给第二阶段来做[9]。第一阶段是在ADS (ARM Developer Suite) 环境下开发的。S3C2440 系统引导加载程序包括2440init.s、2440lib.s 函数库、2440lib.c 函数库、mmu.c、dma.c 函数库等几个主要的文件。因为与硬件密切相关, 所以通常采用汇编语言编写, 本文主要分析s3c2440系统在加电后的硬件设置处理过程, 即2440init.s文件中的程序执行过程。
第一阶段主要包括如下步骤:
(1) 进入启动程序的入口地址, 禁止看门狗、屏蔽所有中断。因为为中断提供服务通常是操作系统设备驱动程序的责任, 所以在 Bootloader 的执行全过程中可以不必响应任何中断。中断屏蔽可以通过写CPU的中断屏蔽寄存器或状态寄存器来完成。
(2) 设置CPU的速度和时钟频率
根据工作频率设置时钟、PLL, 2440 内部3个时钟:FCLK、HCLK、PCLK, 分别供CPU、AHB 总线和APB 总线使用, 一般都选择周期比为1∶2∶8 的设置。
(3) 初始化基本硬件和存储器系统
(4) 设置堆栈并跳转至第二阶段的入口。将FLASH中的代码段、数据段拷贝到RAM中, 将初始化数据段, 跳入C 语言的main函数执行, 结束Bootloader 初步引导;Bi的主要功能是引导和加载操作系统, 不会用到很多种类型及数量的外设, 如果在BL中启用中断反而会使对问题的处理复杂化。
2Bootloader的第二阶段分析
第一阶段结束之后, 函数跳转到由C语言写的main ( ) 函数, 也就是Bootloader开发的第二阶段EBoot, 该阶段的开发环境是Platform Builder, 简称PB, 它是微软提供给开发人员进行基于Windows CE平台下嵌入式操作系统定制的集成开发环境。main ( ) 函数实现代码为:
该函数主要功能就是调用BootloaderMain ( ) 函数, 其实main函数不是必须的, 实际上程序也可以直接跳转到BootloaderMain ( ) 函数, 在第一阶段的汇编代码后加入main ( ) 函数可以更好地提高程序的性能。本文主要分析BootloaderMain ( ) 调用的一些关键的函数, 函数调用关系如图1所示。
最早被BootLaderMain ( ) 调用的OEM函数是OEMDebugInit ( ) , 它负责初始化BootLoader的调试功能串口, 在它被调用运行之后BootLoader的代码才可以调用它的调试输出功能函数。OEMDebugInit ( ) 调用OEMInitDebugSerial ( ) 来初始化调试串口。
OEMPlatformInit ( ) 函数是BootLoader的最重要的OEM函数, 所有与BootLoader所需硬件功能有关的目标平台板级外设如以太网接口、Flash存储器等都在这里进行初始化, 包括嵌入式CPU芯片内置的外设。它结束后就开始下载工作了。函数代码如下:
OEMPreDownload ( ) :所有在硬件初始化完成以后、开始下载操作系统镜像之前所需要处理的任务都可以放在该函数完成。它主要任务是以太网下载前的准备工作。DownloadImage ( ) 的任务是从远程开发机上下载操作系统镜像到RAM。它通过调用OEMReadData ( ) 从下载端口读取操作系统镜像的数据, 在本文的EBoot中, 该函数主要负责从以太网端口读取操作系统镜像数据;它还调用OEMShowProgress ( ) 函数用来向用户显示BootLoader下载操作系统镜像时的下载状态。OEMMapMemAddr ( ) 函数用于当下载得到的操作系统镜像自身所记录的目的地址是Flash存储设备时该OEM函数要负债将镜像的数据以重定位的方式暂存到RAM内存缓冲区中。
OEMLaunch ( ) 是最后一个被BootLaderMain ( ) 函数调用的。它的主要功能是实现目标嵌入式系统程序执行流跳转。无论BootLoader是通过以太网端口下载操作系统镜像还是从本地读取操作系统镜像到内存, 都要依靠该函数将程序的执行流从BootLoader转移到Windows CE的操作系统。DownloadImage ( ) 函数下载的操作系统镜像是暂存在RAM中的, 所以我们还需要在OEMLaunch ( ) 函数指令执行跳转之前保存下载所得的操作系统镜像以及用户配置数据到Flash, 以便系统从新启动或者复位时可以直接从本地存储读取镜像数据。
3配置文件
Bootloader源代码编译后会产生一个名为eboot.exe的可执行文件, 但写入Flash的Bootloader是一个二进制的映像文件, 也就是.bin文件或.nb0文件, 所以需要把eboot.exe文件转换成.bin文件或.nb0文件。
(1) 在%_WINCEROOT%Platform<Hardware Platform Name>SrcBootloaderEboot文件夹下创建一个名为eboot.bib的文件。
(2) 添加如下配置信息到eboot.bib文件中。
(3) 在%_WINCEROOT%<PlatformHardware Platform Name>SrcBootloaderEboot文件下创建一个名为makefile.inc的文件
(4) 添加代码到makefile.inc文件
(5) 在SOURCES文件的最后添加代码:
4烧写Bootloader
配置好了之后, 在PC机中编译产生了Eboot.bin 文件, 把Bootloader 烧写到目标机中。利用三星公司的sjf2440工具烧写, 使用JTAG 实现下载。BootLoader下载后再通过以太网口把操作系统内核镜像文件下载到目标机中。下载镜像所使用的软件是DNW, DNW是三星公司为S3C2440芯片配置的一款专用软件, 它可以在Windows下通过USB方式烧写Flash。如图2所示, 内核镜像已下载到NandFlash中。
5结语
BootLoader的设计和实现是一个非常复杂并且重要的过程, 一个好的Bootloader可以给嵌入式产品的开发调试工作带来许多便利。本文从源代码入手详细分析了Wince Bootloader启动的两个阶段以及配置文件信息。实验达到了预期的效果, 为项目后续的开发奠定了良好的基础。
摘要:针对BootLoader严格依赖于具体的嵌入式硬件系统, 并且从头开发一套适合特定硬件系统的BootLoader又相当复杂这一问题, 分析设计了基于S3C2440的WinCE操作系统的引导程序的实现方法。结合飞凌公司的嵌入式产品TE2440的硬件特性, 对BootLoader启动的两个阶段和配置文件进行了详细的分析和设计, 最终实现了系统引导加载程序的构建, 为项目后续的开发奠定了良好的基础。
关键词:嵌入式系统,引导程序,WinCE,EBoot
参考文献
[1]张冬泉, 谭南林.Windows开发实例精粹[M].北京:电子工业出版社, 2008.
[2]周毓林, 宁扬, 陆贵强, 等.Windows CE.net内核定制及应用开发[M].北京:电子工业出版社, 2005.
[3]万永波, 张根宝, 田泽, 等.基于ARM的嵌入式系统Boot-loader的启动流程分析[J].微计算机信息, 2005, 11 (2) :91-93.
[4]何臻祥, 陈波.基于三S3C2440 Bootloader的研究[J].兵工自动化, 2008, 27 (6) :92-94.
[5]陈渝, 李明, 杨晔.源码开发的嵌入式系统软件分析与实践[M].北京:北京航空航天大学出版社, 2004.
[6]杜春雷.ARM体系结构与编程[M].北京:清华大学出版社, 2004.
[7]张飞, 白瑞林, 陆林.WinCE5.0 Bootloader的设计与实现[J].计算机工程, 2009 (7) :59-62.
[8]刘林真, 刘大茂.基于WinCE.NET的Bootloader的原理与启动分析[J].计算机与数字工程, 2008, 36 (10) :111-113.
[9]马学文, 朱名日, 程小辉.嵌入式系统中Bootloader的设计与实现[J].计算机工程, 2005, 31 (7) :96-98.
S3C2440平台论文 篇5
关键词:S3C2440,Linux,MiniGUI,送丝机
0 引言
送丝机是用于传送电弧焊丝的传动机构,是气体保护焊机系统的重要组成部分,其送丝的稳定性和可靠性直接关系到焊接的质量[1]。而随着焊接工作者对劳动条件改善的愿望、公司对生产率的追求,直接推动着焊接技术向自动化、网络化、人机界面友善化方向发展。而实现这一目标,对送丝机控制系统进行数字化、智能化的设计是必不可少的。显而易见,通过选择阻容值来设定送丝机的控制参数的模拟控制方式[2],是无法完成这一目标的。目前逆变技术、电子技术和计算机技术的发展为为这一目标的实现提供了十分有利的技术支持。本文以嵌入式芯片S3C2440为数字控制系统硬件核心,以Linux作为嵌入式操作系统,利用MiniGUI作为操作系统与界面应用软件的中间件,实现电弧焊机焊接送丝主控系统设计。
1 系统总体结构设计
气体保护焊机送丝机主要由送丝电动机、焊枪、送丝软管和调速控制电路四部分组成[3],其中调速控制部分是整个送丝机机构的核心,系统采用ARM芯片S3C2440作为硬件核心,利用Linux嵌入式操作系统作为软件开发平台,实现送丝机控制系统以下功能:
1)利用S3C2440片内10位A/D转换器、快速的CPU执行指令速度及其通用口,实现对焊接电流、电压数据的采集、处理和控制信号的输出。
2)利用S3C2440片内LCD控制器、触摸屏接口等,实现各种参数的输入和显示。
3)利用Linux完善和强大的网络功能,实现用户远程管理控制。
4)利用MiniGUI作为操作系统与应用软件的中间件,实现交互界面的软件设计。
2 系统硬件设计
送丝控制系统硬件部分主要由两部分组成:主控电路和驱动电路。其硬件框图如图1所示。
硬件框图虚线部分内部控制系统的核心电路,由于电焊机在工作时,会对电力线产生很强的电磁干扰,所以电力线必须通过外接电源模块进行降压滤波后,再产生芯片所需要的三种电压:3.3V、1.8V、1.25V,以供S3C2440使用,同时虚线内部核心电路必须罩在金属屏蔽罩内,以防工作环境中无线电磁干扰。
图1中触摸屏用于输入焊接电流、电压、焊丝直径、材质、保护气体等焊接参数;LCD用于实时显示焊接电流、电压、送丝速度值或波形;Nand Flash和SDRAM用于存储和运行程序;DM9000为网卡芯片,它可以自适应10/100M网络,通过它可实现电焊机的远程网络管理。系统通过电流和电压传感器,获得焊接电流和电压值,然后进行放大滤波,再送入S3C2440的A/D接口进行模数转换,实现数据采集,然后使用合理的算法对数据进行处理,分别得出控制送丝机电机和弧焊电源的有效PWM占空比,最后通过S3C2440口送出,一路经过光电隔离器和PWM驱动模块实现送丝机速度的自动控制,另一路将PWM信号叠加在直流电源线上送入弧焊电源控制模块,这样通过一条电线,弧焊电源控制模即可获得电源又可获得控制信号。S3C2440通过来自送丝机上的霍尔开关计数脉冲,实现送丝速度的运算。
3 系统软件设计
系统软件是建立在Linux操作系统软件平台上的,Linux内核是采用模块化设计的开源软件,因而易于裁剪,设备独立性强,更为可贵的是,Linux从一开始就为用户提供了强大网络功能。本系统所要设计的软件有两个方面,其一是基于Linux操作系统的设备驱动程序,如送丝控制驱动程序等,另一个是基于图形用户界面支持系统MinGUI用户界面程序,如输入参数界面、采集数值显示界面等。它们的关系可用图2表示。
3.1 驱动程序设计
设备驱动程序属于Linux内核的一部分,是一种用于处理和操作硬件控制器的软件[4],由于Linux操作系统的开源性,很多嵌入式开发板商提供了板级开源驱动代码,甚至正式加入Linux官方内核,如国内的友善之臂公司生产的2440开发板BSP,从Linux-2.6.31开始被加入官方内核,只要你所用处理器和硬件控制器与其相同或相似,就可以直接或通过适当修改就可使用其驱动程序,这样就大大提高了开发效率,减轻了开发难度。本系统所用网卡、LCD、触摸屏、Flash均采用与友善公司2440开发板相同型号的设备,所以直接使用其开源的驱动程序,它们在Linux2.6.32.2的位置如下:
1)DM9000网卡驱动
2)LCD驱动
3)触摸屏驱动
4)Nand Flash驱动
由于S3C2410和S3C2440的很多寄存器地址等地址和设置是完全相同的,所以LCD和触摸屏驱动可以使用标注为S3C2410的文件。
图(2)中报警驱动、焊枪开关及弧焊电源及送丝机控制驱动,是本控制系统特定的功能,必须自行设计。完成这些驱动程序的设计,实质是对file_operations(文件操作)结构体进行必要的成员函数填充,以及添加必要的中断。
报警驱动程序结构体file_operations比较简单,只用三个成员函数,可表示如下:
当温度、气体流量超限时,S3C2440将产生中断,激活中断服务程序对相应开关进行关启操作。
弧焊电源及送丝控制驱动程序的结构体定义如下:
成员函数adc_open用于设置S3C2440D A/D、PWM等相关寄存器、设置PID参数、系统时钟全局变量、并向操作系统注册A/D转换结束的中断服务程序adc_irqs()。时钟时钟全局变量用于向adc_read发信号,表示可以读取采集到的电压、电流数据,保证CPU没必要在每次采集中断时读取数据,以节约CPU时间资源的开销。
中断服务程序adc_irqs()任务主要是:如果焊枪开关没有闭合,则分别将控制送丝机电枢直流电机和弧焊电源的PWM输出占空比置为0,否则,分别采集电弧电压、电流以及直流电机的电压,然后调用相应的PID处理函数,得到当前的控制送丝机和弧焊电源PWM占空比,从而达到控制PWM输出的目的。
在本文设计中,将所有的信号处理都在中断处理程序中完成,也即在中断服务程序的上半部完成。为了进一步提高中断处理速度,达到实时性性目的,PID是用基于APCS标准的汇编语言编写的。
3.2 用户应用程序设计
人机交互界面直接或间接地展示了控制系统要完成的各种功能,从用户角度来讲,人机交互界面应当是一个易于理解的、有语义境的、不需要用更多的精力和时间就可掌握了的操作流程说明,所以界面程序的设计是系统设计的重要组成部分。
图形界面开发系统很多,根据本系统要求实时性高,存储资源有限特点,本系统采用了小巧的、基于Linux版本的Mini GUI作为图形交互界面程序的开发平台,其编程方法与VC++的API编程方法类似的。图(3)为送丝控制系统主界面布局效果图。
另一个重要的用户应用程序设计是对触摸屏的IAL输入引擎编写,MiniGUI自带的输入引擎是针对S3C2410的SMDK2410,由于S3C2440处理器与S3C2410处理器触摸屏接口结构一样,所以本设计根据本系统的要求,对SMDK2410稍作改写即可。为了实现触摸屏校准以及去除点击触摸屏时的抖动,改写中引用了tslib函数库。最后就是对MiniGUI.cfg配置文件的修改,使ial_engine=SMDK2410[5]。
4 结束语
经过测试,该嵌入式数字控制系统的设计比较合理,对电弧电压、电流以及送丝机的控制精度、稳定性、可靠性均可以满足实际需求,同时具有一定的网络通讯功能。此外,由于采用了界面支持系统MiniGUI,易于维护用户界面,可随时按照用户的要求对交互界面进行修改。当然系统在抗强干扰方面还需要进一步的改进和完善。
参考文献
[1]柯利涛,黄石生,彭海燕.基于ARM和uC/OSΠ数字控制送丝系统的研究[J].焊接设备与材料,2007,2.
[2]李峰,李亮玉,李香.国内全数字化焊机的研究现状[J].焊接技术,2006,8.
[3]潘年明.基于8051单片机的送丝机控制系统[J].电焊机,2008,3.
[4]丁明,范书瑞.ARM9嵌入式系统设计与开发教程[M].电子工业出版社,2006,4.
S3C2440平台论文 篇6
本文就是介绍基于linux系统的网卡底层驱动编写, 研究linux系统下DM9000EP网卡驱动的框架结构、存储器控制器的配置等技术。其中核心处理器采用三星公司开发的ARM9芯片———S3C2440AL。Linux系统采用2.6.22.6版本的内核。
1 网卡硬件结构原理与存储器控制器配置
存储器控制器集成于S3C2440AL中, S3C2440AL的存储器控制器提供访问外部存储器所需要的存储器控制信号[2], 微处理器S3C2440AL通过存储器控制器使外设与CPU之间交换数据, 它决定了数据发送的地址宽度, 数据宽度, 读写时序等。该控制器负责传输网络数据所必需的控制信号, 数据端口, 地址端口。存储器控制器与网卡连接方框图如图1所示。
该控制器包括总线宽度和等待控制寄存器 (BWSCON) 、BANK控制寄存器 (BANKCONn) 和刷新控制寄存器 (RE-FRESH) 。其中BANKCON有8个可编程寄存器, 用于配置网卡的读写时序, BWSCON用于设置网卡的数据宽度和等待状态。
1.1 硬件电路设计
本文中采用S3C2440AL与DM9000EP以太网控制器相连接, 实现网卡的数据传送功能。其中S3C2440A L是高性能嵌入式微处理器, 主频可达400 MHz, 具有外围接口丰富、体积小、功耗低等特点[3];DM9000EP芯片完全集成了以太网MAC控制器的基本功能, 它具有处理速度快, 成本低廉、设计简单等优点。
这里选用DM9000EP为以太网MAC控制器, 它提供了两种接口, 一种通用处理接口, 另一种是介质无关的接口。其中包含4个重要的控制信号IOR、IOW、INT和CS, 分别用于读、写、中断和片选的控制信号。S3C2440AL与DM9000EP硬件连接示意图如图2所示。
1.2 存储控制器配置
1.2.1 接口配置
针对以太网控制器, S3C2440AL的存储控制器能够产生相应的控制信号, 如:n OE (读) 、n WE (写) 、n GCS4 (片选) 、EINT7 (中断) 等。如果要对DM9000进行读写操作, 必须对DM9000正确寻址。根据实际设计电路, SA9和SA8接高电平, SA7-SA4为低电平, DM9000EP默认I/0基地址为300H, 而当CPU发出地址在0x2000_0000—0x2800_0000范围内时, DM9000片选打开[4]。并且S3C2440AL中7号中断与以太网卡的中断引脚相连接, 故EINT7为中断触发信号。
其接口配置关键代码如下:
1.2.2 网卡读写时序配置
由于存储器控制器本身可以支持很多外设, 而不同的外设芯片读写时序有所差异, 所以当硬件开发人员选定以太网控制器时, 就需要对存储器控制器的相关寄存器进行配置, 在S3C2440中, 通过对BWSCON和BANKCON4进行配置, 以实现处理器与控制器之间数据传输的匹配。本文中使用的是DM9000EP以太网控制器。
存储器控制器硬件参数配置关键代码如下所示:
/*设置S3C2440AL的内存控制器*/
bwscon=ioremap (0x48000000, 4) ;//总线宽度和等待控制寄存器
bankcon4=ioremap (0x48000014, 4) ;//Bank4控制寄存器地址映射
2 系统软件设计
在Linux系统中, 网络设备一般被抽象为一个统一接口。本文中主要对网卡驱动程序进行设计, 重点涉及到两个结构体, 网络设备接口net_device和套接字缓冲区sk_buff。net_device结构体负责表示网络设备在内核中的运行状态, sk_buff负责为Linux网络层提供缓冲区的相关处理以及流量控制等任务。
在网卡驱动设计中, 驱动程序需要对硬件进行配置, 具体配置过程这里不赘述, 这里主要叙述驱动如何实现数据包的发送与接收。
在net_device中, 比较重要的函数有open () 和hard_start_xmit () , 前者主要完成网卡中相关寄存器的初始化工作, 后者负责将来自协议层的数据发送出去, 本文中在dmfe_probe1 (struct net_device*dev) 函数中将net_device与驱动中的open函数、hard_start_xmit () 函数建立关联。
2.1 数据包发送函数
数据包发送过程就是将上层数据包发送到网卡发送缓冲区, 再设置发送控制器将发送缓冲区数据发送出去的过程。当用户发送数据帧时, DM9000EP被激活, net_device结构体中open () 函数被调用, 它负责向内核注册中断, 复位并初始化dm9000, 检查连接状态和媒介速度, 并调用netif_start_queue (struct net_device*dev) 使能传输[5]。然后通过调用net_device结构体中的hard_start_xmit () 函数把存放在sk_buff中的数据发送到网络物理设备中。hard_start_xmit () 函数处理流程是:首先对速度模式进行判断, 根据速度模式确定不同的数据包数量, 执行相应操作, 这里主要是为了避免网络拥塞。然后包计数, 关中断, 将skb数据长度发送到网卡相应的寄存器中, 传输数据到TX SRAM, 然后根据I/O传输模式, 程序将数据发送到I/O端口, 设置发送控制寄存器TCR, 数据被发送出去。最后释放sk_buff, 打开中断。
其关键代码如下:
2.2 数据包接收和中断处理函数
网卡数据包的接收可以采用轮询和中断两种处理模式, 文章中DM9000网络驱动程序采用中断方式, dmfe_interrupt () 中断处理流程是:判断读取中断状态寄存器, 通过检查硬件设备上的中断状态寄存器来判断是发送中断还是接受中断, 若为发送中断就调用dmfe_tx_done (0) ;若为接受中断就调用dmfe_packet_receive (dev) , 该函数通过dev_alloc_skb () 申请一块sk_buff的缓冲区;并构造skb, 然后通过netif_r (skb) 函数将skb提交到上层。值得注意的是中断函数必须事先在open () 函数中注册。其关键代码使用request_irq () 函数将中断号与中断函数建立关联, 并设置触发方式。具体代码这里不赘述。
3 实验验证
这里采用挂载NFS文件系统是否成功, 来判断网卡驱动程序是否编写正确, 建立NFS文件系统的步骤如下:
1) 实验环境为虚拟机, 主机, arm开发板三者通过路由器互联, 虚拟机上安装ubuntu 9.10编译环境。
2) 通过Cute FTP软件将驱动程序拖到Linux系统内核drivers/net目录中, 修改此目录下的makefile文件, 编译内核生成镜像文件, 烧写内核。
3) 设置IP地址。通过命令行方式, 在虚拟机上设置某个目录允许被NFS挂载。具体命令行如下:
通过以上三步网络文件系统挂载成功, 说明网卡驱动运行正常。
4 结束语
文中介绍了关于DM9000以太网控制器的配置过程, 深刻详述了存储器控制器与网卡芯片之间的关系, 网卡驱动程序与系统内核之间的关系, 并在实验中得到验证, 对以后的教学工作与科研工作有很大的借鉴意义。与此同时, 有关网卡驱动的分析还有很多不足之处, 以后会更加努力。
摘要:以Samsung公司的32位嵌入式微处理器S3C2440AL和以太网MAC控制器DM9000EP为例, 结合DM9000EP与S3C2440AL处理器的接口电路设计, 首先, 详细说明了基于S3C2440AL处理器的存储器控制器的功能和软件配置方法, 其次, 对Linux环境下网卡驱动进行分析, 最后给出驱动程序的验证方法, 测试效果良好。
关键词:S3C2440AL,DM9000EP,Linux,网卡驱动
参考文献
[1]徐功伟, 戴学丰, 刘树东, 等.嵌入式以太网控制器设计[J].通信技术, 2009, 42 (5) :183-184, 187.
[2]S3C2440A 32-Bit CMOS Microcontroller User's Manual, Revision 1, 2004.
[3]蔡理金, 王逢东, 王丽洁, 等.S3C2440A嵌入式手持终端电源管理系统设计[J].单片机与嵌入式系统应用, 2009 (9) :28-31.
[4]李剑雄, 张策, 杨军.基于ARM和DM9000的网卡接口设计与实现[J].微计算机信息, 2008, 52 (14) :123-124, 138.
S3C2440平台论文 篇7
1 微处理器S3C2440A
在基于S3C2440A平台的智能楼宇视频采集系统的硬件设计 (如图1) 中, 包括ARM9核心模块、视频采集模块、外设控制模块等主要部分。其中ARM9核心模块又是一款S3C2440A的微处理器, 是整个系统的控制核心, 其具有性能高、功耗低、体积小、多嵌入式操作系统支持的优点。此外, S3C2440A还具有外围接口多样化、自带标准摄像头接口控制单元 (CAMIF) 的特点, 该摄像头控制单元将会进行视频采集与视频输出方式的操作、定义目标窗口大小、比例分割尺度等视频采集配置的相关工作, 在于其他摄像头连接使用过程中不需要接口转换电路即可实现直接接入。微处理器S3C2440A主要负责控制各功能模块的工作, 是其他模块的总通信处, 通过总线与其实现连接, 同时数据采集、数据计算、指令处理、图像分析处理等任务都需要微处理器S3C2440A来负责。
2 OV9650摄像头模块
OV9650摄像头芯片是OV9650摄像头模块中的主要部件, 彩色CMOS SXGA技术是其技术支持, 这是一款低压的CMOS图像传感器。在OV9650摄像头芯片的一个极小区域中, 装封了单芯片SXGA (1280*1024) 摄像头和图像处理器, 该全功能的单芯片具有130万的高像素, 其数据输出格式多样, 如RGB565、Ycb Cr4:2:2、CCIR656等。此外, OV9650摄像头模块具备图像编辑功能, 如曝光控制、色调控制、白电平平衡、gamma校正、消除噪声等, 这些图像处理功能通过SCCB总线编程控制, 用户可以在SXGA辨别下以每秒15帧的速度处理与控制图像质量、格式与输出数据传送。
3 外设控制模块
USB主/从口、JTAG接口、LCD与触摸屏、电源与复位电路是外设控制模块中的主要组成部分。其中, 为扩展模块存储空间, 可通过USB接口来外接移动硬盘、U盘等, 还可外接鼠标来实现操作。在加载Bootloader程序、系统硬件调试操作中, 需要通过JTAG接口来实现;并通过LCD与触摸屏来达到人机互动的目的。1.3V-5V是微处理器输入电压的标准, 可通过外设电源电路来进行输电。当系统出现异常时, 复位电路发挥作用, 以重启的方式恢复系统工作。
4 SCCB传输协议
在SCCB传输协议中, 串行摄像头控制总线中的一种SCCB (由Omni Vision公司定制) 发挥主要功能, 由SCCB_E、SIO_C、SIO_D组成, 现今SCCB控制总线已广泛应用于OV公司的CMOS图像传感器中。SCCB是一种3线串行总线, 当处在简化芯片引脚及2线串行模式中, SCCB可将将芯片封装缩减为SIO_C和SIO_D的2根线, 同样可以让用户通过SCCB对芯片进行编程操作, 进而完成对摄像头输出图像的处理, 保证享有3线串行总线模式下的SCCB工作效率。
通过上述分析, 基于S3C2440数字视频采集系统的硬件设计能够有效实现对楼宇智能化监控视频信息的采集。通过OV9650摄像头模块来拍摄与提供高像素的图像信息, 并利用外设控制模块、SCCB传输协议、微处理器S3C2440A来实现视频图像信息的传输及处理, 最终通过SCCB串行总线与USB接口将采集到的视频数据直接送给微处理器S3C2440A, 以实现实时性、高质量的数字智能化楼宇视频信息采集。
摘要:视频采集技术的提出与应用是为了满足人们对视频监控系统的高需求, 基于S3C2440的数字视频采集系统设计具有高性能、低成本、高集成、灵活性等优势, 能够达到视频采集过程中的多方面要求。目前, 这种技术已经广泛应用于各大办公、商业等楼宇视频监控系统的视频采集实践中, 提供了高质量、高速度的智能化数字视频数据采集服务。在此, 本文将重点分析基于S3C2440视频采集系统的硬件设计, 以便更清楚了解智能楼宇视频采集硬件设计的原理。
关键词:S3C2440,智能楼宇,视频采集,硬件设计
参考文献
[1]刘洋, 潘青龙, 郝帅.基于S3C2440处理器的嵌入式视频采集系统[J].电子科技, 2011, 24 (7) :88-91.