u-boot移植!
时间:2009-07-25 来源:crazytyt
因为移植过程与下面列的差不多,所以就不细写了,移植好的放在下面,只是完成了启动。
|
转载:移植U-Boot.1.3.1到S3C244和S3C2410
首先,U-Boot1.3.1还没有支持s3c2440,移植仍是用2410的文件稍作修改而成的。2440和2410的区别在我移植1.2.0的文章中已经写了,这里不再赘述。
对于1.3.1和1.2.0的差别,我初看了一下,(对于ARM920T内核)应该是增加了对ATMEL公司的AT91RM9200系列处理器的支持。至于S3C24X0系列的芯片,原理上并没有什么大的变化。
一、在U-Boot中建立自己的开发板类型,并测试编译。
我为开发板取名叫: tekkaman2440
0 在工作目录下解压U-Boot。
[tekkamanninja@ARM9-Host working]$ tar -xjvf u-boot-1.3.1.tar.bz2
1 进入U-Boot目录,修改Makefile(我在fedora 8 下,比较喜欢使用KWrite)
[tekkamanninja@ARM9-Host working]$ cd u-boot-1.3.1
[tekkamanninja@ARM9-Host u-boot-1.3.1]$ kwrite Makefile
#为tekkaman2440建立编译项 sbc2410x_config: unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t sbc2410x NULL s3c24x0 tekkaman2440_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t tekkaman2440 tekkaman s3c24x0
各项的意思如下:
arm: CPU的架构(ARCH)
arm920t: CPU的类型(CPU),其对应于cpu/arm920t子目录。
tekkaman2440: 开发板的型号(BOARD),对应于board/tekkaman/tekkaman2440目录。
tekkaman: 开发者/或经销商(vender)。
s3c24x0: 片上系统(SOC)。
同时在“ifndef CROSS_COMPILE ”之前加上自己交叉编译器的路径,比如我使用crosstool-0.43制作的基于2.6.24内核和gcc-4.1.1-glibc-2.3.2的ARM9TDMI交叉编译器,则: CROSS_COMPILE=/home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-
2 在/board子目录中建立自己的开发板tekkaman2440目录 由于我在上一步板子的开发者/或经销商(vender)中填了 tekkaman ,所以开发板tekkaman2440目录一定要建在/board子目录中的tekkaman目录下 ,否则编译会出错。 [tekkamanninja@ARM9-Host u-boot-1.3.1]$ cd board
[tekkamanninja@ARM9-Host board]$ mkdir tekkaman tekkaman/tekkaman2440
[tekkamanninja@ARM9-Host board]$ cp -arf sbc2410x/* tekkaman/tekkaman2440/
[tekkamanninja@ARM9-Host board]$ cd tekkaman/tekkaman2440/
[tekkamanninja@ARM9-Host tekkaman2440]$ mv sbc2410x.c tekkaman2440.c 还要记得修改自己的开发板tekkaman2440目录下的Makefile文件,不然编译时会出错:
[tekkamanninja@ARM9-Host tekkaman2440]$ kwrite Makefile
COBJS := tekkaman2440.o flash.o
3 在include/configs/中建立配置头文件
[tekkamanninja@ARM9-Host tekkaman2440]$ cd ../../..
[tekkamanninja@ARM9-Host u-boot-1.3.1]$ cp include/configs/sbc2410x.h include/configs/tekkaman2440.h
4 测试编译能否成功
1、配置
[tekkamanninja@ARM9-Host u-boot-1.3.1]$ make tekkaman2440_config
Configuring for tekkaman2440 board... 可能出现的问题:
(1) 如果出现:
$ make tekkaman2440_config
Make1927: *** 遗漏分隔符 。 停止。
请在U-boot的根目录下的Makefile的
@$(MKCONFIG) $(@:_config=) arm arm920t tekkaman2440 tekkaman)
前加上“Tab”键
2、测试编译
[tekkamanninja@ARM9-Host u-boot-1.3.1]$make
测试通过后进行下一步 二、修改U-Boot中的文件,以同时匹配2440和2410。 1 修改/cpu/arm920t/start.S
#include <config.h> |
(0)修改寄存器地址定义
#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)|| defined(CONFIG_S3C2440) |
(1)修改中断禁止部分
#if defined(CONFIG_S3C2410) |
(2)修改时钟设置(2440的主频为405MHz。)
# if defined(CONFIG_S3C2440) |
红色部分是我添加的,利用vivi的代码。
(3)将从Flash启动改成从NAND Flash启动。
在以下U-Boot的重定向语句段:
#ifdef CONFIG_AT91RM9200 |
的后面添加上:
#ifdef CONFIG_S3C2440_NAND_BOOT |
在“ldr pc, _start_armboot”之前加入:
# if defined(CONFIG_tekkaman2440_LED) |
修改目的:如果看到只有LED1亮了,说明U-Boot的第一阶段已完成!(针对友善之臂SBC2440V4,不是这块开发板的,必须修改或不添加)
在 “ _start_armboot: .word start_armboot ” 后加入:
.align 2 |
2 在board/tekkaman/tekkaman2440加入NAND Flash读函数文件,拷贝vivi中的nand_read.c文件到此文件夹即可:
#include <config.h> |
3 修改board/tekkaman/tekkaman2440/Makefile文件
...... |
4 修改include/configs/tekkaman2440.h文件,添加如下内容:
......
/*JFFS2 Support */
/* USB Support 080218 */
|
5 修改board/tekkaman/tekkaman2440/lowlevel_init.S文件
依照开发板的内存区的配置情况, 修改board/tekkaman/tekkaman2440/lowlevel_init.S文件,我利用友善之臂提供的vivi源码里的信息做了如下更改:
...... |
修改其对GPIO和PLL的配置(请参阅开发板的硬件说明和芯片手册):
...... |