U-boot移植(一)

                                                                                                                        U-boot移植

 之前花左一段时间,开始学习u-boot的移植,先从start.S,u-boot第一段执行的代码分析,明白左u-boot系点引导的过程,知道左u-boot是分为两个阶段既,再跳入第2段C程序前,要用汇编来实现:设置异常向量;设置CPU时钟,频率,终端控制器;初始化内存控制器;拷贝第二阶段代码到SDRAM里;设置堆栈等操作。各结构体的含义(前提对ARM汇编熟悉),跟住就写下详细步骤如下:

 

1.删除多余文件:

  1.board/下除smdk2410,把其余的都删除,因为

   目标板CPUS3C2440

  2.cpu/下删除除arm920t 以外的所有其他cpu目录

  3.在根目录下的lib_xxx的库文件目录里留lib_armlib_generic

  4.include/目录下asm-xxx的文件目录只留asm-arm

  5.删除include/configs目录下除smdk2410.h以外的所有头文件。

2.编译测试:

  首先先建立自己的目录,我把/board/smdk2410目录改为yangyi2440目录,命令:cp –R board/smdk2410/ board/yangyi2440

  接着就修改smdk2410.cyangyi2440.c

  接着修改该目录下的Makefile文件中(大概在28行左右)

           COBJS  =yangyi2440.o flash.o

  接着建立目标板配置文件:include/config目录下将smdk2410.h复制为yangyi2440.h(因为要有对应的配置文件对应新目录)

接着修改顶层Makefile文件大概1878行,增加:

yangyi2440_config : unconfig

 @$(MKCONFIG)$(@:_config=)arm arm920t yangyi2440

NULL s3c24x0

arm :CPU的架构

arm920t:CPU的类型

    yangyi2440 :对应在board目录下建立新的开发板项目的目录samsung:新开发板项目目录的上级目录

如直接在board下建立新的开发板项目的目

录, 则这里就为NULLs3c24x0:CPU型号

  接着配置交叉编译器:修改顶层的Makeflie,(大概128行)修改:

ifeq($(ARCH),arm)

CROSS_COMPILE=arm-linux-        

endif

接着就可以进行编译测试了:

   进入u-boot-1.1.6目录

输入命令:make yangyi2440_config(而呢句话究竟做了什么可以睇韦东山的那本嵌入式LINUX书的u-boot编译个章)

再输入:make all

如果无出错,就会生成u-boot.bin文件,到呢到基本既目标板框架就建立好啦

跟住落黎就可以开始真正既移植啦。(修改配置)和(更改驱动)。

 

3.增加对S3C2440的支持:

一.(1)首先要做既系修改SDRAM配置,首先先进入board/yangyi2440目录修改lowlevel_init.S(大概54行)修改成如下:

    #define B1_BWSCON    (DW16) //(IDE)
#define B2_BWSCON    (DW16) 
//(IDE)
#define B3_BWSCON    (DW16 + WAIT + UBLB) 
//(CS8900)
#define B4_BWSCON    (DW16) 
//(DM9000)
#define B5_BWSCON    (DW8)
  
#define B6_BWSCON    (DW32)
#define B7_BWSCON    (DW32)

首先呢到要讲下D位数点解要艮设,(开始我都唔明,后来查资料就明,

啦,首先系艮既:S3C2440 bank0:接norflash(16位),bank1和bank2

都系接IDE硬盘接口(16位),bank3:接CS8900网卡(16位),bank4:

接DM9000网卡(16位),bank5:接8位既串口,bank6:接32位既SDRAM

知道硬件分布后就修改相应的位就OK。(所以有问题解决唔到就百度,哈)

(2)继续修改lowlevel_init.S文件既大概126行如下:

#define REFCNT 0x4f4

(系咩意思呢,系艮既,我块主板既HCLK时钟配置为100MHZ,而查看S3C2440及芯片PDF可以查到一条公式系计算SDRAM刷新频率:

period=7.8125us, HCLK=100Mhz, (2048+1-7.8125*100)=0x4f4所以就系艮计算出黎既)

二.配置时钟:

 (1)首先进入目录/cpu/arm920t/start.S系呢内面修改,因为距系系统启动既第一阶段运行既代码,修改如下:

将原来的时钟设置屏蔽:

#if 0   
     //FCLK:HCLK:PCLK = 1:2:4 

           //default FCLK is 120 MHz ! 

           ldr r0, =CLKDIVN
 mov r1, #3
 str r1, [r0]

#endif 

(2)将stack_setup子程序放到relocate子程序前面(呢部重要),跟住系statck_setup子程序后加一条跳转指令调用clock_init子函数

    进行时钟初始化:(原因在调用clock_init子函数时,要有到栈)

    //set up the stack 

stack_setup:                   
      ldr r0, _TEXT_BASE  //upper 128 KiB: relocated uboot   
      sub r0, r0, #CFG_MALLOC_LEN //malloc area                     
      sub r0, r0, #CFG_GBL_DATA_SIZE //bdinfo                       

      sub sp, r0, #12  //leave 3 words for abort-stack   

bl clock_init//系呢到加!!!!!!!

你可能感兴趣的:(汇编,测试,ide,makefile,编译器,代码分析)