U-boot、内核移植、根文件系统的构建(s3c2440)
- UID
- 1029342
- 性别
- 男
|
U-boot、内核移植、根文件系统的构建(s3c2440)
/*************************************
****************u-boot移植************
/*************************************
1 在/board目录下cp smdk2410 my2440 –R
2 在/include/configs目录下cp smdk2410.h my2440.h
3 修改顶层Makefile文件增加
my2440_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t my2440 NULL s3c24x0
4 修改/board/my2440/Makefile文件
COBJS := my2440.o flash.o
5编译
make clean
make distclean
make my2440_config
make
/*************************************
********说明**************************
*******设置出可移植的u-boot触及版本
********没有ping nand命令***********
/**************************************
1 修改内存刷新频率
修改/board/my2440/lowlevel_init.s文件#define REFCNT 1269
2 修改pll锁相环频率,修改分频频率
修改/board/my2440/my2440.c文件
增加宏定义
#define S3C2440_MPLL_400MHZ ((0x5c<<12)|(0x01<<4)|(0x01))
#define S3C2440_UPLL_48MHZ ((0x38<<12)|(0x02<<4)|(0x02))
#define S3C2440_CLKDIV 0x05 /* FCLK:HCLKCLK = 1:2:4 */
修改board_init函数
设置分频FCLK:HCLKCLK = 1:4:8
clk_power->CLKDIVN = S3C2440_CLKDIV;
将同步总线修改为异步总线
__asm__( "mrc p15, 0, r1, c1, c0, 0\n" /* read ctrl register */
"orr r1, r1, #0xc0000000\n" /* Asynchronous */
"mcr p15, 0, r1, c1, c0, 0\n" /* write ctrl register */
:::"r1"
);
设置pll锁相环频率为400MHZ
clk_power->MPLLCON = S3C2440_MPLL_400MHZ;
设置USB频率为50MHZ
clk_power->UPLLCON = S3C2440_UPLL_48MHZ;
修改开发板CPU类型为s3c2440
gd->bd->bi_arch_number = MACH_TYPE_S3C2440;
3 修改/cpu/arm920t/s3c24x0/speed.s文件
查手册修改各频率计算方法
/******************************************
***************说明***********************
********配置出带有ping nand命令的u-boot
/******************************************
1 修改/include/configs /my2440.h文件
增加ping命令,打开nand命令
CFG_CMD_PING | \
CFG_CMD_NAND | \
#define CONFIG_BOOTDELAY 3
#define CONFIG_BOOTARGS "noinitrd root=/dev/mtdblock2 console=ttySAC0 rootfstype=jffs2" //没有启动盘,根文件在第二分区,串口1,根文件为jffs2
#define CONFIG_ETHADDR 08:00:3e:26:0a:5b
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 192.168.1.17
#define CONFIG_SERVERIP 192.168.1.24
2 将nand_flash.c增加到/cpu/arm920t/s3c24x0下,修改本层Makefile文件
3 在/include/linux/mtd/nand.h增加宏
#define NAND_MAX_CHIPS 1
#define CFG_MAX_NAND_DEVICE 1
#define CFG_NAND_BASE 0
4 在/include/linux/s3c24x0.h文件中添加如下结构
typedef struct {
S3C24X0_REG32 NFCONF;
S3C24X0_REG32 NFCONT;
S3C24X0_REG32 NFCMD;
S3C24X0_REG32 NFADDR;
S3C24X0_REG32 NFDATA;
S3C24X0_REG32 NFMECCD0;
S3C24X0_REG32 NFMECCD1;
S3C24X0_REG32 NFSECCD;
S3C24X0_REG32 NFSTAT;
S3C24X0_REG32 NFESTAT0;
S3C24X0_REG32 NFESTAT1;
S3C24X0_REG32 NFMECC0;
S3C24X0_REG32 NFMECC1;
S3C24X0_REG32 NFSECC;
S3C24X0_REG32 NFSBLK;
S3C24X0_REG32 NFEBLK;
} /*__attribute__((__packed__))*/ S3C2440_NAND;
5 在/inlcude/s3c2410.h文件中添加结构
static inline S3C2440_NAND * const S3C2440_GetBase_NAND(void)
{
return (S3C2440_NAND * const)S3C2410_NAND_BASE;
}
/******************************
********为u-boot增加命令******
/******************************
1 增加led命令
编写cmd_led.c文件于command目录下
#include <common.h>
#if (CONFIG_COMMANDS & CFG_CMD_LED)
#include <s3c2410.h>
#include <common.h>
#include <watchdog.h>
#include <command.h>
#include <image.h>
#include <malloc.h>
#include <zlib.h>
#include <bzlib.h>
#include <environment.h>
#include <asm/byteorder.h> |
|
|
|
|
|