S3C2440之uboot移植
邮箱:junjietianya@163.com
QQ:286015867
裸奔S3C2440断断续续快搞完了,该linx还是wince呢?犹豫了几天,打算wince吧,可是电脑装vs2005+wince6.0成功后投标时灰的了,呵呵!还是选择linux。但linux和windows差别很大,还是一步步来,一个星期学习了基本的指令,并学习了韦东山的书后了解了Makefile,哈哈,刚开始还不知Makefile是一个文件还是像记事本的txt的后缀。又逢周末,还是先uboot吧,免费的,符合linux的发展。废话少说,先动手吧!
一、移植环境
1,宿主机:vmware+fedora9
2,开发板:友善之臂MICRO2440-64M NANDFLASH
3,UBOOT: u-boot:u-boot-2009.08.tar.bz2
(下载网站:ftp://ftp.denx.de/pub/u-boot/)里面有最新的UBOOT。
二,uboot目录结构
u-boot的stage1代码通常放在cpu/xxxx/start.S文件中,他用汇编语言写成;
u-boot的stage2代码通常放在lib_xxxx/board.c文件中,他用C语言写成。
三,建立符合自己开发板的UBOOT
1,解压UBOOT:解压到的目录任意。
#tar –xjvf u-boot-2009.08.tar.bz2
2,建立自己开发项目的路径:由于2440与2410差不多,所以我们建立的项目以2410为模板,在2410的基础上作小量修改即可。
A,进入u-boot-2009.08/board/samsung/ 目录
cd u-boot-2009.08/board/samsung/
B,建立目录:zjj-2440
mkdir zjj-2440
2,将smdk2410里面的文件复制到刚才创建的目录
cp smdk2410 /* zjj-2440/
3,进入zjj-2440修改smdk2410.c为zjj-2440.c
cd zjj-2440
mv smdk2410.c zjj-2440.c
4,修改zjj-2440目录下的Makefile
vim Makefile打开Makefile
COBJS := zjj-2440.o flash.o //因在zjj-2440下我们将smdk2410.c改名为zjj-2440.c
5,使用cd ../../../回到根目录,
6,建立zjj-2440的头文件
cp include/configs/smdk2410.h include/configs/zjj-2440.h
7,修改根目录下的Makefile
CROSS_COMPILE ?= arm-linux- //指定交叉编译器为arm-linux-gcc
smdk2410_config : unconfig //2410编译选项格式
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0
zjj-2440_config : unconfig //2440编译选项格式
@$(MKCONFIG) $(@:_config=) arm arm920t zjj-2440 samsung s3c24x0
8, zjj-2440开发板u-boot的stage1入口点分析。
一般在嵌入式系统软件开发中,在所有源码文件编译完成之后,链接器要读取一个链接分配文件,在该文件中定义了程序的入口点,代码段、数据段等分配情况等。那么我们的zjj-2440开发板u-boot的这个链接文件就是cpu/arm920t/u-boot.lds,打开该文件部分代码如下:
vim
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm) //定义生成文件的目标平台是arm
ENTRY(_start) //定义程序的入口点是_start
SECTIONS
{
//其他一些代码段、数据段等分配
. = 0x00000000;
. = ALIGN(4);
.text :
{
cpu/arm920t/start.o (.text)
*(.text)
}
..................
..................
}
9,定义了程序的入口点是_start,所以打开cpu/arm920t/start.S(即u-boot的stage1部分)
vim cpu/arm920t/start.S
.globl _start
_start: b start_code //将程序的执行跳转到start_code处
/*
* the actual start code
*/
start_code:
/*
* set the cpu to SVC32 mode
*/
mrs r0,cpsr
bic r0,r0,#0x1f
orr r0,r0,#0xd3
msr cpsr,r0
因为下面的led不适合我们开发板的led所以注释掉,添加我们的led
10,在include/configs/my2440.h头文件中添加CONFIG_S3C2440宏
vim 在include/configs/my2440.h
#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */
#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */
#define CONFIG_S3C2440 1 /* in a SAMSUNG S3C2440 SoC */
11,测试编译
make zjj-2440_config
(如果出现Configuring for。。。表示编译通过)
12,make 编译
13,在DNW下使用【a】absolute 。。。。下载。将开发打到nandflash启动就可以看到想要的效果了。我刚才编写的是中间两个灯灭了。
用户377235 2012-12-10 09:32