04-S3C2440u-boot学习之u-boot分析(3)之源码第1、2阶段

发布者:Asawen最新更新时间:2022-04-22 来源: eefocus关键字:S3C2440  u-boot  源码 手机看文章 扫描二维码
随时随地手机看文章

参考《韦东山1期视频》第09课第3节 u-boot分析之源码第1阶段.WMV


一:第一阶段

(1)打开u-boot-1.1.6_JZ2440cpuarm920tstart.S

_start:  b       reset(跳转到reset):


1.设置SVC32 模式;


reset:

/*

* set the cpu to SVC32 mode

*/

mrs r0,cpsr

bic r0,r0,#0x1f

orr r0,r0,#0xd3

msr cpsr,r0

2.关看门狗


/* turn off the watchdog */

#if defined(CONFIG_S3C2400)

# define pWTCON 0x15300000

# define INTMSK 0x14400008 /* Interupt-Controller base addresses */

# define CLKDIVN 0x14800014 /* clock divisor register */

#elif defined(CONFIG_S3C2410)

# define pWTCON 0x53000000

# define INTMOD     0X4A000004

# define INTMSK 0x4A000008 /* Interupt-Controller base addresses */

# define INTSUBMSK 0x4A00001C

# define CLKDIVN 0x4C000014 /* clock divisor register */

#endif

 

#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)

ldr     r0, =pWTCON

mov     r1, #0x0

str     r1, [r0]


3.关中断;


/*

* mask all IRQs by setting all bits in the INTMR - default

*/

mov r1, #0xffffffff

ldr r0, =INTMSK

str r1, [r0]

# if defined(CONFIG_S3C2410)

ldr r1, =0x3ff

ldr r0, =INTSUBMSK

str r1, [r0]

# endif

 

#if 0

/* FCLK:HCLK:PCLK = 1:2:4 */

/* default FCLK is 120 MHz ! */

ldr r0, =CLKDIVN

mov r1, #3

str r1, [r0]

#endif

#endif /* CONFIG_S3C2400 || CONFIG_S3C2410 */

 

/*

* we do sys-critical inits only at reboot,

* not when booting from ram!

*/


4.cpu_init_crit(SDRAM初始化);


#ifndef CONFIG_SKIP_LOWLEVEL_INIT

adr r0, _start /* r0 <- current position of code   */

ldr r1, _TEXT_BASE /* test if we run from flash or RAM */

cmp     r0, r1                  /* don't reloc during debug         */

blne cpu_init_crit

#endif


5.设置栈;

6.时钟初始化clock_init;



#ifndef CONFIG_SKIP_LOWLEVEL_INIT

    bl clock_init

#endif   

7.重定位:把代码从flash读到SDRAM里面去,读到链接地址去。


#ifndef CONFIG_SKIP_RELOCATE_UBOOT

relocate: /* relocate U-Boot to RAM     */

adr r0, _start /* r0 <- current position of code   */

ldr r1, _TEXT_BASE /* test if we run from flash or RAM */

cmp     r0, r1                  /* don't reloc during debug         */

beq     clear_bss

ldr r2, _armboot_start

ldr r3, _bss_start

sub r2, r3, r2 /* r2 <- size of armboot            */

8.清bss段


9.调用C函数start_armboot


以上9部称为硬件相关初始化。


前8部称为第一阶段。


第二阶段从start_armboot开始。


1.gd指针指向(128字节内存)


2.一系列初始化


for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {

if ((*init_fnc_ptr)() != 0) {

hang ();

}

}

CPU初始化


单板初始化


init_fnc_t *init_sequence[] = {

cpu_init, /* basic cpu dependent setup */

board_init, /* basic board dependent setup */

interrupt_init, /* set up exceptions */

env_init, /* initialize environment */

init_baudrate, /* initialze baudrate settings */

serial_init, /* serial communications setup */

console_init_f, /* stage 1 init of console */

display_banner, /* say that we are here */

flash初始化:



#ifndef CFG_NO_FLASH

/* configure available FLASH banks */

size = flash_init ();

display_flash_config (size);

#endif /* CFG_NO_FLASH */

malloc初始化(192K)

/* armboot_start is defined in the board-specific linker script */

mem_malloc_init (_armboot_start - CFG_MALLOC_LEN);

nand 初始化


#if (CONFIG_COMMANDS & CFG_CMD_NAND)

puts ("NAND:  ");

nand_init(); /* go init the NAND */

#endif

环境变量初始化:默认值或者在flash上存储的值


/* initialize environment */

env_relocate ();

死循环:

for (;;) {

main_loop ();

}

 s = getenv ("bootcmd");

倒计时:


if (bootdelay >= 0 && s && !abortboot (bootdelay)) {

# ifdef CONFIG_AUTOBOOT_KEYED

int prev = disable_ctrlc(1); /* disable Control C checking */

# endif

 

# ifndef CFG_HUSH_PARSER

        {

            printf("Booting Linux ...n");            

        run_command (s, 0);

        }

# else

parse_string_outer(s, FLAG_PARSE_SEMICOLON |

    FLAG_EXIT_FROM_LOOP);

# endif




关键字:S3C2440  u-boot  源码 引用地址:04-S3C2440u-boot学习之u-boot分析(3)之源码第1、2阶段

上一篇:04-S3C2440u-boot学习之u-boot分析(4)之u-boot命令实现
下一篇:04-S3C2440u-boot学习之u-boot分析(1)编译体验

推荐帖子

时尚手机变手镯 Dial Phone美丽创意
由JungDaeHoon设计的一款前卫的手镯式概念手机DialPhone,外形时尚,设计师将手机设计成环形,可以像手镯一样戴在手腕上,相当有创意。该手机的数字键通过手镯边缘透射出来,然后根据手镯上对应的按键拨号,接听来电应该是要靠外接耳机来协助完成。在手镯接口处有一个小型的LED显示屏,可以刚好显示下时间、信号强度或来电号码,并且还可以将时间透射到人的手上,以方便查看。时尚手机变手镯DialPhone美丽创意发光很有意思
xyh_521 创意市集
MAX32630FTHR-一种人体脉搏呼吸率及血氧浓度在线监测系统
(1)作品名称:一种人体脉搏呼吸率及血氧浓度在线监测系统(2)作品实现功能简介:首先,本系统通过压力传感技术监测人体的心率、呼吸率和体动状态,提供一种非穿戴式的人体基本体征信息监测方案。其次,本系统利用MAX30102心率血氧传感器实现人体心率、血氧参数的采集,提供一种穿戴式的人体基本信息监测方案。再次,本系统接入到云平台(米家智能平台),手机APP可以直观地观察人体的体征信息,查看某段时间的生命体征曲线变化。同时将数据存入SD卡中,方便利用数据校准算法。
Justice_Gao MAX32630FTHR设计大赛
textbox获得焦点时打开输入法出现的问题
我想在textbox获得焦点时,自动打开输入法我在textbox的getfocus事件中时这样写的:inputMethod.setIME(true);inputPanel1.Enabled=true;inputMethod是callInputMethod的一个实例publicclasscallInputMethod{publicstaticexternIntPtrImmGetContext(IntPt
zhaojiang1 嵌入式系统
俺的C习题(5)——这个很简单,圈哥看你能挑出什么?
如题/*practise8.2*//*这个程序很简单,就是把输入的整数转换成字符型输出*/#includestdio.hchar*itoa(intn,charstr)//鬼知道我当时怎么会起了这么一个名字...{ intnegative=0; inti=0; charbuffer=0; /*处理负数*/ if(n0) {n=-n;negative=1;//那一年,哥真的是不懂MCU,以至于动不动就int...
辛昕 编程基础
机载 SAR 运动补偿传感器研究
提出一种不依赖于机载主惯导的运动传感器方案———基于GNSS/SINS的组合运动信息系统。即在SAR成像期间输出以纯惯性为主的信息以保证较高的相对定位精度,供SAR成像补偿;同时,GNSS/SINS的组合保证了长时间的绝对定位精度。介绍了这种运动传感器的原理、数学模型、工作流程控制。实验结果表明,基于GNSS/SINS的运动传感器具有很高的精度,完全满足了SAR成像的精度要求,特别适合于没有机载主惯导机载SAR运动补偿传感器研究
frozenviolet 测试/测量
老师是这么教我们进修单片机的
看到不少网友都在问怎样提高自己的能力,我在这里想谈一下我自己当年的学习过程。我学的是计算机系的通讯工程专业,主要的发展方向是做计算机网络偏软件这一块,这点从我的毕业设计课题《宾馆客房管理系统》就能看出来。因为带到通讯,所以学校里也教数电模电单片机什么的。其中《单片机和通讯接口》这门课我学到了很多东西,可以说,整个大学觉得最有收获的就是这门课。我的老师上课很有特性,首先没有教材,理由是现在技术一日千里,等到教材出来就已经淘汰了。我们直接拿磁盘从老师的电脑上拷课件,然后打印。通常讲到单片机这
ssjatq 单片机
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved