您的位置:首页 > 其它

[置顶] 亮仔移植u-boot系列之-- S3c2440在最新版本U-boot-2015.10移植(支持SPL模式启动) -- 1

2015-12-04 21:23 357 查看
 

我的qq:631223432欢迎交流,转载请注明

第一步:下载最新的2015-10版本并配置

    首先在u-boot官网上下载最新的U-boot-2015.10版本,通过命令 sudo tar xvf u-boot-2015.10.tar.bz2 后解压,进入u-boot目录,执行:
    make smdk2410_config
   出现lib/asm-offsets.c:1: error: bad value (armv4) for -march= switch
    这是因为没有指定交叉编译器工具所致,因此输入
   sudo gedit Makefile命令
    编辑u-boot根目录下的MakeFile:
    ifeq ($(HOSTARCH),$(ARCH))
   CROSS_COMPILE ?= 

    endif
    ++CROSS_COMPILE=arm-linux- //加入交叉编译工具链的支持
    重新make,出现:
   Error: selected processor does not support `bx lr'的错误,显然,这是arm-linix-gcc版本过低引起的不能识别bx命令引起的错误,需要安装高版本的编译器.
    在友善之臂的官网上下载arm-linux-gcc4.4.3,详细安装arm-linux-gcc4.4.3过程网上教程很多,本文就不介绍怎么安装了.重新输入命令:
    make smdk2410_config
    make
   代码编译没有问题,编译环境设置成功.
 

第二步: 添加并编辑适合自己开发板的目录文件

      1. 在board\samsumg\目录下添加yl2440目录,将smdk2410目录下的所有文件全部拷贝到yl2440目录中.
       1.1 修改目录下的makefile:
obj-y := yl2440.o boot_init.o
obj-y += lowlevel_init.o

 
         1.2 修改目录下的Kconfig:
if TARGET_YL2440
4000

config SYS_BOARD
default "yl2440"

config SYS_VENDOR
default "samsung"

config SYS_SOC
default "s3c24x0"

config SYS_CONFIG_NAME
default "yl2440"

endif

 
    2.在include\configs\目录下添加yl2440.h目录,将smdk2410.h内容全部拷贝到yl2440.h目录下
    3.在configs\目录下加入yl2440_deconfig文件
CONFIG_ARM=y
CONFIG_TARGET_YL2440=y
CONFIG_SYS_PROMPT="YL2440 #"

     4.进入arch\arm目录
          4.1 修改目录下的Kconfig文件:
config TARGET_YL2440
bool "Support yl2440"
select CPU_ARM920T
source "board/samsung/yl2440/Kconfig"

 
   重新执行
   make clean
   make yl2440_config
   make
   后编译成功,此时针对本开发板的文件修改添加成功.
 

第三步: 修改编译适合自己板卡的u-boot-spl.bin(BL1.bin)

    前言:为什么需要将原先u-boot-1.1.6版本一个bin拆分成两个不同功能的bin——bl1.bin&bl2.bin

   之前u-boot-1.1.6版本前4k映射到ARM S3C2440的steppingstone内,即将NAND Flash的前4K自动映射到CPU的4K IRAM里面,执行CPU的相关初始化和代码搬移到外部SDRAM的工作,假如这些工作相关的代码链接后超出了4K范围外,那么整个代码无法搬移到SDRAM中得到正常执行.
   u-boot-2015.10版本通过CONFIG_SPL_BUILD宏来控制MAKE编译产生uboot.bin或uboot-spl.bin.我之前网上查到的资料写的有点不对,并非是通过在代码中加入:
   #define CONFIG_SPL_BUILD
   来控制的,因为我在定义了CONFIG_SPL_BUILD后MAKE会产生语法错误,正确的方法为,输入命令:
  make menuconfig
 选择选项
  boot images --->
  发现并没有Enable SPL的选项,退出menu后编辑uboot根目录下的Kconfig文件,修改如下代码:
menu "Boot images"

-- config SUPPORT_SPL
--	bool
++ config SUPPORT_SPL
++     bool "support spl"

   重新make menuconfig后可以看到
  boot images --->
      [] support spl
      [] Enable SPL
      [] Enable SDRAM location for SPL stack
  三个选项.将头两个选项勾选,保存退出后make在SPL目录下生成u-boot-spl.bin.将头两个选项去掉后make,则在uboot根目录下生成
u-boot.bin.我们看到u-boot-spl.bin即本文之前提到的BL1,大小为2K,u-boot.bin为BL2,大小为196K.

   yl2440目标板针对BL1,BL2任务功能的划分

   
在yl2440.h文件注释掉宏,并添加以下宏:            
-- #define CONFIG_S3C2410
-- #define CONFIG_SMDK2410
++ #define CONFIG_S3C2440  //目标板为2440
++ #define CONFIG_YL2440
++ #define CONFIG_SYS_TEXT_BASE 0x30008000      //定义BL2.bin的链接地址为0x30008000
++ #define CONFIG_SPL_TEXT_BASE 0x0                  //定义BL21.bin的链接地址为0x0
++ #define CONFIG_SPL_MAX_SIZE  0x1000             //定义BL1的大小最大4K,由S3C2440 CPU决定,超出会报编译错
++ #define CONFIG_SPL_STACK    0x1000                  //定义BL1堆栈起始为0x1000
++ #define BL2_MTD_OFFSET      0X20000                //定义BL2在NAND Flash128K偏移,即起始Block为Block1,128K/Block
++ #define BL2_MTD_LENTF       0x100000                //定义BL2在NAND Flash大小占用1M</span>

   
BL1任务划分:
    1. 看门狗,中断,CPU时钟初始化
    2. 设置在BL1模式下的SP指针
    3. 搬移位于Nand Flash BL2位置的代码到SDRAM 0x30008000处
    4. 将PC指针指向0x30008000,即BL2 Start.S程序入口地址
   
BL2任务划分:
    1. 将BL2代码段0x30008000进行动态重定位
    2. 做u-boot-1.1.6 _start_arm_boot类似NAND初始化,串口初始化,网卡初始化等工作并接收命令引导Linux系统
 
    
下一章将说明如何修改BL1.
 
 
 
   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: