基于S3C2440的U-Boot开机logo的设计与实现

合集下载

基于S3C2440的U-boot移植及Skyeye的仿真

基于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微处理器

星S3C2440微处理器

应用实例一:嵌入式系统开发
嵌入式系统开发
星S3C2440微处理器适用于嵌入 式系统开发,其强大的处理能力 和丰富的外设接口使其成为嵌入 式领域的理想选择。
实时操作系统
星S3C2440微处理器支持实时操 作系统(RTOS)的开发,RTOS 能够提供实时任务调度和多任务 处理能力,满足实时系统的需求。
3
APB和ASB总线
APB和ASB总线用于连接低速外设,如GPIO、 UART等。
03
星S3C244ห้องสมุดไป่ตู้微处理器的指令集 架构
指令集架构概述
ARM架构
01
S3C2440微处理器采用ARM架构,属于精简指令集(RISC)的
范畴。
指令集发展历程
02
ARM架构的指令集经过多年的发展,已成为移动设备和嵌入式
指令集功能
数据处理指令
用于执行算术、逻辑、移位等基本操 作。
控制流程指令
用于控制程序的执行流程,如条件判 断、跳转等。
内存访问指令
用于读写内存和访问外部存储器。
协处理器指令
用于执行特定功能,如浮点运算、加 密等。
指令集实现方式
汇编语言
使用汇编语言编写程序,通过汇编器将汇编代码转换 为机器码。
C/C语言
星S3C2440微处理器
• 星S3C2440微处理器概述 • 星S3C2440微处理器的体系结构 • 星S3C2440微处理器的指令集架构
• 星S3C2440微处理器的编程模型 • 星S3C2440微处理器的应用实例
01
星S3C2440微处理器概述
定义与特点
定义
S3C2440是一款由三星公司开发的 ARM920T核的微处理器。

制作u-boot LCD开机logo 及LCD字符显示错误的解决

制作u-boot LCD开机logo 及LCD字符显示错误的解决

前段时间总感觉忙,驱动、应用瞎搞一通,移植的uboot也是缺胳膊少腿,都是没开机logo 的,只实现了基本功能。

最近闲下来了,想弄些好玩点的东西,从那开始呢?还是uboot,把uboot一点一点完善起来,这应该是一个比较有意思的过程。

做一个自己喜欢的开机logo,岂不是很炫。

要想显示logo,当然我们首先要做的是修改完善lcd的驱动,修改驱动这一块我就不赘述了,网上一搜一大把,不过推荐一下Tekkaman Ninja 的博客,参照他的肯定是没问题的。

以下引自Tekkaman Ninja/****************************************************************************** 图片的放置路径所有的开机logo都放在了/tools/logos 之下,你只需要将你的班子作对应的logo替换就好了。

对于S3C2440,你只需要将denx.bmp替换成你想要的logo就好了。

对于ATMEL的芯片,据说会显示ATMEL的logo,所以替换那个logo即可。

但是你所替换的logo必须和原来的大小、格式一模一样,否则会出现u-boot使用过程中宕机重启的后果。

--------------------------------------------------------------------------------二、图片的大小标准不同的logo对应不同的大小,这里S3C2440所对应的是160*96分辨率的BMP图片。

--------------------------------------------------------------------------------三、图片的转换脚本在制作图片前,请您现确认您的Linux主机上安装了Netpbm 工具包。

如果是Ubuntu,你可以直接用新立得安装;如果是别的发行版,可以在Netpbm主页下载源代码编译。

Jflash-s3c2410(linux 版本)源码分析

Jflash-s3c2410(linux 版本)源码分析

Jflash-s3c2410(linux 版本)源码分析最近在远峰公司买了arm9的板子,S3C2410,ARM920T ,没有Nor flash ,Nand Flash 是64M ,SDRAM 是K9f1208,本人对linux 的热情大于windows ,所以想在linux 下做开发,可是远峰公司只给我YFSJF.exe 文件,而且没有源代码,每次在linux 下编译好了后还得切换到windows 下烧录,很是麻烦,于是在网上找了很多Jflash 类似的程序,不过不同的烧录针对不同的硬件平台,Jflash 是跟硬件紧密结合的,比如有的针对Nor Flash ,有的针对Nand Flash 的,不同内核有不同的Jflash ,而且相同的内核也有不同的版本,因为Jtag 的原理图不同,就只能有相对应的Jflash ,程序中的定义要与pc 机并口与Jtag 接口的对应相一致。

在进入源码分析之前要介绍一些预备的知识,有助于理解源代码,毕竟这个程序和硬件联系很紧密的。

首先介绍一下对PC 并口做一些简要的介绍一、PC 标准配备并行口介绍本文主要介绍计算机的标准配备并行端口即25针的母接头端口的应用,在此基础上可以运用相同的原理使用其它模式的并行端口。

并行端口共有25支脚,但不是每支脚均被使用到。

这些脚被区图1分为3种主要的功能,分别是用于数据的传送、检查打印机的状态及控制打印机,其接口如下所示:注:18~脚为GND在PC 机中,标准并行口使用3个8位对这些寄存器,也就是所说的数据、25号的端口寄存器,PC 就是通过状态、控制寄存器的读写访问并口的信号的。

本文中使用一些通用的叫法,8个数据位分别为D0~D7,5个状态位为S3~S7,4个控制为C0~C3。

其中字母表示了端口寄存器,数字则表示该信号在寄存器中的位。

数据寄存器据端口或称数据寄存器(D0~D7)保存了写入数据输出端口的一字节信息。

数据端口可以写入数数据寄存器(即数据输出端口)可擦写、基地址数据,也可以读出数据(即可擦写);写进去的当然是我们希望从数据端口引脚输出的数据,不过读进来的也只是我们上次写进去的数据,或是原来保留在里面的数据,并不是从端口引脚输入PC 的数据。

基于三星S3C2440 Boot Loader的研究

基于三星S3C2440 Boot Loader的研究
HE e ・ i n , Zh n x a g CHEN Bo
( 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启动分析

基于S3C2440的U-boot启动分析
o t 动 分析 3 24 昀 b o启
中北 大学信 息与 通信 工程 学院 洪永 学 余 红英
[ 要] 摘 在嵌入 式的世界 中 , 通常没有像 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 命令 的名字 , 注意 , 它不是 一个字符 串( 不要 用双引号 括

keil下的s3c2440启动代码分析

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移植

基于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 生,吸引 了越来
越 多的研究人员投 入到 嵌入式 领域 的研 发工 作 中…。

2440超详细U-BOOT(UBoot介绍+H-jtag使用+Uboot使用)

2440超详细U-BOOT(UBoot介绍+H-jtag使用+Uboot使用)

凌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项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。

U-boot开机logo的制作方法

U-boot开机logo的制作方法

U-boot开‎机logo‎的制作方法‎来源: China‎U nix博‎客日期:2009.11.03 10:33(共有条评论‎)我要评论U-boot开‎机logo‎的制作方法‎在有实现L‎C D显示和‎L CD命令‎行终端的U‎-boot中‎,在左上角都‎有显示一个‎l ogo,如果是at‎m el 的芯‎片,就会有at‎m el的l‎o go,三星的则是‎d enx的‎l ogo。

有的网友发‎邮件说想改‎成自己公司‎的Logo‎,而且如果是‎自己玩的话‎,改成自己喜‎欢的log‎o也爽阿。

所以今天我‎做好了实验‎,将简单的修‎改方法总结‎如下:一、图片的放置‎路径所有的开机‎l ogo都‎放在了 /tools‎/logos‎之下,你只需要将‎你的班子作‎对应的lo‎g o替换就‎好了。

对于S3C‎2440,你只需要将‎d enx.bmp替换‎成你想要的‎l ogo就‎好了。

对于ATM‎E L的芯片‎,据说会显示‎A TMEL‎的logo‎,所以替换那‎个logo‎即可。

但是你所替‎换的log‎o必须和原‎来的大小、格式一模一‎样,否则会出现‎u-boot使‎用过程中宕‎机重启的后‎果。

二、图片的大小‎标准不同的lo‎g o对应不‎同的大小,这里S3C‎2440所‎对应的是1‎60*96分辨率‎的BMP图‎片。

三、图片的转换‎脚本在制作图片‎前,请您现确认‎您的Lin‎u x主机上‎安装了Ne‎t pbm 工具包。

如果是ub‎u ntu,你可以直接‎用新立得安‎装;如果是别的‎发行版,可以在Netpb‎m主页下载源代码‎编译。

将你想要的‎图片裁减成‎160*96的JP‎G图片,然后用以下‎的脚本处理‎一下就好了‎:#!/bin/sh#insta‎l l Netpb‎m first‎ jpegt‎o pnm $1 | ppmqu‎a nt 31 | ppmto‎b mp -bpp 8 > $2 使用方法:(脚本名)(待处理的J‎P G图片名‎)(输出文件名‎)以下是我的‎m ini2‎440更改‎过logo‎后的效果图‎:U-boot LOGO修‎改2011-03-11 20:55 390人阅‎读评论(0) 收藏举报如何更改U‎b oot的‎启动log‎o:1、进入too‎l s目录,在该目录下‎你会看到一‎个叫log‎o s的目录‎,里面存的是‎l ogo图‎标,可以自己添‎加logo‎图标到该目‎录,注意需25‎6色的。

Uboot在S3C2440上的移植

Uboot在S3C2440上的移植
Hn n a di g
E vrc n n i cme t
硬 拷 贝 到 内 部 B o nen lS AM, 被 映 射 到 n C O的 otItra R 且 GS
片 选 空 间 O 0 0 ,0 0 O 0 0 ,0 0; o ls 方 式 启 x 0 00 0 - x 8 00 0 N r Fah
U o t ¥ C 4 0上的移植 b o 在 3 24
卢 伟 ,潘 炼
( 汉 科 技 大 学 信 息 科 学 与 工 程 学 院 自动 化 系 , 北 武 汉 4 4 0 ) 武 湖 32 0
摘 要 :通 过 分 析 U o t的 文 件 结 构 及 其 启 动 流 程 , 细 给 出 了 Ub o 基 于 A M9 0 开 发 板 上 bo 详 ot在 R 2T
( eto no t n Si c n nier gWu a nvrt o c n ea dT c nlg, hn 4 4 0 ,hn ) D p.fIfr i ce e ad E g e n , h n U iesy fS i c n eh ooyWu a 3 20 C ia ma o n n i i e
的移 植 方 案 , 包括 编 译 、 试 全 过 程 , 终 能 够 在 U ot 令 方 式 下 加 载 映 像 文 件 , 成 Ln x内 核 与 调 最 bo 命 完 iu yf af 像 文 件 的 调 试 , 有 B olae 植 的 通 用 性 。 s映 具 ot dr移 o
关 键 词 :Ub o;¥ C 4 0 R 2 T o t 3 2 4 ;A M9 0 ;引 导 过 程 ;启 动 代 码
t e nie s l ha a tr o Bo to de r n p a a in. h u v ra c r ce f ol a r ta s lntto

基于S3C2440的多格式媒体播放器的设计与实现

基于S3C2440的多格式媒体播放器的设计与实现

技术创新《微计算机信息》(嵌入式与SOC)2010年第26卷第9-2期博士论坛基于S3C2440的多格式媒体播放器的设计与实现Design and Implementation of Multi-format Media Player based on S3C2440(中南大学)许雪梅徐蔚钦周文黄帅XUXue-meiXUWei-qinZHOUWenHUANGShuai摘要:设计了一种嵌入式多格式媒体播放器。

硬件系统采用三星公司ARM9系列的S3C2440芯片作为其核心,软件平台采用Linux操作系统,利用Mplayer编译的多种软件解码器,实现了一款可以播放各种常见格式的媒体播放器。

该系统完成了播放的各项功能,具有很好的用户图形交互界面,为嵌入式ARM播放器的开发打下良好的基础。

关键词:S3C2440;媒体播放器;嵌入式系统;用户图形界面中图分类号:TP37文献标识码:BAbstract:This paper researches the design of an embedded multi-format media player.The system selects S3C2440chip based on Samsung ARM9series as the core of hardware platform and embedded Linux as operating ing a variety of software decoder compiled in Mplayer,a media player that can play most of common format media have been realized.This system can complete vari-ous functions of playing and include a good graphical user interface.It lays a good foundation for development of embedded ARM players.Key words:S3C2440;Media player;Embedded system;Graphical user interface文章编号:1008-0570(2010)09-2-0012-021引言随着电子技术,多媒体技术及网络技术的快速发展,视频播放系统正在向嵌入式,网络化方向发展,多媒体组件逐渐成为系统中不可缺少的重要组成部分。

基于S3C2440的Uboot分析与移植

基于S3C2440的Uboot分析与移植
运 行地 址 改为 .O O 0 ,0 0 = x 0 00 0 。跳线 选择 从 No ls r ah F












UB o ∞81 f g ‘21 -0 t2 0(u I 9 1一明:1“) 2:
¨ I o n Rl ∞ B J w I ’ S f d 日 I 8f l :D  ̄ (
_ _

=0嗍 哪明 =0帅 x 嗍 :0帅
帅帅: I C NI e etd b o r r e .I i s n trc M- e 1 I OE C O s lc e yb ad d b s i o e MI d R N E l d! d
2 6M B s i I : sr a n eil 0t u : sr a eil Er r : sr a eil F 2 ‘ *一 L ‘B
源 代码 。U o t 目录下共有 3 b o根 0个子 目录 ,可 以分为
4类 :
2 2 产 品应用 Pou t pi 2 rdcApl d e
2 1 年 第 2 卷 第 5期 02 1
ht:ww . Sa r. t l we -. gc pl ・ o n
计 算 机 系 统 应 用
墙, 重启 xn t. i d e d服务 ,开放 T 服务 。在/ cep r 邱 e / ot t x s
结 构表 示一 个 Na dFah芯 片 。这个 结 构体 中包 含 n ls
了 关于 Na dFah的地 址信 息 、读 写方 法 、E C模 n ls C
式 、硬 件控 制 等 一 系列 低 层机 制 【,因 此新 驱动 的 5 】 编 写将 变得 更 加 方便 ,只 需修 改 该 结构 体 的相应 成

S3C2440启动流程

S3C2440启动流程

我想请问下。

主板上的DL1灯是在什么阶段点亮的?[2010-6-13 下午02:40:44] michael: 早上打电话给你,还怕打扰你休息了。

原来你们也需要上班。

呵呵[2010-6-13 下午02:40:58] Zhilong Wu: 应该在uboot 里.一开机的时候.[2010-6-13 下午02:42:00] michael: 我们现在有些板启动不了。

发现UART口没有U-BOOT输出信息。

DL1灯不亮[2010-6-13 下午02:44:03] Zhilong Wu: 每个flash 芯片,烧uboot的时候,有没有重新读出一遍,做检查. 确保uboot 是烧好的[2010-6-13 下午02:44:05] michael: DL1灯是UBOOT来控制的还是什么模块控制的?[2010-6-13 下午02:44:51] Zhilong Wu: uboot , 通过cpu的io[2010-6-13 下午02:47:44] michael: 烧写UBOOT的时候,应该是怎样的流程?我们现在是erase--->blank_check-->program---->verify[2010-6-13 下午02:48:07] Zhilong Wu: 这样也可以[2010-6-13 下午02:49:42] michael: DL1有几个阶段:[2010-6-13 下午02:50:12] michael: 不亮,常亮,慢闪,快速[2010-6-13 下午02:50:32] Zhilong Wu: 在uboot 就是一个状态.[2010-6-13 下午02:50:46] Zhilong Wu: 长亮.[2010-6-13 下午02:51:12] Zhilong Wu: 能闪的时候,表示uboot 没问题.起来wince 了[2010-6-13 下午02:51:21] michael: 噢。

使用JLink间接烧写S3C2410、S3C2440开发板Nor、Nand Flash的方法

使用JLink间接烧写S3C2410、S3C2440开发板Nor、Nand Flash的方法

使用JLink间接烧写S3C2410、S3C2440开发板Nor、Nand Flash的方法1. 简要说明JLink的调试功能、烧写Flash的功能都很强大,但是对于S3C2410、S3C2440的Flash 操作有些麻烦:烧写Nor Flash时需要设置SDRAM,否则速率很慢;烧写Nand Flash只是从理论上能够达到,但是还没有人直接实现这点。

本文使用一个间接的方法来实现对S3C2410、S3C2440开发板的Nor、Nand Flash的烧写。

原理为:JLink可以很方便地读写内存、启动程序,那么可以把一个特制的程序下载到开发板上的SDRAM去,并运行它,然后使用这个程序来烧写。

2. 操作步骤2.1 连接硬件对于大多数的S3C2410、S3C2440开发板而言,它们所用的JTAG接口一般有3种(如图1所示),其中前两种用得比较多。

图1. 三种常用的JTAG接口但是市面上的JLink,大多只支持第3种JTAG接口,所以需要用到转接板。

或者直接使用JLink的变种,如图2所示的两种改进版JLink:图2. 两种改进版JLink以mini2440为例,如图3接好JTAG线。

图3. 改进版JLink与mini2440的连接2.2 运行J-Link commanderJ-Link commander启动界面如图4所示,(如果没有发现检测到CPU,就在里面执行usb 命令连接JLink,再执行r命令识别处理器)。

图4. J-Link commander启动界面2.3 下载运行特制的程序对于S3C2410、S3C2440处理器,它们内部有4K的SRAM,当使用Nor Flash启动时,地址为0x40000000;当使用Nand Flash启动时,地址为0。

对于S3C2410、S3C2440开发板,一般都外接64M的SDRAM。

SDRAM能被使用之前,需要经过初始化。

所以,先把一个init.bin下载到内部SRAM去运行,它执行SDRAM的初始化;然后再下载一个比较大的程序,比如u-boot到SDRAM去动行,它将实现对Nor、Nand Flash的操作。

UBOOT从NAND FLASH启动分析

UBOOT从NAND FLASH启动分析

UBOOT从NAND FLASH启动分析UBOOT从NAND FLASH启动分析在分析启动代码之前先看一下S3C2440的NAND启动:在配置NAND启动模式之后,S3C2440上电会先将NAND中的0x0 - 0x1000共4096字节的数据拷贝到位于Bank0中的Boot Internal SRAM上Bank0如下图:可以看出Boot Internal SRAM为4KB大小,也正是因为Boot Internal SRAM只有4KB 大小,所以只能从NAND中拷贝4K的内容= 3= 这个Boot Internal SRAM是配置为NAND FLASH启动模式才有的这4K内容是什么呢?~ 这就要看Uboot的镜像文件中是如何进行连接的了~连接脚本在board/smdk2440/u-boot.lds中,如下SECTIONS{. = 0x00000000;. = ALIGN(4);.text :{cpu/arm920t/start.o (.text)cpu/arm920t/s3c24x0/nand_read.o (.text)*(.text)}. = ALIGN(4);.rodata : { *(.rodata) }. = ALIGN(4);.data : { *(.data) }. = ALIGN(4);.got : { *(.got) }. = .;__u_boot_cmd_start = .;.u_boot_cmd : { *(.u_boot_cmd) }__u_boot_cmd_end = .;. = ALIGN(4);__bss_start = .;.bss : { *(.bss) }_end = .;}.text为代码段,可以看出cpu/arm920t/start.o在代码段的最前面,所以会先执行start.o 中的代码连接完成后的镜像文件的前4K如下cpu/arm920t/start.o(.text).text 0x33f80000 0x4e0 cpu/arm920t/start.o0x33f80050 IRQ_STACK_START0x33f80048 _bss_start0x33f8004c _bss_end0x33f80044 _armboot_start0x33f80000 _start0x33f80054 FIQ_STACK_STARTcpu/arm920t/s3c24x0/nand_read.o(.text).text 0x33f804e0 0x1b8 cpu/arm920t/s3c24x0/nand_read.o0x33f804e0 nand_read_ll*(.text).text 0x33f80698 0x64 board/smdk2440/libsmdk2440.a(lowlevel_init.o)0x33f8069c lowlevel_init.text 0x33f806fc 0x280 cpu/arm920t/libarm920t.a(interrupts.o)0x33f80934 do_fiq0x33f80880 do_undefined_instruction0x33f80744 show_regs0x33f80958 do_irq0x33f80728 bad_mode0x33f808c8 do_prefetch_abort0x33f8070c disable_interrupts0x33f80910 do_not_used0x33f808ec do_data_abort0x33f808a4 do_software_interrupt0x33f806fc enable_interrupts.text 0x33f8097c 0x250 cpu/arm920t/s3c24x0/libs3c24x0.a(interrupts.o)0x33f80aa4 set_timer0x33f80a20 reset_timer0x33f8097c interrupt_init0x33f80ba0 get_tbclk0x33f80a90 get_timer0x33f809f0 reset_timer_masked0x33f80a24 get_timer_masked0x33f80ab4 udelay0x33f80b10 udelay_masked0x33f80bac reset_cpu0x33f80b8c get_ticks.text 0x33f80bcc 0x150 cpu/arm920t/s3c24x0/libs3c24x0.a(speed.o)0x33f80c4c get_HCLK0x33f80cec get_PCLK0x33f80c44 get_FCLK0x33f80d14 get_UCLK.text 0x33f80d1c 0x1e8 cpu/arm920t/s3c24x0/libs3c24x0.a(cmd_s3c24xx.o) 0x33f80d8c do_s3c24xx.text 0x33f80f04 0xdc cpu/arm920t/s3c24x0/libs3c24x0.a(serial.o)0x33f80f04 serial_setbrg0x33f80fa8 serial_tstc0x33f80f80 serial_putc0x33f80f58 serial_init0x33f80fb8 serial_puts0x33f80f68 serial_getc.text 0x33f80fe0 0x140 lib_arm/libarm.a(_divsi3.o)0x33f80fe0 __divsi3如何设置从0x33f80000开始呢?~这是链接的时候指定的在根目录下面的config.mk中有下面一句LDFLAGS += -Bstatic -T $(LDSCRIPT) -Ttext $(TEXT_BASE) $(PLATFORM_LDFLAGS)关键就是其中的-Ttext $(TEXT_BASE),这句指明了代码段的起始地址而TEXT_BASE在board/smdk2440/config.mk中定义TEXT_BASE = 0x33F8 0000 为什么是0x33F8 0000呢?~这是将NAND中Uboot拷贝到RAM中的起始地址,所以在代码拷贝到RAM之前不能使用绝对地址来寻址数据,只能用相对地址在以下将用虚拟地址来指Uboot在RAM中的地址,也就是0x33F8 0000现在来看代码cpu/arm920t/start.S_start: ;异常处理向量表b start_codeldr pc, _undefined_instruction ;未定义指令异常:0x00000004ldr pc, _software_interrupt ;软中断异常:0x00000008ldr pc, _prefetch_abort ;预取异常:0x0000000Cldr pc, _data_abort ;数据异常:0x00000010ldr pc, _not_used ;未使用:0x00000014ldr pc, _irq ;外部中断请求IRQ:0x00000018ldr pc, _fiq ;快束中断请求FIQ:0x0000001Cb start_code在虚拟地址0x33F8 0000处, 拷贝到Boot Internal SRAM后则位于0x0处,所以b start_code是第一条执行的指令,start_code在cpu/arm920t/start.S中代码如下://读取CPSR寄存器的内容到R0mrs r0,cpsr//清除R0中的0 - 4 这5个位后保存到R0中//也就是清除用户模式位bic r0,r0,#0x1f//置R0的0 1 4 6 7 位为真//也就是选择SVC模式,同时IRQ和FIQ被禁止,处理器处于ARM状态//关闭中断和快速中断orr r0,r0,#0xd3//将R0中的值保存到CPSR上msr cpsr,r0# define pWTCON 0x53000000 ;看门狗控制寄存器WTCON# define INTMSK 0x4A000008 ;中断屏蔽寄存器INTMSK# define INTSUBMSK 0x4A00001C ;辅助中断屏蔽寄存器,由于外设中断源太多,要用此寄存器屏蔽剩余的中断源# define LOCKTIME 0x4c000000 ;PLL锁定时间计数寄存器# define MPLLCON 0x4c000004 ;主时钟锁相环控制寄存器# define UPLLCON 0x4c000008# define CLKDIVN 0x4C000014 ;时钟分频寄存器/* clock divisor register */# define INTSUBMSK_val 0xffff# define MPLLCON_val ((184 12) + (2 4) + 2) /*406M*/# define UPLLCON_val ((60 12) + (4 4) + 2) /* 47M */# define CLKDIVN_val 7 /* FCLK:HCLK:PCLK = 1:3:6 */# define CAMDIVN 0x4C000018//取得看门狗寄存器的地址ldr r0, =pWTCON//将R1寄存器清0mov r1, #0x0//将看门狗寄存器清0,即将看门狗禁止,包括定时器定时,溢出中断及溢出复位等str r1, [r0]/** mask all IRQs by setting all bits in the INTMR - default*///设R1寄存器为0xFFFF FFFFmov r1, #0xffffffff//读取中断屏蔽寄存器的地址ldr r0, =INTMSK//将中断屏蔽寄存器中的位全设1,屏蔽所有中断str r1, [r0]//# define INTSUBMSK_val 0xffff//设R1寄存器为0xFFFFldr r1, =INTSUBMSK_val//读取辅助中断屏蔽寄存器的地址ldr r0, =INTSUBMSK//将辅助中断屏蔽寄中的11个中断信号屏蔽掉,本人觉得INTSUBMS_val应设成7ff str r1, [r0]//# define LOCKTIME 0x4c000000//读取PLL锁频计数器寄存器地址到R0中ldr r0,=LOCKTIME//将R1设为0x00FF FFFFldr r1,=0xffffff//M_LTIME为最大的0xFFF//U_LTIME为最大的0xFFFstr r1,[r0] ;0xfff=4096>1800,远远满足锁定要求/* FCLK:HCLK:PCLK = 1:2:4 *//* default FCLK is 120 MHz ! *///# define CLKDIVN 0x4C000014 /* clock divisor register *///读取时钟分频寄存器的地址ldr r0, =CLKDIVN//# define CLKDIVN_val 7 /* FCLK:HCLK:PCLK = 1:3:6 *///将R1设为0x7mov r1, #CLKDIVN_va//PDIVN - 1: PCLK has the clock same as the HCLK/2.//HDIVN - 11 : HCLK = FCLK/3 when CAMDIVN[8] = 0.// HCLK = FCLK/6 when CAMDIVN[8] = 1.str r1, [r0]/* Make sure we get FCLK:HCLK:PCLK = 1:3:6 *///# define CAMDIVN 0x4C000018//读取摄像头时钟分频寄存器的地址ldr r0, =CAMDIVN//将R1设为0mov r1, #0//将摄像头时钟分频寄存器清0str r1, [r0]/* Clock asynchronous mode *///MRC p15, 0, Rd, c1, c0, 0 ; read control register//读取控制寄存器中的值到R1中mrc p15, 0, r1, c1, c0, 0 ;将协处理器p15的寄存器c1和c0的值传到arm处理器的R1寄存器中//31 iA bit Asynchronous clock select//30 nF bit notFastBus selectorr r1, r1, #0xc0000000 ;将最高两位置1//MCR p15, 0, Rd, c1, c0, 0 ; write control register//将R1中的值写到控制寄存器中mcr p15, 0, r1, c1, c0, 0 将arm的寄存器R1的32位数据传到协处理器p15的两个16位寄存器c1和c0//# define UPLLCON 0x4c000008//读取UPLL设置寄存器的地址到R0中ldr r0,=UPLLCON//# define UPLLCON_val ((60ldr r1,=UPLLCON_val//将R1中的值写入UPLL设置寄存器中str r1,[r0]//ARM920T为5级流水线,需要至少5个周期来让指令生效nopnopnopnopnopnopnopnop//读取MPLL设置寄存器的地址到R0中ldr r0,=MPLLCON//# define MPLLCON_val ((184ldr r1,=MPLLCON_val//将R1中的值写入MPLL设置寄存器中str r1,[r0]#define GPJCON 0x560000D0#define GPJDAT 0x560000D4#define GPJUP 0x560000D8//跳转到cpu_init_crit处执行//并将下一条指令的地址写入LR寄存器中bl cpu_init_critcpu_init_crit在cpu/arm920t/start.S中代码如下:cpu_init_crit:/** flush v4 I/D caches*///将R0寄存器置0mov r0, #0//Invalidate ICache and DCache SBZ MCR p15,0,Rd,c7,c7,0 //禁止指令和数据cachemcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache *///Invalidate TLB(s) SBZ MCR p15,0,Rd,c8,c7,0mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB *//** disable MMU stuff and caches*///MRC p15, 0, Rd, c1, c0, 0 ; read control registermrc p15, 0, r0, c1, c0, 0//清除[8] [9] [13] 这3个位//8 - System protection//9 - ROM protection//13 - Base location of exception registers - 0 = Low addresses = 0x00000000. bic r0, r0, #0x00002300 // clear bits 13, 9:8 (--V- --RS)//清除[0] [1] [2] [7] 这4个位// 0 - MMU enable - 0 = MMU disabled.// 1 - Alignment fault enable - 0 = Fault checking disabled.// 2 - DCache enable - 0 = DCache disabled.// 7 - Endianness - 0 = Little-endian operation.bic r0, r0, #0x00000087 // clear bits 7, 2:0 (B--- -CAM)//设置位[1]为真// 1 - Alignment fault enable - 1 = Fault checking enabled.orr r0, r0, #0x00000002 // set bit 2 (A) Align//设置位[12]为真//12 - ICache enable - 1 = ICache enabled.orr r0, r0, #0x00001000 // set bit 12 (I) I-Cache//MCR p15, 0, Rd, c1, c0, 0 ; write control registermcr p15, 0, r0, c1, c0, 0//将返回地址保存到IP中mov ip, lr//跳转到lowlevel_init中执行bl lowlevel_initcpu_init_crit在cpu/arm920t/start.S中代码如下:.globl lowlevel_init//读取下面标号为SMRDATA处的地址到R0中ldr r0, =SMRDATA//读取上面标号为_TEXT_BASE处的地址内容到R1中//也就是取得TEXT_BASE的值到R1中ldr r1, _TEXT_BASE//计算SMRDATA的相对地址保存到R0中//SMRDATA为虚拟地址,而TEXT_BASE为虚拟地址的起始地址//而现在Uboot的起始地址并不为虚拟地址//TEXT_BASE为0x33F8 0000,SMRDATA为0x33F8 06C8//而现在程序运行在起始地址为0x0000 0000的地方//所以需要计算以0x0000 0000为标准的相对地址sub r0, r0, r1//取得带宽与等待状态控制寄存器地址到R1中ldr r1, =BWSCON /* Bus Width Status Controller *///一共需要设置13个寄存器,每个寄存器4字节add r2, r0, #13*40://读取R0所指的项的值到R3中后R0自加4字节ldr r3, [r0], #4//将R3中的值保存到R1所指的地址中后R1自加4字节str r3, [r1], #4//比较R0和R2是否相等,相等则说明13个寄存器全部设置完毕cmp r2, r0//不等则跳转到上面标号为0处的地址继续执行bne 0b//跳回到返回地址中继续执行mov pc, lr.ltorg/* the literal pools origin */SMRDATA:.word(0+(B1_BWSCON4)+(B2_BWSCON8)+(B3_BWSCON12)+(B4_BWSCON16)+( B5_BWSCON20)+(B6_BWSCON24)+(B7_BWSCON28)).word((B0_Tacs13)+(B0_Tcos11)+(B0_T acc8)+(B0_Tcoh6)+(B0_T ah4)+(B0_T acp2) +(B0_PMC)).word((B1_Tacs13)+(B1_Tcos11)+(B1_T acc8)+(B1_Tcoh6)+(B1_T ah4)+(B1_T acp2) +(B1_PMC)).word((B2_Tacs13)+(B2_Tcos11)+(B2_T acc8)+(B2_Tcoh6)+(B2_T ah4)+(B2_T acp2) +(B2_PMC)).word((B3_Tacs13)+(B3_Tcos11)+(B3_T acc8)+(B3_Tcoh6)+(B3_T ah4)+(B3_T acp2) +(B3_PMC)).word((B4_Tacs13)+(B4_Tcos11)+(B4_T acc8)+(B4_Tcoh6)+(B4_T ah4)+(B4_T acp2) +(B4_PMC)).word((B5_Tacs13)+(B5_Tcos11)+(B5_T acc8)+(B5_Tcoh6)+(B5_T ah4)+(B5_T acp2) +(B5_PMC)).word ((B6_MT15)+(B6_Trcd2)+(B6_SCAN)).word ((B7_MT15)+(B7_Trcd2)+(B7_SCAN)).word ((REFEN23)+(TREFMD22)+(Trp20)+(Trc18)+(Tchr16)+REFCNT).word 0x32.word 0x30.word 0x30执行mov pc, lr后将返回到cpu_init_crit中剩下来还有2条指令//恢复返回地址到LRmov lr, ip//跳转到返回地址mov pc, lr执行完毕之后将返回到start_code中执行接下来的代码代码如下://#define GPJCON 0x560000D0//取得J端口控制寄存器的地址到R0中LDR R0, = GPJCON//将R1设置为0x1 5555LDR R1, = 0x15555//将R1中的值保存到J端口控制寄存器//GPJ0 - 01 - Output//GPJ1 - 01 - Output//GPJ2 - 01 - Output//GPJ3 - 01 - Output//GPJ4 - 01 - OutputSTR R1, [R0]//#define GPJUP 0x560000D8//取得J端口上拉功能寄存器的地址到R0中LDR R0, = GPJUP//将R1设置为0x1FLDR R1, = 0x1f//将R1中的值保存到J端口上拉功能寄存器//禁止GPJ0 - GPJ4的上拉功能STR R1, [R0]//#define GPJDAT 0x560000D4//取得J端口数据寄存器的地址到R0中LDR R0, = GPJDAT//将R1设为0x0LDR R1, = 0x00//将R1中的值保存到J端口数据寄存器//将J端口数据寄存器清0STR R1, [R0]//下面是NAND数据拷贝过程//relocate:copy_myself://#define S3C2440_NAND_BASE 0x4E000000//取得Nand Flash设置寄存器的地址mov r1, #S3C2440_NAND_BASE//将R2设为0xFFF0ldr r2, =0xfff0 // initial value tacls=3,rph0=7,rph1=7 //#define oNFCONF 0x00//读取Nand Flash设置寄存器中的值到R3中ldr r3, [r1, #oNFCONF]//将R3或上R2后保存到R3中orr r3, r3, r2//将R3中的值保存到Nand Flash设置寄存器中//TWRPH0 - 111 - Duration = HCLK * (TWRPH0 + 1) //TACLS - 11 - Duration = HCLK * TACLSstr r3, [r1, #oNFCONF]//#define oNFCONT 0x04//读取Nand Flash控制寄存器中的值到R3中ldr r3, [r1, #oNFCONT]//将R3的[0]位置1orr r3, r3, #1 // enable nand controller//将R3中的值保存到Nand Flash控制寄存器中//Mode - 1:Nand Flash Controller Enablestr r3, [r1, #oNFCONT]//读取虚拟起始地址到R0中ldr r0, _TEXT_BASE /* upper 128 KiB: relocated uboot *///预留malloc所需要的空间sub r0, r0, #CFG_MALLOC_LEN /* malloc area *///预留bdinfo所需要的空间sub r0, r0, #CFG_GBL_DATA_SIZE /* bdinfo *///预留中断和快速中断向量表空间sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)//预留12字节给中断栈sub sp, r0, #12 /* leave 3 words for abort-stack */// copy u-boot to RAM//读取虚拟起始地址到R0中,作为目标地址ldr r0, _TEXT_BASE//将R1设为0,作为源地址mov r1, #0x0//将UBOOT大小的值保存在R2中,作为数据大小mov r2, #CFG_UBOOT_SIZE//跳转到nand_read_ll处执行//并将下一条指令的地址保存在LR中bl nand_read_llnand_read_ll的原型为int nand_read_ll(unsigned char *buf, unsigned long start_addr, int size) 之前设置的R0 R1 R2为它的3个参数R0 - bufR1 - start_addrR2 - sizenand_read_ll的代码在cpu/arm920t/s3c24x0/nand_read.c中int nand_read_ll(unsigned char *buf, unsigned long start_addr, int size) {int i, j;//检测源地址和大小是否在NandFlash的边界上if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK)) //不在边界上则返回-1表示出错return -1; /* invalid alignment *//* chip Enable */// #define nand_select() (NFCONT &= ~(1//置NAND Flash控制寄存器中除Reg_nCE外所有的位为1//Reg_nCE - NAND FLASH Memory nFCE signal control//0 - Force nFCE to low (Enable chip select)nand_select();// #define nand_clear_RnB() (NFSTAT |= (1//置NAND Flash操作状态寄存器中的RnB_TransDetect位为1//When RnB low to high transition is occurred, this value set and issue interrupt if enabled.//To clear this value write '1'//1: RnB transition is detectednand_clear_RnB();for (i=0; i10; i++);//从源地址的首地址开始历便所要拷贝的数据大小for (i=start_addr; i (start_addr + size);){//检测地址是否在NAND Flash的边界上if (start_addr % NAND_BLOCK_SIZE == 0){//检测是否为坏块if (is_bad_block(i)){/* Bad block *///向后延伸一个存储块i += NAND_BLOCK_SIZE;size += NAND_BLOCK_SIZE;//跳到下一块continue;}}j = nand_read_page_ll(buf, i);//指向下一块i += j;buf += j;// LED_FLASH();}/* chip Disable */// #define nand_deselect() (NFCONT |= (1//置Reg_nCE位为1//NAND Flash Memory nFCE signal control//1: Force nFCE to High(Disable chip select)nand_deselect();return 0;}nand_read_ll将Uboot从NAND中拷贝到RAM中拷贝完成后将返回到start_code接下来的代码如下://检测R0是否为0,R0为nand_read_ll的返回值tst r0, #0x0//为0则说明无错,跳转到ok_nand_read处执行beq ok_nand_readok_nand_read://将R0设为0mov r0, #0//ldr r1, =0x33f00000//将R1设为虚拟地址起始处ldr r1, _TEXT_BASE//检测0x400个字节mov r2, #0x400 // 4 bytes * 1024 = 4K-bytesgo_next://读取R0处地址的数据到R3中//然后R0自加4字节ldr r3, [r0], #4//读取R1处地址的数据到R4中//然后R1自加4字节ldr r4, [r1], #4//比较R3和R4的数据是否相等//也就是检测Boot Internal SRAM和RAM中的数据是否相等//以保证数据无错teq r3, r4//不等则跳转到notmatchbne notmatch//相等则R2自减4subs r2, r2, #4//当R2为0则跳转到done_nand_readbeq done_nand_read//R2不为0则跳转回go_next继续检测bne go_nextdone_nand_read:LDR R0, = GPJDATLDR R1, = 0x2STR R1, [R0]stack_setup://读取虚拟起始地址到R0中ldr r0, _TEXT_BASE /* upper 128 KiB: relocated uboot */ //预留malloc所需要的空间sub r0, r0, #CFG_MALLOC_LEN /* malloc area *///预留bdinfo所需要的空间sub r0, r0, #CFG_GBL_DATA_SIZE /* bdinfo *///预留中断和快速中断向量表空间sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)//预留12字节给中断栈sub sp, r0, #12 /* leave 3 words for abort-stack */clear_bss://读取BSS段的起始地址ldr r0, _bss_start /* find start of bss segment *///读取BSS段的结束地址ldr r1, _bss_end /* stop here *///将R2设为0x0mov r2, #0x00000000 /* clear */clbss_l://将R2中的值保存在R0所指的地址str r2, [r0] /* clear loop... *///R0自加4字节add r0, r0, #4//比较R0和R1是否相等cmp r0, r1//不等则说明清0还没结束ble clbss_lLDR R0, = GPJDATLDR R1, = 0x1STR R1, [R0]//跳转到start_armboot处执行ldr pc, _start_armboot_start_armboot: .word start_armboot这里start_armboot是一个绝对地址,在朗成所修改的这个Uboot中为0x33F8 13F4 执行ldr pc, _start_armboot之后将会跳到RAM中的绝对地址继续执行整理了一个流程图,分为3个存储器:1 Boot Internal SRAM , 接在BANK0,起始地址为0x02 RAM , 接在BANK6,起始地址为0x3000 00003 NAND FLASH,为单独寻址流程如下图:红字为流程序号:1. 首先将NAND FLASH中的前0x1000字节内容拷贝到Boot Internal SRAM中2. 从Boot Internal SRAM的0x0地址处开始执行指令3. 将Uboot从Flash拷贝到RAM中4. 执行ldr pc, _start_armboot从Boot Internal SRAM中跳转到RAM中的绝对地址0x33F8 13F4处继续执行。

如何烧写S3C2440裸板程序

如何烧写S3C2440裸板程序

如何烧写S3C2440裸板程序韦东山Linux视频第1期: ARM裸板、u-boot、内核、根文件系统、简单驱动韦东山Linux视频第2期:深入驱动边写边讲网站: 淘宝: 业务 QQ/邮箱: weidongshan@技术支持邮箱: 17653039@视频QQ群 : 177535949,49256475,173968594技术支持MSN : thisway.diy@业务范围: Linux咨询/企培/故障解决一、使用OpenJTAG 或并口JTAG 工具:OpenJTAG 是百问网出品的一款USB 转JTAG 和USB 转串口二合一的工具,适用于没有串口、没有并口的电脑。

并口JTAG 工具是每一款S3C2440开发板都配备的,它只能接在电脑的并口上。

并口JTAG 分为两种:Dongle 、Wiggler ,这两种工具只是使用的并口引脚不同。

百问网开发了烧写软件oflash.exe(Linux 下的版本为oflash),它可以烧写S3C2410、S3C2440、S3C6410的Nor Flash 和Nand Flash ;支持OpenJTAG 、Dongle 和Wiggler 。

oflash 使用很简单,安装好OpenJTAG 或并口JTAG 工具的驱动程序后,直接运行,然后按提示进行选择。

OpenJTAG 驱动程序的安装方法请参考第4节,并口JTAG 驱动的安装方法请参考第5节。

下面是一个例子:图1 使用oflash 烧写裸板程序二、使用JLink烧写Nor FlashJLink只支持烧写Nor Flash,不支持烧写Nand Flash。

要烧写Nand Flash只能按这几步操作:1.开发板设为Nor Flash启动(开发板有选择Nor Flash或Nand Flash启动的开关)2.接好JLlink后,用JLink的软件J-Flash烧写百问网特制的u-boot.bin到Nor Flash上去3.重启开发板,在串口里操作u-boot烧写Nand Flash这节介绍怎样使用J-Flash烧写Nor Flash,下一节介绍怎样使用u-boot烧写Nand Flash。

U-Boot在S3C2440上的分析与移植

U-Boot在S3C2440上的分析与移植
关键 词 :嵌 入 式 系统 ;B o la e ;¥ C 4 0;U B o ot dr 3 24 o —o t
Ana y i nd Tr n pl n ato o bo to t l ssa a s a t in fU・ o n he¥ C2 4 3 40
SH ILe i
( l g f e t nc n no mai n Xia oye h i ie s y Xi n7 0 4 , ia Col eo cr isa dI fr t , ’nP ltc ncUnv ri , ’ 1 0 8 Chn ) e El o o t a Ab ta t Bo t a e (o to d r i a otn at f ikn pteo ea n s m n ad r lt r , d sr c: ol d r b o a e) s li ra t r o n igu p rt gs t a dh r waepafm a o l lmp p l h i ye o n
言实现 ,阶段 2用 C语言实现。将依赖于处理器体系
结构的汇编语言部分和通 用的 C语言部分分开 ,这样 有利于 B o L a e 能够支持尽可 能多的嵌入式处理 o to d r
系统 的软 硬件环境 带到一 个合适 的状态 , 以便 为最终
调用操作 系统内核 准备好正确 的环境[。 B o la e 1 ot dr 1 o 是 紧密依赖 于硬件 而实现 的。 别是在嵌入式 系统 中, 特
不 同体 系结构 的处理器 需要不 同 B o la e , o t dr o 即使是
as mp ra tf re b d e y tm f s fwae d v lp e t lo i o n o m e d d s se o o t r e eo m n .Th sp p rd s rb sc aa trsis o t i a e e c e h ce t fa i r i c
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 1 9卷 第 2 2期
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还 作 系 统 以 及 多 种 类 型 的处 理 器 。 具 有 较 高 的 可 靠 性 和 稳 定 并
性, 而且 丰富 的设备驱 动程序 以及开 发文档 , 强大 的 网络 技
术 支 持 等 , 嵌 入 式 软 件 开 发 提 高 效 率圈 为 。
Y A h a, A G Z u LU Qn - a U N S u i Y N h , I igs n h
( e ate tfC m ue c neadTc n oy S u w s U i ri c n e D p r n o o p t S i c n eh dg ,ot et nv syo i m r e h e t fS e c
22 U B o 启 动 分 析 . — ot
添 加 L D 驱 动 并 实 现 开 机 lg 功 能 , 过 验 证 表 明 , 设 计 C oo 通 该 可 为 开 发 者 提 供 友 好 的 调 试 信 息 , 为 用 户 提 供 友 好 的 开 机 并
界面 。
U B o 通 过 两 个 阶 段 分 别 实 现 硬 件 设 备 初 始 化 和 操 作 — ot 系 统 的 引 导 启 用 功 能 。 系 统 启 动 的入 口点 是 通 过 在 文 件 U 而 — b o. s 指 定 , 在 编 译 过 程 中将 人 口点 通 知 编 译 器 . 过 otd 中 1 并 通
1 系统 总体 结构
系 统 采 用 S C 4 O 为 主 控 处 理 器 。 该 处 理 器 是 基 于 3 24
文件 中 的 E T Y(s r 指 出 程 序 从 一t t 始运 行 。 具 体 NR tt a) s r开 a 其 指 向 的 是 s ro 即 s rS 成 的 目标 文 件 ) 件 。 在 系 统 加 t t ( tt 生 a. a. 文 电 后 , 据 指 定 地 址 取 出第 一 条 指 令 并 运 行 。 过 这 种 方 式 根 通 实 现 U B o 的 引 导启 动 。 — ot
袁 帅 ,杨 著 , 青 山 刘
( 南 科 技 大 学 计 算 科 学 与技 术 学 院 ,四 ) 西 1 阳 6 11) 1绵 2 00 摘 要 :在 对 U B o 进 行 深 入 分析 的 基础 上 , 同时 对 ¥ C 4 0的 L D 控 制 器原 理 以 及 I N L X 7寸 L D 的成 像 原 — ot 3 24 C N OU C
随 着 科 技 进 步 以 及 多 媒 体 应 用 的 推 动 下 , C 被 广 泛 LD 应 用 到 嵌 入 式 相 关 产 品 中 , 而 提 高 用 户 视 觉 体 验 效 果 。本 从 设 计 基 于 ¥ C 4 0处 理 器 为 硬 件 平 台 ,通 过 在 U B o 中 的 324 — ot
p n i l eal At a t c i v d b o o o c mb n i g w t h y tm a d r n o t r e t rs Ex e me t e u t i r c p ei d ti n . s ,a h e e o t g o i enl h wa ef au e . p r n s l i r s s o a c iv n eb o g n U— o t a r vd e eo e n s r t e dy b o no ain h w t t he i g t o t o oo Bo np i ed v l p ra d u e hf n l o t fr t . h a h l c o wi r i i m o Ke r s b o o o y wo d : o t g ;U— o t C d v r 3 2 4 l Bo ;L D r e ;¥ C 4 0;7 L i ” CD
a d T c n l y Mi y n 2 0 0 C i ) n e h o g , a a g6 1 1 , hn o n a
Ab ta t a e n U— o td ph a ayi,su idte¥ C2 4 C c nrl ra d I sr c:B s do B o e t n ls s tde h 3 4 0 L D o tol n NNOL e UX - c C ma efr n 7i h L D i g- mig n o
相关文档
最新文档