[置顶] 亮仔移植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.
相关文章推荐
- Android Studio 快捷键
- Android自定义组件之圆形图片
- OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)
- 用eclipse创建servlet小程序
- POJ 2352 Stars (区间建树,单点更新)
- cf C - Booking System
- centos下httpd-2.4的编译安装
- leetcode Count and Say
- project euler 40
- centos下httpd-2.4的编译安装
- android 布局优化(一)
- 问题处理:找不到Pch预编译文件?
- MATLAB 利用filter函数实现滑动平均滤波
- 什么是Code First(EF Code First 系列)
- Android 图片选择器
- cfB - Art Union
- HTML 元素和属性--备份
- linux 磁盘性能fio-hdd
- project euler 39
- if语句实现分支结构 课后习题