bootloader---22.u-boot-2010.06-rc1移植之2搭建框架

原创 2016年08月30日 11:13:13
. 准备工作
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.  160 CROSS_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.o boot_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后写到内存中.

[参考文章]  
版权声明:本文为博主原创文章,转载请注明出处。

相关文章推荐

移植u-boot-2011.09-rc1到FL2440(2)

这篇进行移植第二步,支持NAND FLASH的读写,我的板子的NAND FLASH是K9F1G08U0A,128M 8BIT。     1.去掉对NOR FLASH的支持 UBOOT默认支...

u-boot-2010.06在unsp2440上的移植1

u-boot-2010.06在unsp2440上的移植1 一、 步骤说明: 进行u-boot的移植,我们分成以下几步完成: NorFlash启动 可以读写NAND FLASH...

u-boot-2010.06在unsp2440上的移植2

一、 步骤三:U-boot支持NAND启动 经过前两步我们的开发板已经支持了u-boot的NOR启动,在嵌入式开发中,由于nor FLASH的速度及容量上的原因,经常被NAND所替代,下面我们研究一...

u-boot-2010.06移植到TQ2440

  • 2010-06-09 09:18
  • 3.05MB
  • 下载

U-boot在开发板上移植过程详解(1)---bootloader架构分析

本例中采用的同样是前边一贯的实验板,这里就不对板子资源做进一步介绍了。     我们知道,bootloader是系统上电后最初加载运行的代码。它提供了处理器上电复位后最开始需要执行的初始化代码。在P...

U-boot分析与移植(1)----bootloader分析

一、Boot Loader 概念 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操...

U-boot 201103rc1在s3c2440上的移植

移植环境 主机:Oracl VM VirtualBox + RedHat9.0开发板:FL2440编译器:arm-linux-gcc-4.3.2u-boot:201103rc1 步骤 u-b...

飞凌OK6410开发板之u-boot-2011.06-rc2移植之愚见续—SOLVE FLASH FAILED

对于上篇介绍的飞凌OK6410开发板之u-boot-2011.06-rc2移植方法,通过自己的OK6410开发板实践验证,是可行的,但是在最后面启动的时候,串口输出UBOOT启动画面会定格在FLASH...

飞凌OK6410开发板之u-boot-2011.06-rc2移植之愚见

最近,对UBOOT产生了点兴趣,以前一直用的都是飞凌官方自带的uboot1.16版本,记得当时的这个版本还不支持板载的DM9000网卡,后来就在其基础上学着去移植DM9000网卡驱动,虽然移植是成功了...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)