基于S3C2440的U_Boot双启动实现
- 格式:pdf
- 大小:468.34 KB
- 文档页数:5
数字图像处理系统毕业论文基于ARM的嵌入式数字图像处理系统设计摘要简述了数字图像处理的应用以及一些基本原理。
使用S3C2440处理器芯片,linux内核来构建一个简易的嵌入式图像处理系统。
该系统使用u-boot作为启动引导程序来引导linux内核以及加载跟文件系统,其中linux内核与跟文件系统均采用菜单配置方式来进行相应配置。
应用界面使用QT制作,系统主要实现了一些简单的图像处理功能,比如灰度话、增强、边缘检测等。
整个程序是基于C++编写的,因此有些图像变换的算法可能并不是最优化的,但基本可以满足要求。
在此基础上还会对系统进行不断地完善。
关键词:linnux 嵌入式图像处理边缘检测AbstractThis paper expounds the application of digital image processing and some basic principles. The use of S3C2440 processor chip, the Linux kernel to construct a simple embedded image processing system. The system uses u-boot as the bootloader to boot the Linux kernel and loaded with file system, Linux kernel and file system are used to menu configuration to make corresponding configuration. The application interface is made using QT, system is mainly to achieve some simple image processing functions, such as gray, enhancement, edge detection. The whole procedure is prepared based on the C++, so some image transform algorithm may not be optimal, but it can meet the basic requirements. On this basis, but also on the system constantly improve.Keywords:linux embedded system image processing edge detection目录第一章绪论 (1)1.1 数字图像处理概述 (1)1.2 数字图像处理现状分析 (5)1.3 本文章节简介 (8)第二章图像处理理论 (8)2.1 图像信息的基本知识 (8)2.1.1 视觉研究与图像处理的关系 (8)2.1.2 图像数字化 (10)2.1.3 图像的噪声分析 (10)2.1.4 图像质量评价 (11)2.1.5 彩色图像基本知识 (11)2.2 图像变换 (12)2.2.1 离散傅里叶变换 (13)2.2.2 离散沃尔什-哈达玛变换(DWT-DHT) (20)2.2.3 离散余弦变换(DCT) (21)2.2.4 离散图像变换的一般表达式 (23)2.3 图像压缩编码 (24)2.3.1 图像编码的基本概念 (24)2.4 图像增强和复原 (24)2.4.1 灰度变换 (24)2.4.2 图像的同态增晰 (26)2.4.3 图像的锐化 (27)2.5 图像分割 (27)2.5.1 简单边缘检测算子 (27)2.6 图像描述和图像识别 (28)第三章需求分析 (28)3.1 系统需求分析 (28)3.2 可行性分析 (28)3.3 系统功能分析 (29)第四章概要设计 (29)4.1 图像采集 (30)4.2 图像存储 (30)4.3 图像处理(image processing) (31)4.4 图像显示 (31)4.5 网络通讯 (32)第五章详细设计 (32)5.1 Linux嵌入式系统的构建 (32)5.1.1 启动引导程序的移植 (32)5.1.2 Linux内核移植 (33)5.1.3 根文件系统的移植 (33)5.2 图像处理功能的实现 (33)5.2.1 彩色图像的灰度化 (34)5.2.2 灰度图的直方图均衡化增强 (34)5.2.3 图像二值化 (35)5.2.4 边缘检测 (35)第六章调试与维护 (36)附录 A (36)参考文献 (43)致谢 (44)第一章绪论1.1 数字图像处理概述数字图像处理(Digital Image Processing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。
mini2440使用uboot(详细)文章出处:/swgshj/archive/2010/04/20/5502121.aspx文章写于2010.4.17,总结了友善之臂的mini2440开发板使用自带uboot的具体方法,希望能对正在使用mini2440开发板,而且又想使用uboot引导系统的朋友们有所帮助。
Google一下会发现网上类似的帖子不少,但是对mini2440开发板是哪一个版本都没有具体的说明,个人感觉mini2440开发板的版本是经常更新的,可能不同的版本的开发板在移植uboot时会稍有不同,因此这里我把自己使用的开发板的详细信息都罗列一下,希望网友少走弯路。
另外,要感谢illidan和Martin两位的文章:/2009/05/mini2440使用u-boot//bbs/viewthread.php?tid=14使用的mini2440开发板的详细信息:kernel:linux-2.6.29-mini2440-20090708.tgzgcc:arm-linux-gcc-4.3.2.tgzuboot:bootloader.tgz(该压缩包内含有u-boot-1.1.6)roots:root_qtopia-64M.img问题源于:(1)使用128M NAND Flash mini2440开发板的用户都知道,此时开发板附带的supervivi-64M和supervivi-128M都不再支持“空格”进入supervivi的menu菜单,而是改成了使用开发板上的k1~k6任何一个按键触发进入menu(而我需要空格键触发menu的方式);(2)开发板附带的supervivi不支持网络下载kernel和root(文件系统)。
具体的修改步骤如下:注1:arm-linux-gcc的安装方法见《mini2440-um-20090817.pdf》第5.3小节。
注2:mini2440开发板附带的uboot源码已经是经过移植的,适用s3c2440处理器,我们只需要修改一些uboot参数即可。
由于片面问题,所以可能会看起来不太美观,可以看附件中的内容。
ARM启动代码相当于我们电脑的BIOS,也就是ARM启动时对处理器的一些初始化及嵌入式系统硬件的一些初始化。
由于它直接面对处理器内核和硬件控制器进行编程,一般都是用汇编语言。
一般包括:中断向量表,初始化存储器系统,初始化堆栈,初始化有特殊要求的断口,设备初始化,变量初始化等。
这几天对着RealView MDK-ARM中自带的启动代码研究了一下,遇到问题又对着数据手册和指令表看了一下,总算对S3C2440A的硬件有了一个大致的了解。
学习嵌入式系统重在系统,学习ARM只是为学习嵌入式系统铺路,懒猫比较笨可能在上系统之前要裸奔几天以强化以下对S3C2440A内部结构的了解。
把MDK自带的S3C2440A.S文件的注释发一下,这些是懒猫结合数据手册与ARM指令表理解了,可能会有错误,放在这里只是引导一下像我一样还没有入门的兄弟们,希望你们不要害怕ARM害怕嵌入式,老毛他老人家说的对,世上无难事,只怕有心人,ARM指令就那么多,看一遍不会就多看几遍,还有一定要学习看软件自带的帮助文件.;/*****************************************************************************/;/* S3C2440.S: Startup file for Samsung S3C440 */;/*****************************************************************************/;/* <<< Use Configuration Wizard in Context Menu >>> */ ;/*****************************************************************************/;/* This file is part of the uVision/ARM development tools. */ ;/* Copyright (c) 2005-2008 Keil Software. All rights reserved. */ ;/* This software may only be used under the terms of a valid, current, */;/* end user licence from KEIL for a compatible version of KEIL softwar e */;/* development tools. Nothing else gives you the right to use this softwa re. */;/*****************************************************************************/;下面这些参数是与CPSR状态寄存器有关;参数的由来:这里各个模式的参数是由寄存器CPSR的模式位设置M[4:0]得来的,;比如这里的用户模式,CPSR的M[4:0]设置为10000就是0x10。
凌FL2440超详细U-BOOT作业(UBoot介绍+H-jtag使用+Uboot使用)Bootloader是高端嵌入式系统开发不可或缺的部分。
它是在操作系统内核启动之前运行的一段小程序。
通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
现在主流的bootloader有U-BOOT、vivi、Eboot等。
本次作业先做Uboot的烧写吧。
希望通过这个帖子,能让更多的初学者朋友了解一些UBoot的知识,也希望高手朋友对我的不足予以斧正。
首先说一下什么是Uboot:U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。
从FAD SROM、8xxROM、PPCBOOT逐步发展演化而来。
其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。
但是U-Boot不仅仅支持嵌入式Linu x系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。
其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。
这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。
这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。
收稿日期:2011-03-21基金项目:中海油服企业发展基金资助项目(1017CS -A01C234)作者简介:高文辉(1987—),男,福建福清人,硕士研究生,主要研究方向为嵌入式系统的开发与设计。
基于S3C2440的U-Boot 双启动实现高文辉,师奕兵,张伟(电子科技大学自动化工程学院,四川成都611731)摘要:嵌入式处理器S3C2440同时支持Bootloader 从Nor Flash 和Nand Flash 启动,而U-Boot 默认的启动设备为Nor Flash 。
为了使U-Boot 同时支持从Nor Flash 和Nand Flash 启动,根据U-Boot 在S3C2440处理器上的启动流程和U-Boot 从Nand Flash 和Nor Flash 启动过程的差异,添加了Nand Flash 读写驱动,使其同时支持Nor Flash 和Nand Flash 启动,并在此基础上分析并实现了U-Boot 引导Linux 内核镜像的过程。
实现的源代码在交叉编译环境中编译通过,可以同时支持Nor Flash 和Nand Flash 的启动并能正确引导Linux 内核,在基于S3C2440处理器的硬件平台上稳定运行。
关键词:S3C2440;U-Boot ;双启动;Linux 内核中图分类号:TP311.1文献标识码:A 文章编号:1000-8829(2012)02-0087-05Implementation of Double Boot in U-Boot Based on S 3C 2440GAO Wen-hui,SHI Yi-bing,ZHANG Wei(School of Automation Engineering,University of Electronic and Technology of China,Chengdu 611731,China)Abstract:Embedded processor S3C2440supports bootloader boot from both Nand Flash and Nor Flash,but U-Boot's default booting device is Nor Flash.In order to support the boot from Nor Flash and Nand Flash in theU-Boot,according to the boot process of U-Boot in the S3C2440processor and the difference that U-Boot bootsfrom Nor Flash and Nand Flash,the Nand Flash drive that it can support both Nor Flash and Nand Flash boot is added.Based on this,the process of U-Boot booting the Linux kernel is analyzed and finally implemented.The U-Boot source code is correctly compiled in the cross-compiler.It can support both Nor Flash and NandFlash boot,properly boot the Linux kernel and run stably in the hardware platform based on S3C2440processor.Key words:S3C2440;U-Boot;double boot;Linux kernel 从软件的角度分析,嵌入式Linux 系统通常包括引导加载程序、Linux 内核、文件系统和用户应用程序这4个层次[1]。
引导加载程序包括固化在固件(firm-ware )中的boot 代码(可选)和Bootloader 两大部分,而在大多嵌入式系统中并没有固件,因此整个系统的加载启动任务就完全由Bootloader 来完成。
简单地说,Bootloader 就是在操作系统内核运行之前运行的一段小程序,它在系统上电时开始执行,初始化硬件设备、准备好软件环境,最后调用操作系统内核[2]。
Boot-loader 的实现非常依赖于具体硬件,需要根据硬件配置将Bootloader 移植到嵌入式系统中。
U-Boot 是目前非常流行、功能强大的Bootloader ,是遵循GPL 条款的开放源码项目。
U-Boot 可以引导Linux 、VxWorks 等操作系统并支持多种体系结构的处理器。
S3C2440支持Nand Flash 和Nor Flash 这两种启动方式,而U-Boot 默认的启动方式为Nor Flash 启动。
笔者在基于S3C2440的硬件平台上,分析了U-Boot 的启动流程并讨论通过对U-Boot 的修改使其支持Nor Flash 和Nand Flash 双启动的方法,在此基础上添加了zImage 格式Linux 内核镜像的支持并实现了U-Boot 引导zImage 格式的Linux 内核镜像。
1硬件平台介绍本文使用的硬件系统框图如图1所示,板上外设包括一块256MB 的Nand Flash 、一块2MB 的Nor Flash 、两块32MB 的SDRAM 、用于下载和调试的JTAG 接口和RS-232电平转换电路、以太网控制器、LCD 接口、USB 接口和用于启动方式选择的开关等。
采用的嵌入式微处理器是三星公司的ARM9芯片S3C2440A ,S3C2440A 基于ARM920T 核心,主频为400MHz ,内部资源包括了LCD 控制器、UART 控制器、SDRAM 控制器、NAND Flash 控制器、USB Host 和USB Device 接口及内部PLL 时钟倍频器等[3]。
图1硬件系统框图由于Nand Flash 的结构特点,Nand Flash 的读取是以一次读取一页的方式进行的,不同型号的Nand Flash 的页大小会有所不同,比较常见的页大小有512B 、1024B 和2048B 。
笔者使用的Nand Flash 是Sam-sung 公司的K9F2G08U0A ,该芯片的容量为256MB ,位宽为8-bit ,页大小为2KB ,属于大页的Nand Flash ,该芯片规定使用5个周期来实现地址的访问。
由于Nand Flash 的读写时序较为复杂,用户不能直接运行Nand Flash 上的代码,在Nand Flash 上进行数据读写时,通常需要驱动程序支持,也就是内存技术驱动程序(MTD )。
Nor Flash 的应用相对简单,无需专门的接口电路,可以很容易地存取其内部的每一个字节,它的特点是芯片内执行(XIP ,execute in place ),这样应用程序可以直接在Flash 闪存内运行,不必再把代码读到系统RAM 中。
在Nor Flash 上运行代码不需要任何的软件支持,它的所有地址都是可见的,可读取其任意随机地址的值[4]。
2U-Boot 简介及启动过程2.1U-Boot 简介U-Boot (universal boot loader )是遵循GPL 条款的开放源码项目。
U-Boot 可以引导Linux 、VxWorks 等操作系统,支持PowerPC 、MIPS 、x86、ARM 等CPU 架构的上百种开发板。
U-Boot 的程序框架清晰,功能强大,移植方便,同时提供了完备的命令体系,是目前最流行的开放源码Bootloader [5]。
2.2U-Boot 启动流程由于采用的硬件平台是基于S3C2440的,而1.1.6版本的U-Boot 没有提供基于S3C2440芯片的开发板支持,可以通过修改与其结构接近的SMDK2410配置文件以及相关源码,以实现U-Boot 对S3C2440的支持。
U-Boot 属于两阶段的Bootloader ,其启动过程如图2所示。
以SMDK2410的启动为例,第1阶段用到的文件为cpu /arm920t /start.S 和board /smdk2410/low-level_init.S ,这两个文件都是用汇编编写的,前者是平台相关的,后者是开发板相关的。
第1阶段的代码主要完成硬件设备初始化,包括关闭WATCHDOG ,设置时钟,关闭MMU 、CACHE ;初始化SDRAM ,准备好C函数所必须的运行环境,复制U-Boot 的第2阶段代码到RAM 空间,然后跳转到RAM 中运行第2阶段的代码[6]。
第2阶段代码是由C 语言编写的,主要任务是初始化本阶段用到的硬件、检测系统内存映射、将内核镜像和根文件系统镜像从Flash 上读到RAM 空间中并为内核设置启动参数最终启动内核[7]。
图2U-Boot 启动流程3U-Boot 的双启动实现本次移植使用的U-Boot 源码版本为1.1.6,通过修改SMDK2410的配置文件和源码使U-Boot 实现S3C2440的支持,完整的移植过程比较长,占的篇幅较大,因此只着重对Nand Flash 和Nor Flash 双启动的实现和zImage 格式的Linux 内核镜像的引导作一个详细的介绍。
SMDK2410使用的CPU 是S3C2410,而S3C2440是S3C2410的改进版,它们的操作基本相似,只是在系统时钟设置和Nand Flash 操作方面有些差别。
因此,移植的时候,需要针对S3C2440和S3C2410的差别作相应改动[8]。
3.1S3C2440启动特点基于S3C2440的嵌入式系统上电之后,首先需要选择启动设备,S3C2440支持Nand Flash 和Nor Flash 这两种启动模式,通过模式引脚OM1和OM0来配置[3]。
①OM [1ʒ0]=00时,处理器从Nand Flash 启动;②OM [1ʒ0]=01时,处理器从16位宽度的ROM启动;③OM[1ʒ0]=10时,处理器从32位宽度的ROM 启动;④OM[1ʒ0]=11时,处理器从Test Mode启动。
不管S3C2440的启动设备是什么,它都是从0x00000000地址开始执行程序的,所不同的是地址的映射不一样,为了在系统上电后让系统自动识别是从Nor Flash还是从Nand Flash中启动系统,需要根据两种Flash启动过程中的特点加以识别。
当选择从Nor Flash启动时,Nor Flash被映射到0x00000000地址,S3C2440可以直接从0x00000000开始运行。