u-boot-1.1.6在mini2440开发板上的移植

本文详细介绍了如何在友善之臂mini2440开发板上移植u-boot-1.1.6,包括下载源码、编译环境准备、修改配置选项、添加开发板支持、移植Nor Flash AM29lv160DB驱动、支持DM9000网卡、移植NAND FLASH以及引导Linux内核的相关设置。在移植过程中涉及了代码修改、编译测试等多个环节。
摘要由CSDN通过智能技术生成

uboot版本:u-boot-1.1.6
交叉编译器:3.4.5
开发板:友善之臂mini2440
开发板配置:SoC s3c2440 、网卡 DM9000 、 Nor Flash AM29LV160DB (2M) 、NAND FLash (256M) 、SDRAM (64M)
1.移植准备工作

1)下载u-boot-1.1.6源码:
u-boot-1.1.6的官方下载地址为:ftp://ftp.denx.de/pub/u-boot/
我们需要下载的文件是:u-boot-1.1.6.tar.bz
2)解压u-boot-1.1.6源码到当前文件夹
解压命令是:# tar xvfj u-boot-1.1.6.tar.bz -C ./
3)进入u-boot-1.1.6目录开始移植工作
在当前目录下执行:# cd u-boot-1.1.6 回车,即可进入u-boot-1.1.6源文件目录。
4)测试源代码和编译环境
执行命令 :#make smdk2410_config后,系统显示:Configuring for smdk2410 board…。
执行命令:#make 后开始编译,编译完成,如何没有错误,则会生成u-boot.bin文件。
5)删除源文件目录里不需要的文件(此步骤可以不做),删除后文件结构更清晰

  • 删除board目录下除smdk2410文件夹外的所有文件夹
    #cd board
    #rm -fr !(smdk2410)
    #cd …

  • 删除cpu目录下除arm920t文件夹外的所有文件夹
    #cd cpu
    #rm -fr !(arm920t)
    #cd …

  • 删除include/configs/目录下除smdk2410.h外的所有文件
    #cd inclue/configs/
    #rm -fr !(smdk2410.h)
    #cd …
    #cd …

  • 删除include/目录下除asm-arm文件夹外的所有asm-xxx文件夹

  • 删除源文件根目录下除lib_arm和lib_generic文件夹外的所有lib_xxx文件夹

2.修改顶层Makefile,增加mini2440开发板配置选项

打开 源文件根目下的Makefile ,找到smdk2410板配置选项:
命令是#vim Makefile +1881
内容如下:

smdk2410_config :   unconfig 
    @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0

各项参数意义:

arm:CPU架构

 arm920t:CPU型号

smdk2410:开发板名称

NULL:开发者

s3c24x0:片上系统

参照此项添加mini2440的配置选项:

mini2440_config :   unconfig 
    @$(MKCONFIG) $(@:_config=) arm arm920t mini2440 NULL s3c24x0

3.建立mini2440开发板相关主代码

1)找到 /board/smdk2410 目录,将此目录复制为 /board/mini2440 ,打开mini2440目录,将smdk2410.c文件重命名为mini2440.c。打开同目录下Makefile文件,修改代码

COBJS   := smdk2410.o flash.o 

改为

COBJS   := mini2440.o flash.o 

2)将include/configs目录下的smdk2410.h文件复制为mini2440.h

将以上步骤建立的代码编译测试:
#make mini2440_config
Configuring for mini2440 board…
#make
将生成u-boot.bin 下载至开发板运行,发现并未打印出任何信息。原因是2410和2440在频率设置方面有所不同。
4 修改CPU频率设置
1)打开 /board/mini2440/mini2440.c ,然后修改board_init函数

int board_init (void) 
{ 
    S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER(); 
    S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO(); 
     
    clk_power->CLKDIVN = 0x05; /* 1 : 4 : 8 */ 
     
    __asm__(    "mrc    p15,0,r1,c1,c0,0\n" 
                "orr    r1,r1,#0xc0000000\n" 
                "mcr    p15,0,r1,c1,c0,0\n" 
                :::"r1" 
                );//异步总线
     
    /* to reduce PLL lock time, adjust the LOCKTIME register */ 
    clk_power->LOCKTIME = 0xFFFFFF; 
 
    /* configure MPLL */ 
    clk_power->MPLLCON = ((0x5c << 12) + (0x01 << 4) + 0x01); //400MHz
 
    /* some delay between MPLL and UPLL */ 
    delay (4000); 
 
    /* configure UPLL */ 
    clk_power->UPLLCON = ((0x38 << 12) + (0x02 << 4) + 0x02); //48MHz
 
    /* some delay between MPLL and UPLL */ 
    delay (8000); 
 
    /* set up the I/O ports */ 
    gpio->GPACON = 0x007FFFFF; 
    gpio->GPBCON = 0x00044555; 
    gpio->GPBUP = 0x000007FF; 
    gpio->GPCCON = 0xAAAAAAAA; 
    gpio->GPCUP = 0x0000FFFF; 
    gpio->GPDCON = 0xAAAAAAAA; 
    gpio->GPDUP = 0x0000FFFF; 
    gpio->GPECON = 0xAAAAAAAA; 
    gpio->GPEUP = 0x0000FFFF; 
    gpio->GPFCON = 0x000055AA; 
    gpio->GPFUP = 0x000000FF; 
    gpio->GPGCON = 0xFF95FFBA; 
    gpio->GPGUP = 0x0000FFFF; 
    gpio->GPHCON = 0x002AFAAA; 
    gpio->GPHUP = 0x000007FF; 
 
    /* arch number of SMDK2410-Board */ 
    gd->bd->bi_arch_number = MACH_TYPE_SMDK2410; 
 
    /* adress of boot parameters */ 
    gd->bd->bi_boot_params = 0x30000100; 
 
    icache_enable(); 
    dcache_enable(); 
 
    return 0; 
} 

2)串口初始化时需要获取系统时钟,这里修改 /cpu/arm920t/s3c24x0/speed.c ,

get_PLLCLK()中

return((CONFIG_SYS_CLK_FREQ * m) / (p << s)); 

改为

return((CONFIG_SYS_CLK_FREQ * m * 2) / (p << s)); 

这是因为2410和2440主频计算公式的差异。
其他修改:

/* return HCLK frequency */ 
ulong get_HCLK(void) 
{ 
    return(get_FCLK()/4 ); 
} 
 
/* return PCLK frequency */ 
ulong get_PCLK(void) 
{ 
    return(get_HCLK()/2 ); 
} 

再次进行编译测试,烧录测试,出现打印信息:

U-Boot 1.1.6 (Feb 2 2019 - 15:45:14)

DRAM: 64 MB<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值