首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

U-boot、内核移植、根文件系统的构建(s3c2440)

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>
继承事业,薪火相传
返回列表