基于S3C2440的U_Boot双启动实现
基于S3C2440的U-boot移植及Skyeye的仿真

、 氅= 氅 .
、 ~ , ;
… …
—一
。
/h a o ld / o Biblioteka o cm n/ Js (j k
l  ̄ d ep n e t e har d e d n fi 1 Mi c Hr hi e t e d p n e ' cLi n c t c r i e e d nL un ( N U n I '
在 函数 sai u n e L C K i t g 中添加 : tt l g g LP L L ( tpl ) c o n r e
#fd f e ( i ei dCONFG— 3 2 4 ) n I S C 4 0
证 明 U—b o 可 以 配置 s y 4 0开 发 板 。 ot k2 4
E T Y一 tr N R (sat )
S CToN E I S
/ 定义程序入L I /
然 后 进 入 控 制 台 在 U— o t 目录下 输 入 ma e dsce n bo 的 k i la t
指 令 清 除 以 前 U b o 的 配 置 ,然 后 输 入 ma e s y 4 0 c n ~ ot k k24 一o ’ f , 看到 : j 如 g
{
=O O 0 0 0 ; x00 0 0
=
A I () LGN 4;
tx e t:
苏州 大 学 国 家级 大 学 生 创 新 性 实验 计 划项 目(0 0 8 2 ) 1 1 2 5 5
基 于 S C2 4 3 4 0的 U b o 移植 及 S y y - ot k e e的仿 真
# di en f
在 函数 uo g g tH Kv i) tn e_ CL (od 中添 加 :
数字图像处理系统毕业论文

数字图像处理系统毕业论文基于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)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。
基于S3C2440的U-Boot开机logo的设计与实现

Vo _9 ll
No22 .
电子设 计 工程
Elc r n c De i n i e r e t i s o maE  ̄ n e i
21年 1 01 1月
NO . 0 1 V 2 1
基 亏 ¥ C 4 0的 U— o t 3 24 B o 开机 lg o o的设计 与实现
中 图分 类 号 : P 9 .8 T 3 30
文献标识码 : A
文 章 编 号 :l7 — 26 2 1 )2 0 6 - 3 6 4 6 3 (0 1 2- 17 0
U—Bo tba e C2 0 l g sg nd i p e e t i n o s d S3 44 o o de i n a m l m n ato
理 进 行 分 析 . 后 结 合 系统软 硬 件 特 性 实现 基 于 U B o 的 开机 lg 。 过 实验 验 证 表 明 , U B o 上 实现 开机 lg , 最 — ot oo 通 在 - ot oo
可在 无操 作 系统 下 为 开 发 者 以及 用 户提 供 友 好 开机 信 息 。 关 键 词 : 机 l o U B o; C 开 o ; — o t L D驱 动 ; 3 2 4 ; g ¥ C 4 0 7寸 L D C
化 、 作 系 统 代码 搬 运 等 。 时 , — ot 支 持 多 种 嵌 入 式 操 操 同 U Bo还 作 系 统 以 及 多 种 类 型 的处 理 器 。 具 有 较 高 的 可 靠 性 和 稳 定 并
性, 而且 丰富 的设备驱 动程序 以及开 发文档 , 强大 的 网络 技
术 支 持 等 , 嵌 入 式 软 件 开 发 提 高 效 率圈 为 。
基于三星S3C2440 Boot Loader的研究

( o lg f mp tr S u h s Unv r i f ce c C l eo e Co u e, o t wet ie s y o in e& T c n l g , i y n 2 0 0 C ia t S e h o o y M a a g 6 1 l , hn ) n
Ab ta t sr c :An l z h a y e t e mo t p p l r Bo t a e r m h o r e c d .Th o Lo d r i Bo t wh c o t h s o u a o Lo d r f o t e s u c o e e Bo t a e s U— o i h b o s t e S ms n ’ a u g S¥3 2 4 . c 4 0 Emp a i e t e t t g so o Lo d rwh c o t r m n F a h a d c p h o Lo d rf o h s z h wo sa e fBo t a e i h b o sf o Na d l s n o y t e Bo t a e r m Na d l s o me r s n h f i i n s e n F a h t mo y u i g t e e fc e ta s mb e n t e fr tsa e n n l z n r n h s a o tb o i g d l y o h l ro h s t g .a d a a y i g b a c e b u o tn e a n t e i
着重 分析 从 N nFah启动 的 B o odr 2个运 行 阶段 ,在 第 1阶段 用 高效 的汇 编代 码 实现 对 N nFah 动 , ad l s ot ae 的 L ad l 驱 s 将 Bo t o d r Na d ls o a e 从 L n Fah复制 到 内存 ,提 高 了运 行 效 率 ,最 后分 析 第 2阶段 与启 动延 时相 关 的分 支操 作 。
基于S3C2440的U-boot启动分析

中北 大学信 息与 通信 工程 学院 洪永 学 余 红英
[ 要] 摘 在嵌入 式的世界 中 , 通常没有像 B O 那样 的固件程序 , IS 因此整 个嵌入式 系统的加栽就完全 由B o od r o t ae 来完成, l 所以B o— o t la e是嵌入 式京 统中不可缺 少的重要部分 , 文结合 u b o一 ..部分源代码详细地分析 U— o 启动过程 , o dr 本 — o t 116 Bo t 主要是对 U— o 启 Bo t 动的关键 环节进行较 为详 细的解析 , 其对 U— o t 目 B o在 标板 ¥ C 40 3 2 4 移植分析具有一定的借鉴价值。 [ 关键 词] o t ae U— 0 启动 移植 B ol dr o Bo t 给 内 核 , 代 码 如 下 : g 一 b 一 b a h n m e : d>d >i r — u br _c U B o, — ot全称 为 U iesl ot o dr 即通 用的 B ood r是遵循 MACH TYP S D 2 1 ; 始 化 串 口 函数 只要 是 sr l n , 置 了 nvra B o a e, L ot ae , l E M K4 0初 e a it i— i设 GL P 条款 的开发代码 , 的名字“ 它 通用” 具有两层含义 : 以引导 多种操 U T控制器 , c uam9 0 sc4 Osf .中实现 。 可 AR 在 p / 2f 32 x/e a c r i 1 作 系统 、 支持 多种架构 的 C U P 。它支持如 下操作 系统 :iu 、 e S 、 Lnx N t D B () 2 检测系统 内存映射( e o a ) m m r m p y V Wo s Q X R T S A T S , 持 如 下 C U架 构 : o e C x r 、 N 、 E M 、 RO 等 支 k P Pw r 、 P 对于特定 的开发板 , 内存 的分 布是明确 的, 以可 以直接设 置 , 其 所 o d m k 4 0 m k4 0 rs s e r it m n 函数指定 了开发板 的内存起 M P 、 8 、 R N I 等 。U B o支 持大 多数 C U, 以烧 写 E T 、 b a / d 2 1/ d2 1 .中的da _ i IS x6 A M、 O S — ot P 可 X 2 Y E S 文件系统 映像 , E F2 支持 串口下 载 , 网络下载 , 提供大量 的命令 , 始地址 , 并 代码如下 : it rm i t o ) n a d 相 对于 M z 司的V v, 的使用更复杂 , i公 i i 它 i 但是可 以用来更方便地 调试 n ( i iv d 、 程序 。本文针对 A M架构 中的 s d 2 1 开发板的 U B o启动进行详 R m k4 0 — ot { g > d >b da 0.at HY _ D AM一 ; d- b 一 i rm[]t =P S S R 细分析。 sr 1 g > d >b d m[ .z d一 b - i r O s e=P S S A 2U— o t 动 过 程 分 析 . B o启 a ]i HY _ DR M— — IE lSZ ; 通常 , ot ae 是 严重 地依 赖于硬 件 而实 现的 , 多数 的 B o B l dr o 大 ot — rtr : e u n0 l dr o e启动 过程 分为两个阶段 , a 本文 以开发板 s d 2 1 为例 , U B o m k 40 其 — ot ) 属于两阶段 的B o od r 一阶段 的文件为 cu r 9 0 s r 和 ba / ot ae , l 第 p / m 2 tt . o r a /aS d () 3 获取 U B o操作命 令 — ot s mdk 41  ̄o e e. 2 0 wlv 1 S。 启 动 U B o 后 可 以在 串 口看 到 一 些 打 印 信 号 , 后 会 出 现 — ot 随 2 — ot 一阶段分析 .U B o 1 第 ”MD 4 0#” S K20 字符等待用户输人命令来启动 内核 , 因此 U B o启动内 — ot () 1硬件设备初始化 核 的主要 核心是通 过 U B o命令来 实现 , — ot 在函数 s r a bo 中进行 t _r ot a m t 依次完 成如下设 置 : C U的工作模式设 置为管理 模式 (v ) 关 相 应 的 f s_ i 0 nn — i 等 函数 后 , 入 m i l p0 过 s 将 P sc , l h i t 和 ad i t a n n0 进 a _ o 通 no = 闭 看 门狗 ( T HD G) 设置 P L , L ,C K的 比例 , 闭 MMU gt v Iot d) WA C O , C KHC KF L 关 , en ( om ” e t c 获取U B o命令 , b — ot 然后通过 rn cm a d s0 u_ o m n ( ) , 执行命 cc A HE等 等 。 令, 最终启动内核 。U B o 中的每个命令都通过 u B O M 宏来定 — ot _O TC D 义, 格式如下 : () 2 为加载 B ood r ot ae 的第二段代码 到 R M空间 l A U BOOT C 所 谓 R M空 间 , 是 初始 化 内存芯 片 , 它能 够使 用 。通过 在 A 就 使 MDn m , xrs eetbecm n , sg””e ” (a emaag, p aal, ma d” ae , l ) r o u hp 各项参数的意义 如下 : s rS t t 中调用 l l e i t a. o e l n 函数来设置控制器 , 得外接 S R M。 w v_ i 使 D A L wl v l i t o e e n 部分函数代码 如下 : i ① nm : a e 命令 的名字 , 注意 , 它不是 一个字符 串( 不要 用双引号 括
mini2440使用uboot(详细)

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参数即可。
keil下的s3c2440启动代码分析

由于片面问题,所以可能会看起来不太美观,可以看附件中的内容。
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。
基于S3C2440嵌入式系统的U-Boot移植

了L i n u x 2 . 6 . 2 4下各外 围接 口的驱 动 ,还提供通 过 图
形接 口控制这个操作系统下各驱动的范例。
2 启 动方 式
¥ 3 C 2 4 4 0开 发 平 台 选 用 的 中 央 处 理 器 为 三 星 ¥ 3 C 2 4 4 0 A,主频为 4 0 0 MH z 。¥ 3 C 2 4 4 0支持 两种启动
The U. Bo o t Tr a ns p l a n t a t i o n Ba s e d o n S 3 C2 4 4 0
L I P e n g b o,J I N Wu y i n
( S c h o o l o f M e c h a n i c a l - E l e c t r o n i c E n g i n e e r i n g , L a n z h o u U n i v e r s i t y o f T e c h n o l o g y ,L a n z h o u G a n s u 7 3 0 0 5 0 ,C h i n a )
i z a t i o n,a n d l o a d s t h e k e r n e 1 .B a s e d o n ARM9 ¥ 3 C 2 4 4 0,U・ Bo o t w o r k i n g me c h a n i s m wa s a n a l y z e d ,t h e k e y c o d e a n d s t e p s f o r t r a n s —
体化 ,而且嵌入式 系统具 有高实时 l 生,吸引 了越来
越 多的研究人员投 入到 嵌入式 领域 的研 发工 作 中…。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
收稿日期: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开始运行。