移植U-BOOT-2.14.07至MICRO2440开发板

发布者:VelvetWhisper最新更新时间:2022-07-08 来源: csdn关键字:移植  U-BOOT  MICRO2440  开发板 手机看文章 扫描二维码
随时随地手机看文章

一、编写目的

本文档用于记录移植U-BOOT-2.14.07到MICRO 2440开发板的过程。方便日后工作、学习中查阅/参考相关设置方法。


U-BOOT移植部分参考“u-boot-2014.04移植手册(TQ2440)”。


二、U-BOOT移植

所有版本的u-boot源代码压缩包都可以在ftp://ftp.denx.de/pub/u-boot/下载。关于u-boot源代码的信息,看http://www.denx.de/wiki/U-Boot/SourceCode。本文档使用的u-boot源码为当前最新版本u-boot-2014.07.tar.bz2(网盘:http://pan.baidu.com/s/1gdJ0u3p)。


1. 解压源码

为了适应更多的CPU,U-BOOT的源码目录结构会越来越复杂,本文档只针对MICRO 2440开发板进行开发,该开发板使用的CPU为三星的S3C2440(arm920t)。


 解压U-BOOT源码到工作目录


# tar -xvf /media/sf_ShareDIR/MICRO2440/source/u-boot-2014.07.tar.bz2 -C ./


# cd ./u-boot-2014.07/


2. 建立MICR02440开发板配置

a) 建立board下的micro2440目录


#cp ./board/samsung/smdk2410/ ./board/samsung/micro2440 -rf


#mv ./board/samsung/micro2440/smdk2410.c ./board/samsung/micro2440/micro2440.c


b) 修改micro2440下的Makefile文件


# vim ./board/samsung/micro2440/Makefile

c) 建立include/configs下的micro2440配置文件


# cp include/configs/smdk2410.h include/configs/micro2440.h


d) 修改U-BOOT配置文件


# vim include/configs/micro2440.h

#define CONFIG_SYS_PROMPT       "MICRO2440 # "


e) 修改顶层vim boards.cfg,增加开发板配置(旧版本UBOOT在MAKEFILE配置)


# vim boards.cfg

3. 时钟初始化

a) 修改start.S中时钟初始化代码


# vim ./arch/arm/cpu/arm920t/start.S


# if defined(CONFIG_S3C2410)


        ldr     r1, =0x3ff


        ldr     r0, =INTSUBMSK


        str     r1, [r0]


# endif


#if defined(CONFIG_S3C2440)


        ldr    r1, =0x7fff


        ldr    r0, =INTSUBMSK


        str    r1, [r0]


#endif /*CONFIG_S3C2440*/


#if defined(CONFIG_S3C2440)


        #define MPLLCON 0x4C000004


        #define UPLLCON 0x4C000008


        #define CAMDIVN 0x4C000018


        ldr     r0, =CAMDIVN


        mov     r1, #0


        str     r1, [r0]


        ldr     r0, =CLKDIVN


        mov     r1, #0x05


        str     r1, [r0]


        mrc     p15, 0, r0, c1, c0, 0


        orr     r0, r0, #0xc0000000


        mcr     p15, 0, r0, c1, c0, 0


        ldr     r0, =UPLLCON


        ldr     r1, =0x38022


        str     r1, [r0]


        /*


        ** When you set MPLL&UPLL values,you have to set the UPLL


        ** value first and then the MPLL value.(Needs intervals


        ** approximately 7 NOP)


        */


        nop


        nop


        nop


        nop


        nop


        nop


        nop


        ldr     r0, =MPLLCON


        ldr     r1, =0x5c011


        str     r1, [r0]


#else


        /* FCLK:HCLK:PCLK = 1:2:4 */


        /* default FCLK is 120 MHz ! */


        ldr     r0, =CLKDIVN


        mov     r1, #3


        str     r1, [r0]


#endif  /* CONFIG_S3C2440 */


#endif  /* CONFIG_S3C24X0 */


b) 屏蔽micro2440.c时钟初始化代码


在上一步中修改start.S的时候,已经增加了时钟初始化的代码。因此需要屏蔽掉micro2440.c文件下的时钟初始化代码。


# vim board/samsung/micro2440/micro2440.c 


int board_early_init_f(void)


{

//      struct s3c24x0_clock_power * const clk_power =


//                                      s3c24x0_get_base_clock_power();


        struct s3c24x0_gpio * const gpio = s3c24x0_get_base_gpio();


#if 0


        /* to reduce PLL lock time, adjust the LOCKTIME register */


        writel(0xFFFFFF, &clk_power->locktime);


        /* configure MPLL */


        writel((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV,


               &clk_power->mpllcon);



        /* some delay between MPLL and UPLL */


        pll_delay(4000);


        /* configure UPLL */


        writel((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV,


               &clk_power->upllcon);


        /* some delay between MPLL and UPLL */


        pll_delay(8000);


#endif


        /* set up the I/O ports */


        writel(0x007FFFFF, &gpio->gpacon);


        writel(0x00044555, &gpio->gpbcon);


4. 编译并下载至于RAM运行

a) 由于需要通过DNW(参考MICRO2440用户手册)下载UBOOT到SDRAM上运行,因此需要先去掉底层初始化相关的代码,如SDRAM、NAND初始化的代码,通过定义CONFIG_SKIP_LOWLEVEL_INIT宏即可。另外需要设置CONFIG_SYS_TEXT_BASE为0x32000000,通过DNW下载BIN文件到这个地址运行。


# vim include/configs/micro2440.h


#define CONFIG_SYS_TEXT_BASE    0x32000000


#define CONFIG_SKIP_LOWLEVEL_INIT


b) 屏蔽U-BOOT中暂时未用到的功能(如果不屏蔽,将编译不过)


# vim include/configs/micro2440.h


(1)


#if 0


#define CONFIG_CS8900           /* we have a CS8900 on-board */


#define CONFIG_CS8900_BASE      0x19000300


#define CONFIG_CS8900_BUS16     /* the Linux driver does accesses as shorts */


#endif


(2)


#if 0


#define CONFIG_USB_OHCI


#define CONFIG_USB_OHCI_S3C24XX


#define CONFIG_USB_KEYBOARD


#define CONFIG_USB_STORAGE


#define CONFIG_DOS_PARTITION


#endif


(3)


#if 0


#define CONFIG_CMD_DHCP


#define CONFIG_CMD_ELF


#define CONFIG_CMD_NAND


#define CONFIG_CMD_PING


#define CONFIG_CMD_REGINFO


#define CONFIG_CMD_USB


#endif


(4)


#if 0


#define CONFIG_CMD_FAT


#define CONFIG_CMD_EXT2


#define CONFIG_CMD_UBI


#define CONFIG_CMD_UBIFS


#define CONFIG_CMD_MTDPARTS


#define CONFIG_MTD_DEVICE


#define CONFIG_MTD_PARTITIONS


#define CONFIG_YAFFS2


#define CONFIG_RBTREE


#endif


c) 编译


# make micro2440_config


# make ARCH=arm CROSS_COMPILE=arm-linux-


d) 运行


设置开发板从NOR启动,使用友善之臂提供的DNW(FriendlyARM BIOS 2.0 for 2440的d选项)下载生成的u-boot.bin文件至RAM中运行。运行结果如下图所示,可以正常输出,但无法初始化FLASH,是因为还没移植好NOR FLASH的驱动。

5. 移植NOR FLASH

MICRO 2440开发板使用的NOR FLASH型号为SST39VF1601。因此需要为U-BOOT增加对NOR的支持。在u-boot中添加对Nor flash的支持比较简单,大多数Nor flash都支持CFI接口,而u-boot有对cfi flash的驱动支持。对于SSTVF1601,并不支持标准的CFI接口,所以得使用JEDEC接口。但jedec_flash.c中并没有SSTVF1601的配置信息,所以得手动添加上。


a) 修改jedec_table结构体,增加对SST39VF1601的支持


#ifdef CONFIG_SYS_FLASH_LEGACY_1024Kx16


        {       /* MICRO2440 SST39VF1601 */


                .mfr_id         = (u16)SST_MANUFACT,


                .dev_id         = SST39VF1601,


                .name           = "SST39VF1601",


                .uaddr          = {


                        [1] = MTD_UADDR_0x5555_0x2AAA /* x16 */


                },


                .DevSize        = SIZE_2MiB,


                .CmdSet         = P_ID_AMD_STD,


                .NumEraseRegions= 4,


                .regions        = {


                         ERASEINFO(0x1000,96),


                         ERASEINFO(0x1000,160),


                         ERASEINFO(0x1000,240),


                         ERASEINFO(0x1000,16),


                }


        }


#endif


# vim ./drivers/mtd/jedec_flash.c


b) 修改开发板的NOR配置为CONFIG_SYS_FLASH_LEGACY_1024Kx16


# vim include/configs/micro2440.h


#define CONFIG_SYS_FLASH_LEGACY_1024Kx16


#define CONFIG_SYS_MAX_FLASH_SECT       (512)


c) 重新编译并下载至RAM中运行


如下图所示,已经可以正常识别NOR FLASH。

d) 测试FLASH读写命令


Ø 解锁FLASH


# protect off all


Ø 格式化FLASH


 # erase 0 +200000


Ø 复制数据至FLASH中


# cp.b 32000000 0 200000


Ø 比较数据


# cmp.b 0 32000000 200000


注意:经过上面几个测试后,FLASH的数据已经是混乱的,因此已无法通过NOR启动SUPERVIVI了,需要使用J-LINK重新烧写SUPERVIVI-128MB。


6. 移植DM9000网卡

a) 屏蔽原有网卡配置,这一步在前面已经修改过的


# vim include/configs/micro2440.h


#if 0


#define CONFIG_CS8900           /* we have a CS8900 on-board */


#define CONFIG_CS8900_BASE      0x19000300


#define CONFIG_CS8900_BUS16     /* the Linux driver does accesses as shorts */


#endif


b) 增加DM9000网卡配置


# vim include/configs/micro2440.h


#define CONFIG_DRIVER_DM9000


#define CONFIG_DM9000_BASE 0x20000300


#define DM9000_IO CONFIG_DM9000_BASE


#define DM9000_DATA (CONFIG_DM9000_BASE + 4)


#define CONFIG_DM9000_USE_16BIT


c) 根据实际网络设置网络参数


# vim include/configs/micro2440.h


#define CONFIG_NETMASK          255.255.255.0


#define CONFIG_IPADDR           192.168.2.123


#define CONFIG_SERVERIP         192.168.2.222


#define CONFIG_ETHADDR          10:23:45:67:89:AB


d) 修改网卡初始化函数


# vim ./board/samsung/micro2440/micro2440.c


int board_eth_init(bd_t *bis)


{

        int rc = 0;


#ifdef CONFIG_CS8900


        rc = cs8900_initialize(0, CONFIG_CS8900_BASE);


#endifi


 


#ifdef CONFIG_DRIVER_DM9000

[1] [2]
关键字:移植  U-BOOT  MICRO2440  开发板 引用地址:移植U-BOOT-2.14.07至MICRO2440开发板

上一篇:micro2440写的第一个驱动-LED
下一篇:移植Linux 2.6.39至Micro2440开发板

推荐阅读最新更新时间:2024-10-29 04:54

OK6410A 开发板 (三) 25 u-boot-2021.01 boot 解析 U-boot 内存命令 md
md.b $address $count (从地址$address处显示$count个字节的数据 b=byte,字节,8位) md.w $address $count (从地址$address处显示$count个字的数据 w=word,字 ,16位) md.l $address $count (从地址$address处显示$count个双字的数据 l=long,双字,32位) 内存里的数据 = tftp 51000000 2led_c.bin dm9000 i/o: 0x18000300, id: 0x90000a46 DM9000: running in 16 bit mode MAC: 76:c5:cb:38
[单片机]
U-Boot在基于BF561的嵌入式Linux系统上的移植
1 引言 嵌入式Linux系统常用的Boot Loader有arm-boot、redboot、U-Boot等。U-Boot (全称Universal Boot Loader)是当前比较流行的遵循GPL条件的开放源码项目。U-Boot具有源码公开的特点,开发人员可根据自身需要进行裁减;支持多种处理器和嵌入式操作系统内核;具有多种设备驱动源码:支持多种引导方式;具有功能强大且成熟、稳定等诸多优点。在嵌入式系统开发过程中广泛采用。U-Boot严重依赖于底层硬件,不同的CPU或嵌入式板及设备需要不同的U-Boot,因此,在嵌入式系统中建立通用的U-Boot是非常困难的,故U-Boot需针对开发版本量身定做。 2 开发平台 系统的开
[工业控制]
<font color='red'>U-Boot</font>在基于BF561的嵌入式Linux系统上的<font color='red'>移植</font>
MIPS 移植 Android “Honeycomb”平台
美普思科技公司(MIPS Technologies, Inc)宣布,已正式授权获得 Android™ 3.0,即 “Honeycomb”的源代码,并正将此最新版 Android 移植到 MIPSTM架构。对设计 Android 产品的MIPS客户来说,这将显著加速基于 MIPS 架构进行平板电脑和 Google 电视产品的开发。 MIPS 科技公司营销和业务开发副总裁 Art Swift 表示:“Android 对于MIPS 来说一直是个重要的平台。开始的时候,我们专注于把Android引入手机以外的市场;现在我们已经在市场上看到了基于 Android 和 MIPS的电视、机顶盒及其他产品。Android 也为 MIPS
[手机便携]
S3C2440 开发板实战(9):poll机制
内核:linux -2.6.22.6 内核执行poll过程 从代码的角度来看,poll机制是通过应用程序调用poll() 函数,poll()函数的使用方法可以通过man poll进行查看,可仿照最终程序中进行改写,这里不做重复说明。配合驱动函数中相对应的drv_poll() 函数配套使用的。函数执行的入口当然是应用程序中的poll()函数,接着进入内核中的sys_poll() 函数,poll机制的函数在路经:linux/fs/select.c下,原代码如下: 739 asmlinkage long sys_poll(struct pollfd __user *ufds, unsigned int nfds, 740
[单片机]
S3C2440 <font color='red'>开发板</font>实战(9):poll机制
移植u-boot-2010.03 --- 使用tftp下载并运行内核
在解决了u-boot网卡驱动后,其实就可以通过tftp下载内核,并运行内核 1,查看系统参数 WU_SMDK6410 # printenv bootargs=console=ttySAC,115200 bootcmd=nand read 0x50008000 0x100000 0x500000;bootm 0x50008000 bootdelay=10 baudrate=115200 ethaddr=00:40:5c:26:0a:5b ipaddr=192.168.1.123 serverip=192.168.1.127 gatewayip=192.168.1.1 netmask=255.255.255.0 stdin=s
[单片机]
寄存器版本的跑马灯操作流程(战舰开发板V3)
寄存器版本的跑马灯操作流程(战舰开发板V3) 跑马灯需要配置的IO口 PB5&PE5两个IO口。 需要配置的寄存器 RCC_APB2ENR外设时钟使能寄存器 GPIOx_CRL端口配置低寄存器 ODR端口输出寄存器 BSRR端口位设置/清除寄存器 BRR端口位清除寄存器 IO口寄存器说明 配置IO口的流程 Led.c #include led.h #include stm32f10x.h void LED_Init(void) // LED初始化函数体定义 { RCC- APB2ENR|=1 3; // 使能时钟 RCC- APB2ENR|=1 6; // 使能时钟
[单片机]
寄存器版本的跑马灯操作流程(战舰<font color='red'>开发板</font>V3)
uCOS51移植心得[社区]
前一段时间,我参与了一个SNMP网管板的项目,我负责硬件设计和单板软件开发。该板的硬件由MCS51+RTL8019AS组成,有64K FLASH 和64K SRAM。软件部分有操作系统和TCPIP协议栈。硬件比较简单,用了一个月就搞定了,协议栈我参考了老古开发板的部分程序又上网找了SNMP源代码也很快完成了,但是测试时发现当使用较低时钟频率的CPU时(为了降低成本),由于ASN.1编解码部分过于庞大,而我的程序又是一个大循环,AGENT的响应速度受到严重影响,用户界面也反应迟钝。更坏的消息是公司为了适应市场需求,还要在上面跑PPP和HTTP。那样的话,我就得用40MHz的AT89C51RD2或者人为的把程序断成几部分然后用状态机的方
[嵌入式]
06-S3C2440学习之移植2012u-boot到S3C2440(移植过程四)支持Nand Flash+支持DM9000网卡
一、支持nand读写 移植 uboot到S3C2440(移植过程一)新建单板+修改时钟+SDRAM+UART(←点击查看)过程中,为了避免当时编译出现的错误,我们屏蔽了 include/configs/smdk2440.h: //#defineCONFIG_CMD_NAND (1)取消#defineCONFIG_CMD_NAND的注释,编译出现如下错误: (2)因为include/configs/smdk2440.h中: CONFIG_S3C2410改为了CONFIG_S3C2440,所以下面的定义没了 (3)分析下nand是如何发命令 数据 地址的。 CLE高:命令 ALE高:地址 (4)把d
[单片机]
06-S3C2440学习之<font color='red'>移植</font>2012u-boot到S3C2440(<font color='red'>移植</font>过程四)支持Nand Flash+支持DM9000网卡
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved