《linux是这样“被”移植的》新书试读之U-Boot启动代码分析
华清远见非著名讲师 O(∩_∩)O 牛牛猛
点击链接加我好友!
http://student.csdn.net/invite.php?u=111047&c=758a60d66d3a92d1
欢迎大家去我CSDN博客上踩踩
http://blog.csdn.net/mistyeyed
前几天写了关于CE的驱动分析,好像难了点,今天发个稍微简单的点的,就是传说中嵌入式Linux中常用的U-boot启动代码分析,这是我平时我讲课时的讲义,将要整理成书,这里先和大家分享一下,也许您的意见会体现在我的新书里哦!
分析cpu/arm920t/start.s文件
打开cpu/arm920t/start.s文件
s3c2440复位之后,pc指针会指向0x0地址。在u-boot代码中,该0x0地址是一个向量表,第一条指令跳转branch到复位代码start_code。 位于cpu/arm920t/start.S汇编语言文件最开始的地方:
.globl _start /*定义一个全局变量,_start,也就是程序的入口点*/
_start: b start_code /*程序入口点是一条跳转指令,跳转到start_code 入口执行*/
|
/*定义中断向量表*/
ldr pc, _undefined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq
|
按照上面定义的异常模式,当发生异常时,执行cpu/arm920t/interrupts.c中定义的中断处理函数。
复位指令跳转之后标号为start_code处开始执行,开始执行arm920t处理器的基本初始化。首先修改当前程序状态寄存器CPSR,使处理器进入Supervisor|32 bit ARM模式,
并关闭ARM9TDMI中断和快速中断,这是通过设置CPSR相应掩码实现的:
start_code: /* * set the cpu to SVC32 mode */
mrs r0,cpsr
bic r0,r0,#0x1f
orr r0,r0,#0xd3
msr cpsr,r0
|
紧接着,将S3C2410特有的WTCON寄存器清零,此举仅为关闭看门狗,因为系统启动时一般不需要看门狗的支持。
ldr r0, =pWTCON
mov r1, #0x0
str r1, [r0]
|
然后将S3C2410中断控制器INTMSK寄存器置为全1,INTSUBMSK置为0x7ff,禁止全部中断源。S3C2410手册中对此有详细描述:
mov r1, #0xffffffff
ldr r0, =INTMSK
str r1, [r0]
# if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440) || defined(CONFIG_S3C2442) || / defined(CONFIG_S3C2443)
ldr r1, =INTSUBMSK_val
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
|
接下来,访问arm920t控制寄存器CP15,并置位最高两位
[31,30]。此两位置为0b11后,处理器时钟被设置为异步模式,
允许处理器异步访问总线:
mrc p15, 0, r1, c1, c0, 0
orr r1, r1, #0xc0000000
mcr p15, 0, r1, c1, c0, 0
|
至此arm920t相关的配置完成。
分享到:
相关推荐
基于PXA255的U-Boot启动分析及移植...U-Boot的启动分析和移植是嵌入式系统开发中的重要步骤,需要对U-Boot的启动流程和移植过程有深入的了解,以便正确地配置和修改U-Boot的代码,确保U-Boot能够稳定地运行在目标板上。
u-boot移植过程是指将u-boot移植到特定的开发板上,使其能够正确地运行和启动。这个过程需要对u-boot的源码进行修改,以适应特定的硬件平台。 整个移植过程可以分为以下几个步骤: 1. 准备u-boot的源码:首先需要...
U-Boot作为一个通用Bootloader,已经被成功移植到多种不同的体系结构,包括但不限于PowerPC、ARM、X86、MIPS等,支持上百种不同的开发板。该项目的持续发展得益于其高度的灵活性和丰富的功能,至今仍由DENX的...
### U-Boot 启动过程的详细分析 #### 一、Bootloader概念及作用 **Bootloader**,作为系统上电后的第一个加载程序,在嵌入式系统开发中扮演着极其重要的角色。它不仅负责硬件设备的初始化工作,还承担着为后续的...
4. **U-BOOT全线移植分析系列之四--U-boot如何引导Linux内核启动.mht**:这部分主要探讨U-BOOT如何加载和启动Linux内核。这涉及到内核映像的制作、加载方式(如通过网络、串口或存储介质)、内核参数的传递,以及...
本文将详细分析u-boot-1.1.4的源代码结构,特别关注其Makefile和config.mk文件,以帮助理解其构建过程和移植策略。 u-boot的源代码结构清晰,由多个子目录构成,每个子目录对应特定的功能模块。例如,board目录包含...
u-boot是通用引导加载程序,主要用于嵌入式系统,为Linux和其他操作系统提供启动支持。移植u-boot意味着将它适应特定硬件平台,使其能够正确引导并初始化系统。 首先,我们需要了解u-boot的启动流程。在移植过程中...
**Mini2440之U-boot使用及移植详细手册核心知识点解析** U-boot,全称为Universal Boot Loader,是一个广泛应用于嵌入式系统的启动加载程序,以其高度可移植性和丰富的功能特性,成为众多开发者首选的Bootloader之...
本文将详细阐述如何将U-Boot 1.3.1移植到基于ARM架构的S3C2410平台,特别是针对那些仅支持NAND Flash启动的开发板。 1. **建立自己的平台类型** - 首先,在`board`目录下创建新的开发板文件夹,复制并重命名原有的...
### U-Boot启动流程分析与S3C2440上的移植 #### 一、引言 引导加载程序(Bootloader)是系统启动时运行的第一段代码,它负责初始化硬件和引导操作系统内核。在嵌入式系统中,Bootloader的重要性不言而喻。U-Boot...
《mini2440之U-boot移植详细手册》是一份专为初学者设计的实用教程,旨在指导用户如何在mini2440开发板上成功移植U-boot启动加载器。U-boot是嵌入式系统中广泛应用的一个开源项目,它提供了一个强大的启动环境,支持...
【U-BOOT的启动流程及移植】 U-BOOT,全称Microcontroller and Operating System Bootloader Utility,是一种广泛应用在嵌入式系统的引导加载程序,用于在操作系统启动前执行初始化任务,包括CPU、内存、外设等硬件...
《2440之U-boot移植详细手册》是针对S3C2440处理器的U-boot引导加载程序移植的全面教程。S3C2440是一款由Samsung公司生产的ARM9架构微处理器,广泛应用于嵌入式系统设计。U-boot作为开源的嵌入式系统启动加载器,为...
本文将详述针对“hfrk2410”开发板进行移植的关键步骤,主要涉及`u-boot.bin`,`uImage`以及`mkimage`工具的使用。 1. **u-boot**: `u-boot`是通用的引导加载程序,负责初始化硬件,加载操作系统内核,并为用户...
- **启动Linux**:U-Boot的主要任务之一就是加载Linux内核到内存中,并传递必要的启动参数,随后跳转到内核的入口点,启动Linux操作系统。 - **设备树**:在某些系统中,U-Boot会加载设备树二进制文件(Device ...
### U-Boot 2010.03 在 S3C2410 开发板上的移植与 NAND Flash 启动配置详解 U-Boot(Universal Boot Loader)是一款开源的引导加载程序,广泛应用于嵌入式系统中。本文将详细介绍如何在S3C2410开发板上移植U-Boot ...
在本文中,我们将深入探讨如何进行S5PV210微处理器上的u-boot移植过程,以及如何使用提供的详细教程和工程实例。S5PV210是一款由Samsung开发的高性能ARM Cortex-A8核心的系统级芯片(SoC),广泛应用于嵌入式系统和...
《u-boot启动完全分析》 u-boot,全称Micro Bootstrap Loader,是嵌入式系统中常用的引导加载程序,它的主要任务是在系统上电或复位后执行,为操作系统(如Linux)提供初始化硬件、加载内核映像以及传递启动参数等...
在嵌入式系统开发中,`U-Boot`是一个至关重要的组成部分,它是“Universal Boot Loader”的缩写,是一个开源的、可移植的引导加载程序,主要用于启动嵌入式设备的操作系统。`U-Boot`提供了丰富的功能,如硬件初始化...