【U-BOOT步骤】u-boot 移植步骤详解

uboot移植到an2410全记录

http://www.eechina.com/thread-6690-1-1.html

http://wenku.baidu.com/view/c6c5fad049649b6648d74745.html

U-BOOT  编写流程

Bootloader的两部分:

1、NANFLASH 前4KB 一开机就会被复制到RAM中,然后跳到RAM 去运行。(第一部分IPL)

2、如果bootloader 大于4KB,则利用前4KB的代码将NANFLASH上大于4KB部分的bootloader复制到RAM中去继续运行。(第二部分SPL)

IPL:关闭看门狗、中断à设置CPU频率à初始化化SDRAMà将NADFLASH上的代码拷贝到SDRAM上—>跳到代码入口执行代码。

1、  WDT

#define   main_addr  0x0

Start.S

Void start_main()   //低级别的main

{

WTCON=0x0;          //关闭看门狗

__asm__ __volatile(      //关闭中断

“mrs r0,cpsr\n”

“orr  r0,r0,#0xc0\n”
“msr  cpsr,r0\n”

:  :  :”r0”

);

//----------------设置CPU频率-----------//

MPLLCON=0X7F021; //405Mhz

CAMDIVN=0;

CLKDIVN=1|(2<<1);  //FCLK:HCLK:PCLK=8:2:1

//---初始化UART0,用于输出信息--//

GPHCON&=~(0xf<<8);

GPHCON|=(0x0a<<8);

//------初始化协处理器CP15------//

__asm__ __volatile(  

“mcr p15,0,0%,c1,c0,0\n”

:“r”((1<<1)|(0xf<<3)|(1<<12)|(3<<30))

);

//---------------初始化SDRAM-----------//

BWSCON=(2<<24);

BANKCON6=(3<<15)|1;

REFRESH=(1269)|(1<<18)|(1<<23);

BANKSIZE=1|(1<<5)|(1<<7);

MRSRB6=(3<<4);

//------------拷贝第二部分代码至SDRAM------//

nand_read(0x33000000, 0,100);

//-----------跳到SDRAM中的第2部分运行---------//

__asm__ __volatile(  

“ldr r0,=main \n”

“mov lr,pc\n”

“mov pc,r0\n”

:

:

:”r0”

);

}

Void main()        //第二部分的mian

{

}

//拷贝代码,一页一页的去拷贝

Void nand_read(unsigned char *buf, unsigned long nand_addr,int page_cnt)

{

Int I,j;

NFCONF=(3<<8);

//enable flash

NFCONT=1;

For(j=0;j< page_cnt;j++, nand_addr+=512)

{

NFCMMD=0X00;

NFADDR=nand_addr&0xff;

NFADDR=( nand_addr>>9)&0xff;

NFADDR=( nand_addr>>17)&0xff;

NFADDR=( nand_addr>>25)&1;

}

While(!(NFSTAT&1))

;

For(i=0;i<512;i++){

*buf=NFDATA;

Buf++;

}

//disable flash

NFCONT=(1<<1);

Return 0;

}


一、Boot Loader 的概念和功能

1、嵌入式Linux 软件结构与分布在一般情况下嵌入式Linux 系统中的软件主要分为以下及部分:
(1)引导加载程序:其中包括内部ROM 中的固化启动代码和Boot Loader 两部分。
而这个内部固化ROM 是厂家在芯片生产时候固化的,作用基本上是引导Boot Loader。有的芯片比较复
杂,比如Omap3,他在flash 中没有代码的时候有许多启动方式:USB、UART 或以太网等等。而S3C24x0 则很
简单,只有Norboot 和Nandboot。
(2)Linux kernel 和drivers。
(3)文件系统。包括根文件系统和建立于Flash 内存设备之上的文件系统(EXT4、UBI、CRAMFS 等等)。
它是提供管理系统的各种配置文件以及系统执行用户应用程序的良好运行环境的载体。
(4)应用程序。用户自定义的应用程序,存放于文件系统之中。
在Flash 存储器中,他们的一般分布如下:

【U-BOOT步骤】u-boot <wbr>移植步骤详解

2、在嵌入式Linux 中为什么要有BootLoader在linux 内核的启动运行除了内核映像必须在主存的适当位置,CPU 还必须具备一定的条件:

1. CPU 寄存器的设置:R0=0;
R1=Machine ID
(即Machine Type Number,定义在linux/arch/arm/tools/mach‐types);
R2=内核启动参数在 RAM 中起始基地址;

2. CPU 模式:必须禁止中断(IRQs 和FIQs);
CPU 必须 SVC 模式;

3. Cache 和 MMU 的设置:MMU 必须关闭;
指令 Cache 可以打开也可以关闭;
数据 Cache 必须关闭;

    但是在CPU 刚上电启动的时候,一般连内存控制器都没有配置过,根本无法在内存中运行程序,更不可
能处在Linux 内核的启动环境中。为了初始化CPU 及其他外设,使得Linux 内核可以在系统主存中跑起来,并
让系统符合Linux 内核启动的必备条件,必

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值