当前位置:首页 > 单片机 > 单片机
[导读] 一. 准备工作1. 软硬件主 机:VMWare--ubuntu 10.10开发板:TQ2440--128MB Nand, Kernel:3.4.0编译器:EABI-4.3.3_EmbedSky_20091210.tar.bz2u-boot:u-boot-2012.07.tar.bz22. 工具链,解压EABI-4.3.3_

一. 准备工作

1. 软硬件

主 机:VMWare--ubuntu 10.10

开发板:TQ2440--128MB Nand, Kernel:3.4.0

编译器:EABI-4.3.3_EmbedSky_20091210.tar.bz2

u-boot:u-boot-2012.07.tar.bz2

2. 工具链,解压EABI-4.3.3_EmbedSky_20091210.tar.bz2到/opt目录

root@ubuntu:~/uboot# ls /opt/EmbedSky/

4.3.3/ crosstools_3.4.5_softfloat/

3.这次移植是以smdk2410为模版,所以首先要删除多余的目录

//a.删除arch下除arm以外的所有目录

root@ubuntu:~/uboot/u-boot-2012.07/arch# find . -maxdepth 1 -type d | grep -v arm | xargs rm -rf

//b.arm/cpu下除arm920t以外的所有目录

root@ubuntu:~/uboot/u-boot-2012.07/arch/arm/cpu# find . -maxdepth 1 -type d | grep -v arm920t |xargs rm -rf

//c.arch/arm/cpu/arm920t 录下除s3c24x0以外的所有目录

root@ubuntu:~/uboot/u-boot-2012.07/arch/arm/cpu/arm920t# find . -maxdepth 1 -type d | grep -v s3c24x0 | xargs rm -rf

//d.arch/arm/include/asm下除arch-s3c24x0以外的所有arch-xxxx,proc目录不能删

root@ubuntu:~/uboot/u-boot-2012.07/include/asm# find . -maxdepth 1 -type d | grep -v arch-s3c24x0 | grep -v proc | xargs rm -rf

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

root@ubuntu:~/uboot/u-boot-2012.07/include/configs# ls | grep -v smdk2410.h | xargs rm -rf

//f.去掉board下多余的目录

root@ubuntu:~/uboot/u-boot-2012.07/board# find . -maxdepth 1 -type d | grep -v samsung | xargs rm -rf

root@ubuntu:~/uboot/u-boot-2012.07/board/samsung# find . -maxdepth 1 -type d | grep -v smdk2410 | xargs rm -rf

4. 生成内存可运行的u-boot

a. 修改Makefile

  1. 156 ifeq($(HOSTARCH),$(ARCH))

  2. 157 CROSS_COMPILE?=

  3. 158 endif

  4. 159

  5. 160CROSS_COMPILE ?= /opt/EmbedSky/crosstools_3.4.5_softfloat/gcc-3.4.5-glibc-2.3.6/arm-linux/bin/arm-linux-

b. 修改链接地址 board/samsung/smdk2410/config.mk

  1. #烧到板子上TEXT_BASE=0x33d80000

  2. 25 TEXT_BASE = 0x33d80000

  3. #仿真器调试TEXT_BASE=0x33000000

  4. 26 #TEXT_BASE = 0x33000000

  5. #为什么要选这个呢? 因其只要在内存中就可以了,但是因为TQ2440有一个选项

  6. [7] Download Program (uCOS-II or TQ2440_Test) to SDRAM and Run it

  7. 写到内存的0x33000000并运行,这样编出u-boot.bin后,直接写到内存就可以运行了,非常方便.

c.编译,直接用smdk2410的,比较省事

  1. make smdk2410_config

  2. make

二. 可以从nand_flash启动的u-boot

2.1 初始化内存

修改board/samsung/smdk2410/lowlevel_init.S

L54 #define B1_BWSCON (DW32) > #define B1_BWSCON (DW16)

L58#define B5_BWSCON (DW16)> #define B5_BWSCON (DW8)

L126#define REFCNT 1113 > #define REFCNT 0x4F4

2.2 初始化clock_controler ,并将u-boot代码复制到TEXT_BASE处

修改 arch/arm/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

#endif /* CONFIG_S3C24X0 */

/*

* we do sys-critical inits only at reboot,

* not when booting from ram!

*/

#ifndef CONFIG_SKIP_LOWLEVEL_INIT

#if 1

bl cpu_init_crit

#endif

#endif

/*把栈初始化提前,因为下面要调用C函数*/

/* Set up the stack */

stack_setup:

ldr r0, _TEXT_BASE /* upper 128 KiB: relocated uboot */

sub r0, r0, #CONFIG_SYS_MALLOC_LEN /* malloc area */

sub r0, r0, #CONFIG_SYS_GBL_DATA_SIZE /* bdinfo */

#ifdef CONFIG_USE_IRQ

sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)

#endif

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

bl clock_init /*调用clock_init,初始化clock*/

bl my_nand_init /*调用my_nand_init,进行nand flash初始化*/

#ifndef CONFIG_SKIP_RELOCATE_UBOOT

relocate: /* relocate U-Boot to RAM */

adr r0, _start /* r0 <- current position of code */

ldr r1, _TEXT_BASE /* test if we run from flash or RAM */

cmp r0, r1 /* don't reloc during debug */

beq clear_bss

ldr r2, _armboot_start

ldr r3, _bss_start

sub r2, r3, r2 /* r2 <- size of armboot */

#if 1

bl my_nand_read_page /*调用my_nand_read_page,将u-boot从nand复制到TEXT_BASE处*/

#else

add r2, r0, r2 /* r2 <- source end address */

copy_loop:

ldmia r0!, {r3-r10} /* copy from source address [r0] */

stmia r1!, {r3-r10} /* copy to target address [r1] */

cmp r0, r2 /* until source end addreee [r2] */

ble copy_loop

#endif

#endif /* CONFIG_SKIP_RELOCATE_UBOOT */

2.3

a. 在board/samsung/smdk2410目录下建文件boot_init.c,完成初始化clock_controler ,并将u-boot代码复制到TEXT_BASE处的实际操作

b. 在arch/arm/include/asm/arch-s3c24x0/s3c24x0.h中

struct s3c24x0_clock_power {

u32 LOCKTIME;

u32 MPLLCON;

u32 UPLLCON;

u32 CLKCON;

u32 CLKSLOW;

u32 CLKDIVN;

u32 CAMDIVN; /*增加*/

};

b. 同时在board/samsung/smdk2410/Makefile中

COBJS := smdk2410.o flash.oboot_init.o

c.在arch/arm/cpu/arm920t/u-boot.lds中,将lowlevel_init.o和boot_init.o链接到前4K.

.text :

{ arch/arm/cpu/arm920t/start.o (.text) board/samsung/smdk2410/lowlevel_init.o (.text) board/samsung/smdk2410/boot_init.o (.text) *(.text)

} boot_init.c.txt (下载后改名为boot.c放在board/samsung/smdk2410/下)

2.4 为了使u-boot启动后打印点东东,还需要修改arch/arm/cpu/arm920t/s3c24x0/speed.c

speed.c.txt(下载后改名为speed.c,替换以前的arch/arm/cpu/arm920t/s3c24x0/speed.c)

2.5. 最后写到内存0x33000000处还需要

a. 修改arch/arm/cpu/arm920t/start.S文件

161 #if 0

162 bl cpu_init_crit

163 #endif

b.修改 board/samsung/smdk2410/config.mk

25 #TEXT_BASE = 0x33d80000

26 TEXT_BASE = 0x33000000

2.6 make后写到内存中.


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

前端传递:表名 user,字段 username 字符串、age 数字、is_ikun 布尔,并且把这些值封装为了一个对象

关键字: 框架 前端

摘要:J2EE是目前企业开发的主流Java开发应用平台,文章主要介绍了轻量级J2EE中流行的Struts2、Spring和Hibernate三种框架。具体阐述了SSH框架的基本特征、优点以及SSH的无缝集成,并结合病房信...

关键字: 轻量级J2EE SSH 框架 无缝集成 病房信息管理系统

作 者:道哥,10年的嵌入式开发老兵。公众号:【IOT物联网小镇】,专注于:C/C、Linux操作系统、应用程序设计、物联网、单片机和嵌入式开发等领域。 公众号回复【书籍】,获取Linux、嵌入式领域经典书籍。转 载:欢...

关键字: boot 应用程序 操作系统

作 者:道哥,10年的嵌入式开发老兵。公众号:【IOT物联网小镇】,专注于:C/C、Linux操作系统、应用程序设计、物联网、单片机和嵌入式开发等领域。 公众号回复【书籍】,获取Linux、嵌入式领域经典书籍。转 载:欢...

关键字: boot 应用程序 操作系统

不论是在x86平台上,还是在嵌入式平台上,系统的启动一般都经历了bootloader到操作系统,再到应用程序,这样的三级跳过程。每一个相互交接的过程,都是我们学习的重点。这篇文章,我们仍然以x86平台为例,一起来看一下:...

关键字: boot 应用程序 操作系统

不论是在x86平台上,还是在嵌入式平台上,系统的启动一般都经历了bootloader到操作系统,再到应用程序,这样的三级跳过程。每一个相互交接的过程,都是我们学习的重点。这篇文章,我们仍然以x86平台为例,一起来看一下:...

关键字: boot 应用程序 操作系统

一、前言核心隐私数据无论对于企业还是用户来说尤其重要,因此要想办法杜绝各种隐私数据的泄漏。下面陈某带大家从以下三个方面讲解一下隐私数据如何脱敏,也是日常开发中需要注意的:配置文件数据脱敏接口返回数据脱敏日志文件数据脱敏文...

关键字: boot 接口

在软件研发这个领域,程序员的终极目标都是想成为一名合格的架构师。

关键字: 架构 框架 软件研发

时间格式化在项目中使用频率是非常高的,当我们的 API 接口返回结果,需要对其中某一个 date 字段属性进行特殊的格式化处理,通常会用到 SimpleDateFormat 工具处理。 SimpleDateFormat ...

关键字: boot 代码

“ 程序员是块砖,哪里需要哪里搬。 ” 公司内部的OA系统最近要升级改造,由于人手不够就把我借调过去了,但说真的我还没做过这方面的功能,第一次接触工作流的开发,还是有点好奇是个怎样的流程。 项目主要用 Springboo...

关键字: boot
关闭
关闭