mini2440_uboot移植笔记.yang

 update  20130426     by yangchaofeng     参考《【申嵌培训】mini2440之U-boot移植详细手册-20110908》

一、准备阶段

   下载软件:u-boot   下载地址:ftp://ftp.denx.de/pub/u-boot/
   u-boot-2009.11.tar.bz2     为《friendlyARM》参考文档版本

   u-boot-2010.03.tar.bz2       为《申嵌-uboot移植》参考文档版本

  本次使用较新的uboot版本:u-boot-2010.03.tar.bz2
  tar xvjf /yang/uboot_tools/u-boot-2010.03.tar.bz2

二、建立开发板文件,测试编译环境(6.1)

1、修改顶层Makefile(6.1.1) (目的:定义交叉编译工具链和开发板配置选项)
    vim Makefile 

CROSS_COMPILE ?=arm-linux-    
    yang2440_config :       unconfig
             @$(MKCONFIG) $(@:_config=) arm arm920t yang2440  samsung s3c24x0

2、在/board 中建立yang2440 目录和文件(6.1.2)
  
      复制sbc2410x 的文件(config.mk  flash.c  lowlevel_init.S  Makefile  yang2440.c)到此,做适当修改   
      cd samsung/

       mkdir yang2440
      cd yang2440
      cp -arf /yang/uboot/u-boot-2010.03/board/sbc2410x/* ./
      mv sbc2410x.c yang2440.c

修改此目录下的:vim Makefile     
      COBJS := sbc2410x.o flash.o修改为:
      COBJS   := yang2440.o flash.o

3、在include/configs/中建立开发板配置文件(6.1.3) 
    cp include/configs/sbc2410x.h include/configs/yang2440.h

4、测试编译环境(6.1.4)  
    make yang2440_config
    make
  
  编译通过
  压缩:tar cjf u-boot-2010.03_000.tar.bz2 u-boot-2010.03

二、修正配置文件

  1、修改配置文件(6.5.2)   include/configs/yang2440.h
  
    vim include/configs/yang2440.h

    //#define CONFIG_S3C2410        1       /* specifically a SAMSUNG S3C2410 SoC   */
    //#define CONFIG_SBC2410X       1       /* on a friendly-arm SBC-2410X Board  */

/****************  add by yangchaofeng  ***********************************/
    #define CONFIG_S3C2440 1           /* in a SAMSUNG S3C2440 SoC */

#define CONFIG_YANG2440 1          /* on a YANG2440 Board */
    #define CONFIG_YANG2440_LED 1
    #define CONFIG_S3C2410_NAND_SKIP_BAD 1 /* input clock of PLL */   

/****************  add by yangchaofeng  ***********************************/
        
    修改vim include/asm/arch/s3c24x0_cpu.h 对S3C2440支持
    #ifdef CONFIG_S3C2400

 #include <asm/arch/s3c2400.h>
    #elif defined CONFIG_S3C2440
            #include <asm/arch/s3c2410.h>
    #else

2、添加CONFIG_S3C2440 定义,目的:对CONFIG_S3C2440的支持  (6.5.1)
  
    按照手册依次修改以下文件(6.5.1):
     ->common/serial.c                     
    cpu/arm920t/s3c24x0/interrupts.c

->cpu/arm920t/s3c24x0/timer.c
    ->include/serial.h
    ->cpu/arm920t/s3c24x0/speed.c
    include/asm-arm/arch-s3c24x0/s3c24x0.h(主要存放寄存器定义)

->s3c24x0_dma
        ->-->s3c24x0_clock_power
        ->s3c2410_nand
        ->-->s3c24x0_gpio  
  编译通过
  压缩:tar cjf u-boot-2010.03_001.tar.bz2 u-boot-2010.03 

三、探索启动代码(6.2)  (cpu/arm920t/start.S)
  
  1、修改CPU 频率初始化设置(6.2.2)

vim cpu/arm920t/start.S   
      加入:
      #define CLK_CTL_BASE    0x4C000000
      #define MDIV_405 0x7f << 12

#define PSDIV_405 0x21
    #define MDIV_200 0xa1 << 12
    #define PSDIV_200 0x31

#if defined(CONFIG_S3C2440)
          ldr r1, =0x7fff
          ldr r0, =INTSUBMSK
          str r1, [r0]
    #endif

#if defined(CONFIG_S3C2440)
    /* FCLK:HCLK:PCLK = 1:4:8 */
            ldr r0, =CLKDIVN
            mov r1, #5
            str r1, [r0]

 mrc p15, 0, r1, c1, c0, 0
            orr r1, r1, #0xc0000000
            mcr p15, 0, r1, c1, c0, 0
            mov r1, #CLK_CTL_BASE

  mov r2, #MDIV_405
            add r2, r2, #PSDIV_405
            str r2, [r1, #0x04]
    #else/* FCLK:HCLK:PCLK = 1:2:4 */

/* default FCLK is 120 MHz ! */
            ldr     r0, =CLKDIVN
            mov     r1, #3
            str     r1, [r0]

#endif  /* CONFIG_S3C24X0 */

 

2、修改lowlevel_init.S 文件(6.2.3)

    为了匹配mini2440 的存储器位宽、速度、刷新率(总线上连接的Nor Flash 和SDRAM),需要修改lowlevel_init.S文件。 

 vim  board/samsung/yang2440/lowlevel_init.S
       
    #if defined(CONFIG_S3C2440)

#define Trp 0x2 /* 4clk */
    #define REFCNT 1012
    #else
    #define Trp 0x0 /* 2clk */
    #define REFCNT 0x0459
    #endif

#define B4_BWSCON               (DW16 + WAIT + UBLB)
    #define B3_BWSCON               (DW16)

3、修改代码重定向部分  cpu/arm920t/start.S(6.2.4)
  
     按照手册,添加相关代码

cp /yang/uboot_tools/u-boot-2010.03/board/embedclub/smdk2440a/nand_read.c board/samsung/yang2440/
    
    vim board/samsung/yang2440/Makefile
    COBJS   := nand_read.o yang2440.o flash.o

m cpu/arm920t/u-boot.lds
   
    board/samsung/yang2440/lowlevel_init.o
      board/samsung/yang2440/nand_read.o

 再次编译、烧写。串口有数据输出。此时LED1、LED3长亮,蜂鸣器长响!
     
  4、关闭为AT9200 写的LED 跳转(6.2.1)

 /*   注释这两行
            bl      coloured_LED_init
            bl      red_LED_on
    */

vim board/samsung/yang2440/yang2440.c
    
    原因在此://蜂鸣器为pwm输出功能,LED1、LED2、LED3、LED4依次为:输出、输入、输出、输入
    gpio->GPBCON = 0x00044556;

gpio->GPBUP = 0x000007FF;
   
    加入:
    #ifdef CONFIG_YANG2440_LED
            bl LED_on
    #endif

 

编译通过
   压缩:tar cjf u-boot-2010.03_002.tar.bz2 u-boot-2010.03
   
   将u-boot下载测试,可以输出信息。ED1、LED2、LED3、LED4亮一下,蜂鸣器响一下

四、修改初始化代码(6.3)
 
  1、修改   board/samsung/yang2440/yang2440.c (6.3.2)

vim board/samsung/yang2440/yang2440.c
     ->FCLK_SPEED
     ->board_init   //将4个LED管脚和buzzer设为输出

vim include/asm-arm/mach-types.h       添加机器码
        #define MACH_TYPE_YANG2440             1900


   编译通过
   压缩:tar cjf u-boot-2010.03_003.tar.bz2 u-boot-2010.03

增加debug信息输出:vim include/common.h
   #define DEBUG  1

2、修改lib_arm/board.c 文件(6.3.1)
  
     不做修改!无意义!!!

4、继续完善:CONFIG_S3C2440 定义,目的:对CONFIG_S3C2440支持  (6.5.1)
     按照手册依次修改以下文件(6.5.1):
     drivers/i2c/s3c24x0_i2c.c

include/asm-arm/arch-s3c24x0/s3c24x0.h(主要存放寄存器定义)
        -> s3c24x0_interrupt
        ->usb_device
        ->sdi  (SD)

 编译通过
    压缩:tar cjf u-boot-2010.03_004.tar.bz2 u-boot-2010.03   
  
  除LCD及video外,其它相关配置均已修改完成!

5、继续修改配置文件(6.5.2)include/configs/yang2440.h  
  
    vim include/configs/yang2440.h    
        ->Hardware drivers (DM9000)

6、 修改网络相关代码  (6.4.4)
    drivers/net/dm9000x.c
         ->dm9000_init 

 修改完后,编译、烧写。ping 测试网卡可以正常工作!!!
   
    压缩:tar cjf u-boot-2010.03_005.tar.bz2 u-boot-2010.03 

7、修改网络相关代码  (6.4.4)
     net/nfs.c
        ->#define NFS_TIMEOUT (10*2000UL)   

 修改为:CONFIG_BOOTCOMMAND=u-boot启动时不进入命令行下的默认执行命令:
     #define CONFIG_BOOTCOMMAND    "nfs 30008000 192.168.0.250:/opt/zImage.img;bootm"

 nfs烧写下载成功,内核启动不成功!!!
   
    刚开始怀疑是不是因为nand的问题,后来想了想,改了回了自己写的机器码1900->1999

 vim include/asm-arm/mach-types.h       添加机器码
    编译,烧写,内核启动成功!!!
       
 #define CONFIG_SYS_PROMPT               "[u-boot@YANG2440]# "
    #define CONFIG_BOOTARGS         "console=ttySAC0 root=/dev/nfs " \

 "nfsroot=192.168.0.250:/yang/filesystem/myfs_mini " \
                "ip=192.168.0.230:192.168.0.250:192.168.0.1:255.255.255.0:debian:eth0:off"

利用自己编译的文件系统,通过nfs挂接设置并成功!!!
      
       压缩:tar cvjf u-boot-2010.03_006.tar.bz2 u-boot-2010.03

修改:#define CONFIG_SYS_LOAD_ADDR            0x30008000 
       #define CONFIG_BOOTCOMMAND    "nfs 192.168.0.250:/opt/zImage.img;bootm"  //取掉了30008000

常用:
    nfs启动:nfs 30008000 192.168.0.250:/opt/zImage.img
         nfs 192.168.0.250:/opt/uImage-shenqian
             bootm

 

 setenv bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值