前言:这是本人在学习u-boot期间的初级移植笔记,故功能较简陋、代码较粗略,后续会有高级篇完善。
u-boot版本:1.1.6
交叉编译器:3.4.5
开发板:友善之臂mini2440
开发板配置:SoC s3c2440 、网卡 DM9000 、 Nor Flash AM29LV160DB (2M) 、NAND FLash (256M) 、SDRAM (64M)
以源文件已存在的 smdk2410项目为基础进行移植工作
1.移植准备工作1).下载u-boot-1.1.6源码,并解压;
2).建立u-boot的source insight工程,方便查找及分析;
3).安装arm-Linux交叉编译器,版本3.4.5;
2.修改顶层Makefile1).打开 /Makefile ,找到smdk2410板配置选项:
smdk2410_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
smdk2410_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0各项参数意义:
arm:CPU架构
arm920t:CPU型号
smdk2410:开发板名称
NULL:开发者
s3c24x0:片上系统
类比此项添加配置选项:
mini2440_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t mini2440 NULL s3c24x0
mini2440_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t mini2440 NULL s3c24x0 3.建立主代码1).找到 /board/smdk2410 目录,将此目录复制为 /board/mini2440 ,打开mini2440目录,将smdk2410.c文件重命名为mini2440.c。打开同目录下Makefile文件,修改代码
COBJS := smdk2410.o flash.o
COBJS := smdk2410.o flash.o为
COBJS := mini2440.o flash.o
COBJS := mini2440.o flash.o2).建立开发板配置头文件。将 /include/configs/smdk2410.h 复制为 /include/configs/mini2440.h ,打开此文件,添加
#define CONFIG_S3C2440 1 /* in a SAMSUNG S3C2440 SoC */
#define CONFIG_S3C2440 1 /* in a SAMSUNG S3C2440 SoC */4.修改CPU频率设置
1).将以上步骤建立的代码编译测试:
root@book-desktop:/home/book/Desktop/u-boot-1.1.6# make mini2440_config
Configuring for mini2440 board...
root@book-desktop:/home/book/Desktop/u-boot-1.1.6# make
root@book-desktop:/home/book/Desktop/u-boot-1.1.6# make mini2440_config Configuring for mini2440 board... root@book-desktop:/home/book/Desktop/u-boot-1.1.6# make生成u-boot.bin 下载至开发板运行,发现并未打印出任何信息。原因是2410和2440在频率设置方面有所不同。
2). 打开 /board/mini2440/mini2440.c ,屏蔽下列代码
#if 0
#define FCLK_SPEED 1
#if FCLK_SPEED==0 /* Fout = 203MHz, Fin = 12MHz for Audio */
#define M_MDIV 0xC3
#define M_PDIV 0x4
#define M_SDIV 0x1
#elif FCLK_SPEED==1 /* Fout = 202.8MHz */
#define M_MDIV 0xA1
#define M_PDIV 0x3
#define M_SDIV 0x1
#endif
#define USB_CLOCK 1
#if USB_CLOCK==0
#define U_M_MDIV 0xA1
#define U_M_PDIV 0x3
#define U_M_SDIV 0x1
#elif USB_CLOCK==1
#define U_M_MDIV 0x48
#define U_M_PDIV 0x3
#define U_M_SDIV 0x2
#endif