u-boot-2009.11移植(适用于TQ2440和MINI2440)第五篇:修改配置文件

时间:2021-07-19 08:25:59

注意:红色标记为修改的地方

5.1 添加CONFIG_S3C2440条件定义

对于S3C2440,很多代码是借用S3C2410 的,所以要在所有条件编译中有CONFIG_S3C2410 的地方添加CONFIG_S3C2440,这样这些代码才会编译进来。一个简单的方法就是在代码中搜索出所有的CONFIG_S3C2410,并根据实际情况修改。在有些地方不仅要加入CONFIG_S3C2440,还必须根据两个芯片的不同来做出修改,比如PLL的操作代码。对于U-boot-2009.11 的修改如下:

(1) 修改/common/serial.c文件

 structserial_device *__default_serial_console (void)

{

………….

return &serial0_device;

#endif

//#elif defined(CONFIG_S3C2410)

#elif defined(CONFIG_S3C2410) ||defined(CONFIG_S3C2440)

#if defined(CONFIG_SERIAL1)

………….

void serial_initialize (void)

{

………….

serial_register(&serial_stuart_device);

#endif

//#if defined(CONFIG_S3C2410)

#if defined(CONFIG_S3C2410) ||defined(CONFIG_S3C2440)

    serial_register(&s3c24xx_serial0_device);

    serial_register(&s3c24xx_serial1_device);

    serial_register(&s3c24xx_serial2_device);

(2) 修改/cpu/arm920t/s3c24x0/interrupts.c文件

 #ifdefined(CONFIG_S3C2400)

#include<s3c2400.h>

//#elif defined(CONFIG_S3C2410)

#elif defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)

#include<s3c2410.h>

(3) 修改/cpu/arm920t/s3c24x0/timer.c文件

 #include <common.h>

#if defined(CONFIG_S3C2400) || \

   defined(CONFIG_S3C2410) || \

    defined(CONFIG_S3C2440) || \

   defined(CONFIG_TRAB)

#include <asm/io.h>

 

#if defined(CONFIG_S3C2400)

#include <s3c2400.h>

//#elif defined(CONFIG_S3C2410)

#elif defined(CONFIG_S3C2410) ||defined(CONFIG_S3C2440)

#include <s3c2410.h>

…………..

ulong get_tbclk(void)

{

    ulong tbclk;

 

#if defined(CONFIG_SMDK2400) || defined(CONFIG_TRAB)

    tbclk =timer_load_val * 100;

#elif defined(CONFIG_SBC2410X) || \

     defined(CONFIG_SMDK2410) || \

      defined(CONFIG_sunzl2440) || \

     defined(CONFIG_VCMA9)

    tbclk =CONFIG_SYS_HZ;

#else

……………..

#endif /* defined(CONFIG_S3C2400)  ||

      defined (CONFIG_S3C2410) ||

          defined(CONFIG_S3C2440)  ||

      defined (CONFIG_TRAB) */

(4) 修改/cpu/arm920t/s3c24x0/usb.c文件

 #include<common.h>

 

#if defined(CONFIG_USB_OHCI_NEW) &&defined(CONFIG_SYS_USB_OHCI_CPU_INIT)

//# if defined(CONFIG_S3C2400) ||defined(CONFIG_S3C2410)

# if defined(CONFIG_S3C2400) ||defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)

#if defined(CONFIG_S3C2400)

# include <s3c2400.h>

//#elif defined(CONFIG_S3C2410)

#elif defined(CONFIG_S3C2410) ||defined(CONFIG_S3C2440)

# include <s3c2410.h>

(5) 修改/cpu/arm920t/s3c24x0/usb_ohci.c文件

 #include<s3c2400.h>

//#elif defined(CONFIG_S3C2410)

#elif defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)

#include <s3c2410.h>

(6) 修改/drivers/i2c/s3c24x0_i2c.c文件

 #include<s3c2400.h>

//#elif defined(CONFIG_S3C2410)

#elif defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)

#include<s3c2410.h>

…………

static int GetI2CSDA(void)

{

    struct s3c24x0_gpio*gpio = s3c24x0_get_base_gpio();

//#ifdef CONFIG_S3C2410

#if defined(CONFIG_S3C2410) ||defined(CONFIG_S3C2440)

    return(readl(&gpio->GPEDAT) & 0x8000) >> 15;

#endif

………….

static void SetI2CSCL(int x)

{

    structs3c24x0_gpio *gpio = s3c24x0_get_base_gpio();

//#ifdef CONFIG_S3C2410

#if defined(CONFIG_S3C2410) ||defined(CONFIG_S3C2440)

    writel((readl(&gpio->GPEDAT)& ~0x4000) | (x & 1) << 14, &gpio->GPEDAT);

…………

void i2c_init(int speed, int slaveadd)

{

…………

if ((readl(&i2c->IICSTAT) & I2CSTAT_BSY) ||GetI2CSDA() == 0) {

//#ifdef CONFIG_S3C2410

#if defined(CONFIG_S3C2410) ||defined(CONFIG_S3C2440)

        ulongold_gpecon = readl(&gpio->GPECON);

……………

/* bus still busy probably by (most) previouslyinterrupted

           transfer */

 

//#ifdef CONFIG_S3C2410

#if defined(CONFIG_S3C2410) ||defined(CONFIG_S3C2440)

        /* setI2CSDA and I2CSCL (GPE15, GPE14) to GPIO */

………….

/* restore pin functions */

//#ifdef CONFIG_S3C2410

#if defined(CONFIG_S3C2410) ||defined(CONFIG_S3C2440)

       writel(old_gpecon, &gpio->GPECON);

(7) 修改/drivers/rtc/s3c24x0_rtc.c文件

 #ifdefined(CONFIG_S3C2400)

#include <s3c2400.h>

//#elif defined(CONFIG_S3C2410)

#elif defined(CONFIG_S3C2410) ||defined(CONFIG_S3C2440)

#include <s3c2410.h>

(8) 修改/drivers/serial/serial_s3c24x0.c文件

 #include <common.h>

#if defined(CONFIG_S3C2400) || defined(CONFIG_TRAB)

#include <s3c2400.h>

//#elif defined(CONFIG_S3C2410)

#elif defined(CONFIG_S3C2410) ||defined(CONFIG_S3C2440)

#include <s3c2410.h>

(9) 修改/drivers/usb/host/ohci-hcd.c文件

 #ifdefined(CONFIG_ARM920T) || \

   defined(CONFIG_S3C2400) || \

   defined(CONFIG_S3C2410) || \

    defined(CONFIG_S3C2440) || \

   defined(CONFIG_S3C6400) || \

   defined(CONFIG_440EP) || \

   defined(CONFIG_PCI_OHCI) || \

   defined(CONFIG_MPC5200) || \

defined(CONFIG_SYS_OHCI_USE_NPS)

(10)修改/include/common.h文件

 #ifdef CONFIG_4xx

ulong   get_OPB_freq(void);

ulong   get_PCI_freq(void);

#endif

#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)|| \

    defined(CONFIG_LH7A40X)|| defined(CONFIG_S3C6400) || defined(CONFIG_S3C2440)

ulong   get_FCLK(void);

(11)修改/include/serial.h文件

//#if defined(CONFIG_S3C2410)

 #ifdefined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)

extern struct serial_device s3c24xx_serial0_device;

extern struct serial_device s3c24xx_serial1_device;

extern struct serial_device s3c24xx_serial2_device

(12)修改cpu/arm920t/s3c24x0/speed.c文件

 #include<common.h>

#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined (CONFIG_TRAB) || defined(CONFIG_S3C2440)

 

#include <asm/io.h>

 

#if defined(CONFIG_S3C2400)

#include <s3c2400.h>

//#elif defined(CONFIG_S3C2410)

#elif defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)

#include <s3c2410.h>

……………

static ulong get_PLLCLK(int pllreg)

{

…………

    m = ((r &0xFF000) >> 12) + 8;

    p = ((r &0x003F0) >> 4) + 2;

    s = r &0x3;

//tekkaman

#if defined(CONFIG_S3C2440)

    if(pllreg == MPLL)

    return((CONFIG_SYS_CLK_FREQ * m * 2) /(p << s));

    elseif (pllreg == UPLL)

#endif

//tekkaman

    return(CONFIG_SYS_CLK_FREQ * m) / (p << s);

}

 

ulong get_HCLK(void)

{

    structs3c24x0_clock_power *clk_power = s3c24x0_get_base_clock_power();

 

//  return(readl(&clk_power->CLKDIVN) & 2) ? get_FCLK() / 2 : get_FCLK();

//tekkaman

#if defined(CONFIG_S3C2440)

    if(readl(&clk_power->CLKDIVN) & 0x6)

                {

                if((readl(&clk_power->CLKDIVN) & 0x6)==2) return(get_FCLK()/2);

                if((readl(&clk_power->CLKDIVN) & 0x6)==6)return((readl(&clk_power->CAMDIVN) & 0x100) ? get_FCLK()/6 :get_FCLK()/3);

                if((readl(&clk_power->CLKDIVN) & 0x6)==4)return((readl(&clk_power->CAMDIVN) & 0x200) ? get_FCLK()/8 : get_FCLK()/4);

                return(get_FCLK());

                }

    else    return(get_FCLK());

#else

    return((readl(&clk_power->CLKDIVN)& 0x2) ? get_FCLK()/2 : get_FCLK());

#endif

//tekkaman

}

…………..

#endif /* defined(CONFIG_S3C2400) ||

      defined (CONFIG_S3C2410) ||

      defined (CONFIG_S3C2440) ||

      defined (CONFIG_TRAB) */

13)修改include/s3c24x0.h文件

 structs3c24x0_interrupt {

    S3C24X0_REG32   SRCPND;

    S3C24X0_REG32   INTMOD;

    S3C24X0_REG32   INTMSK;

    S3C24X0_REG32   PRIORITY;

    S3C24X0_REG32   INTPND;

    S3C24X0_REG32   INTOFFSET;

//#ifdef CONFIG_S3C2410

#if defined(CONFIG_S3C2410) ||defined(CONFIG_S3C2440)

    S3C24X0_REG32   SUBSRCPND;

    S3C24X0_REG32   INTSUBMSK;

#endif

};

 

 

/* DMAS (see manual chapter 8) */

struct s3c24x0_dma {

    S3C24X0_REG32   DISRC;

//#ifdef CONFIG_S3C2410

#if defined(CONFIG_S3C2410) ||defined(CONFIG_S3C2440)

    S3C24X0_REG32   DISRCC;

#endif

    S3C24X0_REG32   DIDST;

//#ifdef CONFIG_S3C2410

#if defined(CONFIG_S3C2410) ||defined(CONFIG_S3C2440)

    S3C24X0_REG32   DIDSTC;

………….

S3C24X0_REG32   res[1];

#endif

//#ifdef CONFIG_S3C2410

#if defined(CONFIG_S3C2410) ||defined(CONFIG_S3C2440)

    S3C24X0_REG32   res[7];

…………

struct s3c24x0_clock_power {

    S3C24X0_REG32   LOCKTIME;

    S3C24X0_REG32   MPLLCON;

    S3C24X0_REG32   UPLLCON;

    S3C24X0_REG32   CLKCON;

    S3C24X0_REG32   CLKSLOW;

    S3C24X0_REG32   CLKDIVN;

#if defined (CONFIG_S3C2440)

    S3C24X0_REG32   CAMDIVN;

#endif

};

struct s3c24x0_lcd {

…………

S3C24X0_REG32   TPAL;

//#ifdef CONFIG_S3C2410

#if defined(CONFIG_S3C2410) ||defined(CONFIG_S3C2440)

    S3C24X0_REG32   LCDINTPND;

…………

#if defined(CONFIG_S3C2410)

/* NAND FLASH (see S3C2410 manual chapter 6) */

struct s3c2410_nand {

    S3C24X0_REG32   NFCONF;

    S3C24X0_REG32   NFCMD;

    S3C24X0_REG32   NFADDR;

    S3C24X0_REG32   NFDATA;

    S3C24X0_REG32   NFSTAT;

    S3C24X0_REG32   NFECC;

};

#endif

#if defined (CONFIG_S3C2440)

/* NAND FLASH (see S3C2440 manual chapter 6)*/

struct s3c2410_nand {

    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;

};

#endif

…………

/* I/O PORT (see manual chapter 9) */

struct s3c24x0_gpio {

…………

S3C24X0_REG32   MISCCR;

    S3C24X0_REG32   EXTINT;

#endif

//#ifdef CONFIG_S3C2410

#if defined(CONFIG_S3C2410) ||defined(CONFIG_S3C2440)

    S3C24X0_REG32   GPACON;



5.2 修改配置文件include/configs/sunzl2440.h

#define CONFIG_ARM920T      1   /* This is an ARM920T Core  */

//#define   CONFIG_S3C2410      1   /*in a SAMSUNG S3C2410 SoC     */

//#define CONFIG_SBC2410X       1   /*on a friendly-arm SBC-2410X Board  */

 

#define CONFIG_S3C2440      1   /*in a SAMSUNG S3C2440 SoC     */

#define CONFIG_sunzl2440        1   /*on a friendly-arm sunzl2440 Board  */

#define CONFIG_S3C2410_NAND_SKIP_BAD    1

………

#define CONFIG_NET_MULTI

 

#if 0

#define CONFIG_CS8900       /*we have a CS8900 on-board */

#define CONFIG_CS8900_BASE  0x19000300

#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */

#endif

#define CONFIG_NET_RETRY_COUNT      20

#define CONFIG_DRIVER_DM9000        1

#define CONFIG_DM9000_BASE      0x20000300

#define DM9000_IO           CONFIG_DM9000_BASE

#define DM9000_DATA             (CONFIG_DM9000_BASE+4)

#define CONFIG_DM9000_USE_16BIT     1

#define CONFIG_DM9000_NO_SROM       1

#undef CONFIG_DM9000_DEBUG

…………

 

#include <config_cmd_default.h>

 

#define CONFIG_CMD_ASKENV

#define CONFIG_CMD_CACHE

#define CONFIG_CMD_DATE

#define CONFIG_CMD_DHCP

#define CONFIG_CMD_ELF

#define CONFIG_CMD_PING

#define CONFIG_CMD_NAND

#define CONFIG_CMD_REGINFO

………….

* Miscellaneous configurable options

 */

#define CONFIG_SYS_LONGHELP             /* undef to save memory     */

#define CONFIG_SYS_PROMPT       "[u-boot@sunzl ]# "    /* MonitorCommand Prompt   */

#define CONFIG_SYS_CBSIZE       256     /*Console I/O Buffer Size  */

#define CONFIG_SYS_PBSIZE(CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16) /* Print Buffer Size */

#define CONFIG_SYS_MAXARGS      16      /*max number of command args   */

#define CONFIG_SYS_BARGSIZE     CONFIG_SYS_CBSIZE   /* BootArgument Buffer Size    */

 

#define CONFIG_SYS_MEMTEST_START    0x30000000  /*memtest works on */

#define CONFIG_SYS_MEMTEST_END      0x33F00000  /* 63 MB inDRAM    */

 

#define CONFIG_SYS_LOAD_ADDR        0x30008000  /* default load address */

…………….

/* #define CONFIG_AMD_LV400 1   /\* uncomment this if youhave a LV400 flash *\/ */

 

//#define CONFIG_AMD_LV800  1   /*uncomment this if you have a LV800 flash */

#define CONFIG_EON_29LV160AB    1       //如果nor flash29LV160AB,则增加此行,不是则注释掉

//#define CONFIG_SST_VF1601     1        //如果nor flash为39VF1601,则增加此行,不是则注释掉

//#define CONFIG_AMD_LV160    1       //如果nor flash为S29AL016,则增加此行,不是则注释

#define CONFIG_SYS_MAX_FLASH_BANKS  1   /*max number of memory banks */

……………

/* timeout values are in ticks */

#define CONFIG_SYS_FLASH_ERASE_TOUT (5*CONFIG_SYS_HZ) /* Timeout for Flash Erase */

#define CONFIG_SYS_FLASH_WRITE_TOUT (5*CONFIG_SYS_HZ) /* Timeout for Flash Write */

 

 

#define CONFIG_ENV_IS_IN_NAND 1

//#define   CONFIG_ENV_IS_IN_FLASH  1

#define CONFIG_ENV_OFFSET 0X60000

#define CONFIG_ENV_SIZE     0x20000 /*Total Size of Environment Sector */

 

#ifdef CONFIG_EON_29LV160AB     //如果定义了29LV160AB

#define PHYS_FLASH_SIZE 0x200000 /*存储器的实际大小2MB*/

#define CONFIG_SYS_MAX_FLASH_SECT (35) /*芯片的页数,也就是扇区数,35个,芯

片资料中有*/

#define CONFIG_ENV_ADDR(CONFIG_SYS_FLASH_BASE + CONFIG_ENV_OFFSET)

/*环境变量的存储地址,环境变量的首地址是在CONFIG_ENV_OFFSET处*/

#endif


/* == LENGTH_UBOOT*/

#ifdef CONFIG_SST_VF1601      //如果定义了39VF1601

#define PHYS_FLASH_SIZE     0x00200000 /* 2MB */

#define CONFIG_SYS_MAX_FLASH_SECT   (32)    /*max number of sectors on one chip */

#define CONFIG_ENV_ADDR     (CONFIG_SYS_FLASH_BASE + CONFIG_ENV_OFFSET)/* addr of environment */

#endif           

 

#ifdef CONFIG_AMD_LV160       //如果定义了S29AL016

#define PHYS_FLASH_SIZE         0x00200000 /*芯片大小2MB */

#define CONFIG_SYS_MAX_FLASH_SECT   (35)      /*扇区数为35 */

#define CONFIG_ENV_ADDR     (CONFIG_SYS_FLASH_BASE + CONFIG_ENV_OFFSET)/*环境变量存放地址 */

#endif


/*-----------------------------------------------------------------------

 * NAND flashsettings

 */

#if defined(CONFIG_CMD_NAND)

#define CONFIG_NAND_S3C2410

#define CONFIG_SYS_NAND_BASE 0x4E000000

#define CONFIG_SYS_MAX_NAND_DEVICE  1   /*Max number of NAND devices       */

#define SECTORSIZE 512

#define SECTORSIZE_2K 2048

#define NAND_SECTOR_SIZE SECTORSIZE

#define NAND_SECTOR_SIZE_2K SECTORSIZE_2K

#define NAND_BLOCK_MASK 511

#define NAND_BLOCK_MASK_2K 2047

#define NAND_MAX_CHIPS 1

#define CONFIG_MTD_NAND_VERIFY_WRITE

#define CONFIG_SYS_64BIT_VSPRINTF       /* needed for nand_util.c */

 

#endif  /*CONFIG_CMD_NAND */

 

所有的修改到此结束

5.3 重新编译并测试

make distclean

make sunzl2440_config

Configuring for sunzl2440board...

make

编译完成后按照前面讲的烧写方法烧到板子上,重启出现如下界面:

U-Boot 2009.11 (Oct 07 2015 - 15:09:27)

 

 sunzl

 Love Linuxforever!!

 

DRAM:  64 MB

Flash:  2 MB

NAND:  256 MiB

*** Warning - bad CRC or NAND, using defaultenvironment

 

In:    serial

Out:   serial

Err:   serial

Net:   dm9000

Hit any key to stop autoboot:  0

[ u-boot@sunzl ]#

证明移植成功!!!

具体参考U-boot、Kernel、文件系统的几种下载方式总结(基于TQ2440开发板) 

http://blog.csdn.net/szl_lxy/article/details/43372257点击打开链接