Bootloader(Vivi)源代码分析2

上传人:新** 文档编号:489914332 上传时间:2023-06-05 格式:DOC 页数:13 大小:56KB
返回 下载 相关 举报
Bootloader(Vivi)源代码分析2_第1页
第1页 / 共13页
Bootloader(Vivi)源代码分析2_第2页
第2页 / 共13页
Bootloader(Vivi)源代码分析2_第3页
第3页 / 共13页
Bootloader(Vivi)源代码分析2_第4页
第4页 / 共13页
Bootloader(Vivi)源代码分析2_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《Bootloader(Vivi)源代码分析2》由会员分享,可在线阅读,更多相关《Bootloader(Vivi)源代码分析2(13页珍藏版)》请在金锄头文库上搜索。

1、Bootloader源代码分析 -基于S3C2410处理器1.3 vivi代码分析vivi的代码包括arch,init,lib,drivers和include等几个目录,共200多条文件.Vivi主要包括下面几个目录:arch:此目录包括了所有vivi支持的目标板的子目录,例如s3c2410目录.drivers:其中包括了引导内核需要的设备的驱动程序MTD和串口.MTD目录下分map、nand和nor三个目录.init:这个目录只有main.c和version.c两个文件.和普通的C程序一样,vivi将从main函数开始执行.lib:一些平台公共的接口代码,比如time.c里的udelay和m

2、delay.include:头文件的公共目录,其中的s3c2410.h定义了这块处理器的一些寄存器.Platform/smdk2410.h定义了与开发板相关的资源配置参数,我们往往只需要修改这个文件就可以配置目标板的参数,如波特率、引导参数、物理内存映射等.1.4 vivi的运行vivi的运行也可以分为两个阶段:vivi的第一阶段完成含依赖于CPU的体系结构硬件初始化的代码,包括禁止中断、初始化串口、复制自身到RAM等.相关代码集中在head.S.Head.S:#include config.h#include linkage.h#include machine.h Start of exec

3、utable code ENTRYENTRY Exception vector table ;异常向量表物理地址 0x00: Reset;复位bReset 0x04: Undefined instruction exception;未定义的指令异常UndefEntryPoint:bHandleUndef 0x08: Software interrupt exception;软件中断异常SWIEntryPoint:bHandleSWI 0x0c: Prefetch Abort ;内存操作异常PrefetchAbortEnteryPoint:bHandlePrefetchAbort 0x10: D

4、ata Access Memory Abort;数据异常DataAbortEntryPoint:bHandleDataAbort 0x14: Not used;未使用NotUsedEntryPoint:bHandleNotUsed 0x18: IRQ exception;慢速中断处理IRQEntryPoint:bHandleIRQ 0x1c: FIQ exception;快速中断处理FIQEntryPoint:bHandleFIQ VIVI magics 0x20: magic number so we can verify that we only put .long 0 0x24:.lon

5、g 0 0x28: where this vivi was linked, so we can put it in memory in the right place.long _start 0x2C: this contains the platform, cpu and machine id.long ARCHITECTURE_MAGIC 0x30: vivi capabilities .long 0#ifdef CONFIG_PM;vivi考虑不需要使用电源管理 0x34:bSleepRamProc#endif#ifdef CONFIG_TEST 0x38:bhmi#endif Star

6、t VIVI headReset: disable watch dog timer;禁止看门狗计时器movr1, #0x53000000;WTCON寄存器地址是0x53000000,清0movr2, #0x0strr2, r1#ifdef CONFIG_S3C2410_MPORT3;不符合条件,跳到下面的关中断/* 在/vivi/include/autoconf.h中#undefCONFIG_S3C2410_MPORT3*/movr1, #0x56000000;GPACON寄存器地址是0x56000000movr2, #0x00000005strr2, r1, #0x70;配置GPHCON寄存

7、器mov r2, #0x00000001strr2, r1, #0x78;配置GPHUP寄存器movr2, #0x00000001str r2, r1, #0x74;配置GPHDAT寄存器#endif disable all interrupts;禁止全部中断movr1, #INT_CTL_BASEmovr2, #0xffffffffstrr2, r1, #oINTMSK;掩码关闭所有中断ldrr2, =0x7ffstrr2, r1, #oINTSUBMSK initialise system clocks;初始化系统时钟movr1, #CLK_CTL_BASEmvnr2, #0xff0000

8、00strr2, r1, #oLOCKTIMEldrr2, mpll_50mhzstrr2, r1, #oMPLLCON#ifndef CONFIG_S3C2410_MPORT1;满足条件,向下执行/* 在/vivi/include/autoconf.h中#undefCONFIG_S3C2410_MPORT1*/ 1:2:4movr1, #CLK_CTL_BASEmovr2, #0x3strr2, r1, #oCLKDIVNmrcp15, 0, r1, c1, c0, 0 read ctrl register orrr1, r1, #0xc0000000 Asynchronous mcrp15

9、, 0, r1, c1, c0, 0 write ctrl register now, CPU clock is 200 Mhz;CPU的频率是200MHzmovr1, #CLK_CTL_BASEldrr2, mpll_200mhzstrr2, r1, #oMPLLCON#else 1:2:2 mov r1, #CLK_CTL_BASE ldr r2, clock_clkdivn str r2, r1, #oCLKDIVN mrc p15, 0, r1, c1, c0, 0 read ctrl register orr r1, r1, #0xc0000000 Asynchronous mcr

10、p15, 0, r1, c1, c0, 0 write ctrl register now, CPU clock is 100 Mhz;CPU的频率是100MHz mov r1, #CLK_CTL_BASE ldr r2, mpll_100mhz str r2, r1, #oMPLLCON#endifblmemsetup;跳转到memsetup函数/*Memsetup函数的实现:ENTRY initialise the static memory set memory control registers;设置内存控制寄存器的初值movr1, #MEM_CTL_BASEadrlr2, mem_c

11、fg_val/* Data Area Memory configuration values.align 4mem_cfg_val:;定义好的13*4=52个字节初值.longvBWSCON;在/vivi/include/platform/smdk2410.h中赋值/* SDRAM从32位变成16位,需要修改vBWSCON的值 */.longvBANKCON0.longvBANKCON1.longvBANKCON2.longvBANKCON3/* 网卡控制器vBANKCON3的值可能需要修改 */.longvBANKCON4.longvBANKCON5.longvBANKCON6/* SDRA

12、M从32位变成16位,可能需要修改vBANKCON6的值 */.longvBANKCON7.longvREFRESH.longvBANKSIZE/* SDRAM从64MB变成32MB,需要修改vBANKSIZE的值 */.longvMRSRB6.longvMRSRB7*/addr3, r1, #521:ldrr4, r2, #4strr4, r1, #4cmpr1, r3bne1b;循环操作,直到13个寄存器赋值完成movpc, lr*/#ifdef CONFIG_PM;vivi考虑不需要使用电源管理 Check if this is a wake-up from sleepldrr1, PMST_ADDRldrr0, r1tstr0, #bneWakeupStart;查看状态,判断是否需要跳转到WakeupStart#endif#ifdef CONFIG_S3C2410_SMDK;SMDK开发板使用 All LED on;点亮开发板上的LEDmovr1, #GPIO_CTL_BASEaddr1, r1, #oGPIO_F;LED使用GPIOF组的管脚ldrr2,=0x55aa ;使能EINT0,EINT1,EINT2,EINT3,;另四个管脚配置成输出

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号