U-Boot中的地址

U-Boot版本:1.1.6

以U-Boot中的SMDK2410和JZ2440为目标板进行学习

0x30000000 : SDRAM起始地址                           

             //include\configs\smdk2410.h中定义宏起始地址和大小
               #define PHYS_SDRAM_1		0x30000000 /* SDRAM Bank #1 */
               #define PHYS_SDRAM_1_SIZE 	0x04000000 /* 64 MB */

0x30000100: 传给内核的TAG参数列表起始地址

             //board/smdk2410/smdk2410.c中board_init函数中设置	      
	        gd->bd->bi_arch_number = MACH_TYPE_SMDK2410; /* arch number of SMDK2410-Board */             
	        gd->bd->bi_boot_params = 0x30000100;         /* adress of boot parameters */

0x30007FC0: Linux内核的64byte的头的地址                         

             //include\configs\smdk2410.h文件中的宏,定义了环境变量"bootcmd"
                 #define CONFIG_BOOTCOMMAND	"nand read.jffs2 0x30007FC0 kernel; bootm 0x30007FC0"
             // 当超时后执行环境变量bootcmd中的2个命令,先将将内核复制到 0x30007FC0,然后执行do_bootm,
                 if (argc < 2) {//bootm 后面不带地址时
		    addr = load_addr;
	          } else {       //将0x30007FC0赋给addr,
		    addr = simple_strtoul(argv[1], NULL, 16);
                  }
             //然后对头部的Magic Number比较,CRC校验,CPU架构等等一些比较、处理,调用lib_arm/ArmLinux.c中的do_bootm_linux函数
             // 从64byte的头中取出内核起始地址ih_ep 0x30008000,然后启动内核
                theKernel = (void (*)(int, int, uint))ntohl(hdr->ih_ep);
                theKernel (0, bd->bi_arch_number, bd->bi_boot_params);
0x30008000:Linux内核的起始地址ih_ep,由U-Boot的工具制作uImage时在内核头部添加64byte
0x33F80000: 链接地址,U-Boot在SDRAM中的地址,在board/smdk2410/config.mk中定义 TEXT_BASE=0x33f80000

0x40000:CFG_ENV_OFFSET 宏定义的环境变量在flash中的地址,saveenv之后才会存储。CFG_ENV_SIZE 环境变量空间长度


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值