U-boot移植到mini2440上

本文详述了将U-Boot从smdk2410移植到mini2440的过程,包括文件拷贝、代码修改和编译。移植目标是创建一个基础版U-Boot,支持串口通信、环境变量存储于NOR Flash,通过TFTP加载NFS根文件系统。移植步骤涉及汇编语言和C代码的修改,如内存配置、频率设定、中断处理等。移植过程中,需要理解U-Boot启动流程,并根据mini2440硬件特性调整代码。
摘要由CSDN通过智能技术生成

本文章中的很多内容参考友善之臂的说明文档《mini2440之U-boot移植详细手册-20100419》,使用的U-boot的版本是u-boot-2010.03

说明:此次移植的目的不是为了制作一个功能强大的U-boot,只是做一个最简单的U_boot。该U-boot能够实现通过串口和电脑通信,可以将环境变量保存在NOR Flash中,通过TFTP服务器将使用NFS根文件系统的内核镜像从电脑拷贝到内存中执行。而且这个U-boot只支持从NOR中启动。

在移植U-Boot之前建议对U-Boot中的源码组织结构有较深的理解,可参考我的另一篇博文Bootloader介绍和Uboot源码结构


移植U-Boot的原则是,先选取与目标板相似的板子,将其的源码内容进行一份拷贝,然后从整个U-Boot的启动流程更改相应的代码。

一、移植初处理

拷贝文件

因为smdk2410与mini2440最相近,所以我们选择smdk2410作为修改对象。

  • 拷贝/board/samsung/smdk2410到/board/samsung/mini2440

  • 拷贝/include/configs/smdk2410.h到/include/configs/mini2440.h

修改顶层makefile

仿照smdk2410添加如下代码:

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

初步修改/board/samsung/mini2440目录中的文件

在makefile中修改下列代码:

COBJS   := smdk2410.o flash.o

修改成:

COBJS   := mini2440.o flash.o

将文件smdk2410.c重新命名为mini2440.c

现在可以尝试着编译:

make mini2440_config
make all

二、具体代码移植

现在的思路是,跟随着U-Boot代码的启动流程进行修改和开发板相关的内容。

第一阶段(汇编语言)

.globl _start
_start: b   start_code

首先运行的是标号为start_code处的代码

下面的代码是针对需要改的部分。

@   bl  coloured_LED_init
@   bl  red_LED_on

因为没有必要实现LED的操作,所以直接注释掉。

s3c2440的频率设定方式与其它的有些区别,需要一些额外的寄存器如下:

#ifdef CONFIG_S3C2440
#  define CLK_CTL_BASE   0x4C00000
#  define MDIV_405    0x7f << 12 
#  define PSDIV_405   0x21 
#  define MDIV_200    0xa1 << 12 
#  define PSDIV_200   0x31 
#endif

需要屏蔽的子中断个数也不一样,所以要进行不同的设定:

#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_S3C2440 */ 

下面修改lowlevel_init.S,这个文件位于/board/samsung/mini2440目录下,显然和硬件关系密切。

这个文件主要是对开发板的内存地址空间硬件的挂载有关,开发板上的NOR FLASH、NAND FLASH、SDRAM、DM9000都是挂载在内存地址空间上的,所以和它们相关的内容需要在这个文件中设置。

注意:该文件不要用smdk2410中的lowlevel_init.c,应该以sbc2410x文件夹中的lowlevel_init.c为修改代码来源。否则,网络功能无法使用。

#define Trp         0x0 /* 2clk */
#define REFCNT          1113

将上述代码修改成下列代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值