ARM Linux bootloader笔记

发布时间: 2024-07-29
来源: 电子工程世界

 1     .text   //指定了后续编译出来的内容放在代码段【可执行】

 2     .global  //告诉编译器后续跟的是一个全局可见的名字【可能是变量,也可以是函数名】

 3     _start   /*函数的其实地址,也是编译、链接够程序的起始地址。由于程序是通过加载器来加载的,

          必须找到_start名字的函数,因此_start必须定义成全局的,以便存在于编译后的全局符合表中,

          供其他程序【如加载器】寻找到。*/

 4     _start:

 5     /*1.关看门狗*/

 6     ldr r0,=53000000

 7     /*2.设置时钟*/

 8     

 9     /*3.初始化SDRAM*/

10     ldr r0,=MEM_CTL_BASE

11     adr r1,sdram_config //得到当前地址

12     ldr r2,[r1],#4

13     add r3,r0,#(13*4)

14 

15     1:    

16     ldr r2,[r1],#4

17     ltr r2,[r0],#4

18     cmp r0,r3

19     bne  1b  //不相等,调回前面的1标号

20     /*4.重定位*/ 

21     ldr sp,=34000000  //设置函数栈,执行最高内存,设置要再main函数之前,避开片内4k内存。

22     bl copy_code_to_sdram

23     

24     /*5.执行main函数*/ 

25     ldr lr,=halt //main函数返回地址

26     ldr pc,=main

27     halt:

28         b halt

29     sdram_config:

30     .long 0x22011110   //BWSCON

31     .long 0x00000700   //BANKCON0

32     .long 0x00000700   //BANKCON1

33     .long 0x00000700   //BANKCON2

34     .long 0x00000700   //BANKCON3

35     .long 0x00000700   //BANKCON4

36     .long 0x00000700   //BANKCON5

37     .long 0x00018005   //BANKCON6

38     .long 0x00018005   //BANKCON7

39     .long 0x008C04F4   //REFRESH

40     .long 0x000000B1   //BANKSIZE

41     .long 0x00000030   //MRSRB6

42     .long 0x00000030   //MRSRB7

43 

44     


文章来源于: 电子工程世界 原文链接

本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。