免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1760 | 回复: 0
打印 上一主题 下一主题

u-boot-2009.08移植到micro2440(128MB)笔记(4) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-15 10:23 |只看该作者 |倒序浏览

移植目标:
尝试SMDK2410烧写出来的U-boot。
1.       修改CROSS_COMPILE
2.       make smdk2410_config
3.       make
4.       烧写u-boot.bin
测试结果,终端无任何输出,有可能是因为MPLL没有设置。明天继续测试。

应用于Linux操作系统,U-boot的移植目标:
1.       串口有数据输出
涉及到如下的方面:
board\samsung\smdk2410
顶层Makefile
include\configs\smdk2410.h
cpu\arm920t\s3c24x0\speed.c
cpu\arm920t\start.S
include\s3c24x0.h (主要是nand flash相关的)
lib_arm\board.c  (U-boot启动时的一些信息)

2.       支持网络功能,DM9000x网卡。
3.       添加MMC|SD卡驱动
4.       支持yaffs|yaffs1文件系统的烧写
5.       终极目标是移植成功Linux。

应用于VxWorks操作系统,U-boot的移植目标:
1.       串口有数据输出
设计到如下的方面:
2.       支持网络功能,DM9000x网卡。
3.       终极目标是移植成功VxWorks。


具体的移植过程[移植成功]:
1.       为了减小体积
a)         删除了不需要的board配置,只剩下samsung目录;
b)        删除了不需要的cpu配置,只剩下arm920t;
c)        删除了不需要的lib文件,剩下lib_arm和lib_generic文件;
d)        删除了不需要的头文件,进入include目录,删除include类似asm_*的文件夹,剩下asm-arm和asm_generic;

2.       进入board\samsung目录
a)         复制smdk2410,重命名为mini2440
b)        重命名smdk2410.c为mini2440.c
c)        编辑Makefile,修改smdk2410.o为mini2440.o

3.        进入include\configs目录
a)         复制smdk2410.h为mini2440.h

4.       替换mini2440目录
a)         主要修改在于自带的U-boot是烧写到nor flash中的,如果要烧写到nand flash,需要增加nand的读写驱动,

采用tekkaman移植好的mini2440

5.       修改顶层Makefile
a)         修改源代码的一个bug
修改:
__OBJS := $(subst $(obj),,$(OBJS))
__LIBS := $(subst $(obj),,$(LIBS)) $(subst $(obj),,$(LIBBOARD))
为:
__OBJS := $(subst $(obj),,$(OBJS))
__LIBS := $(subst $(obj),,$(LIBBOARD)) $(subst $(obj),,$(LIBS))

b)        交叉工具链的指定
# load ARCH, BOARD, and CPU configuration
include $(obj)include/config.mk
export      ARCH CPU BOARD VENDOR SOC
CROSS_COMPILE =  arm-linux-
# set default to nothing for native builds
ifeq ($(HOSTARCH),$(ARCH))
CROSS_COMPILE ?=
endif
c)        找到
smdk2410_config         :        unconfig
     @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0

复制一份,修改为:
mini2440_config :        unconfig
     @$(MKCONFIG) $(@:_config=) arm arm920t mini2440 samsung s3c24x0

6.       在整个代码目录搜索CONFIG_S3C2410,因为S3C2410和S3C2440是兼容的,
在需要的地方都补上CONFIG_S3C2440,排除掉一些明显不相关的文件,剩下:


在有CONFIG_S3C2410的地方,都补上CONFIG_S3C2440,
                  #elif defined(CONFIG_S3C2410) || defined (CONFIG_S3C2440)


7.       S3C2440多了AC97和CAM接口
因此include\s3c2410.h增加了AC97和CAM接口的定义
#define BIT_CAM                           (0x1
#define BIT_BAT_FLT                    (0x1
#define BIT_TICK                           (0x1
#define BIT_WDT                           (0x1
#define BIT_WDT_AC97                 (0x1

8.       修改时钟,由于MPLL的计算已经改变了,
需要修改cpu\arm920t\s3c24x0\speed.c
static ulong get_PLLCLK(int pllreg)函数中增加:
//tekkaman
#if defined(CONFIG_S3C2440)
      if (pllreg == MPLL)
      return ((CONFIG_SYS_CLK_FREQ * m * 2) /(p
      else if (pllreg == UPLL)
#endif
//tekkaman
ulong get_HCLK(void)函数中增加:
//tekkaman
#if defined(CONFIG_S3C2440)
      if (clk_power->CLKDIVN & 0x6)
                                  {
                                  if ((clk_power->CLKDIVN & 0x6)==2) return(get_FCLK()/2);
                                  if ((clk_power->CLKDIVN & 0x6)==6) return((clk_power->CAMDIVN & 0x100) ? get_FCLK()/6 : get_FCLK()/3);
                                  if ((clk_power->CLKDIVN & 0x6)==4) return((clk_power->CAMDIVN & 0x200) ? get_FCLK()/8 : get_FCLK()/4);
                                  return(get_FCLK());
                                  }
      else    return(get_FCLK());
#else
      return((clk_power->CLKDIVN & 0x2) ? get_FCLK()/2 : get_FCLK());
#endif

9.       [VIP]修改启动代码
cpu\arm920t\start.S

10.   进入include目录,找到s3c24x0.h
a)         在结构体S3C24X0_CLOCK_POWER中添加:
#if defined (CONFIG_S3C2440)
         S3C24X0_REG32 CAMDIVN;
#endif
b)        2410和2440的nand控制差别比较大
所以修改S3C2410_NAND的定义,
#if defined (CONFIG_S3C2440)
/* NAND FLASH (see S3C2440 manual chapter 6) */
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__))*/ S3C2410_NAND;
#endif
c)        [WAIT]2410和2440的USB设备的寄存器也不一样,稍后修改
d)        2440比2410多了一个GPIO口,修改S3C24X0_GPIO的定义
#if defined (CONFIG_S3C2440)
         S3C24X0_REG32   res9[3];
         S3C24X0_REG32   MSLCON;
         S3C24X0_REG32   GPJCON;
         S3C24X0_REG32   GPJDAT;
         S3C24X0_REG32   GPJUP;

#endif
e)         [WAIT] 2410和2440的SD INTERFACE也不一样,稍后修改。


11.   添加一些启动显示信息
修改lib_arm\board.c,
找到函数static int display_banner (void)

12.   编译cmd_mmc.c出现问题,
由于暂时不需要支持MMC
所以修改common/Makefile
#COBJS-$(CONFIG_CMD_MMC) += cmd_mmc.o

13.   编译video出现问题
可以修改Makefile和下面的配置解决。

14.   配置mini2440
a)         替换mini2440.h
采用tekkaman移植好的mini2440
b)        第一个阶段先实现串口控制,暂时不需要mmc,也不需要video
所以去掉mini2440.h中相关的宏定义。

15.   经过以上步骤,已经编译成功了,但是仍然无法出现串口提示,正常情况下,下载的U-boot代码,都几乎不需要改串口相关的代码,只要配置好即可打印出数据的,所以这个时候应该从顶层的文件开始检查,检查串口相关的配置,时钟,nand flash等。
确认已经修改了顶层Makefile中的:
__OBJS := $(subst $(obj),,$(OBJS))
__LIBS := $(subst $(obj),,$(LIBBOARD)) $(subst $(obj),,$(LIBS))

这个等待分析,不是太容易发现,感觉像是U-boot的bug!!!

16.   以上会出现蜂鸣器长鸣的现象。使得蜂鸣器不发出响声。
查看原理图,得到蜂鸣器由GPB0控制,GPB0=1的时候,蜂鸣器响。
追踪代码,发现是board\mini2440\mini2440.c文件的问题。



#if defined(CONFIG_MINI2440_LED)
      gpio->GPBDAT = 0x00000181;
#endif
为了使得GPB0=0,可以修改为:
#if defined(CONFIG_MINI2440_LED)
      gpio->GPBDAT = 0x00000180;
#endif

或者保留上面的代码,修改board.c文件中的start_armboot函数,即U-boot启动完成,蜂鸣器停止。

#if defined(CONFIG_MINI2440_LED)      
               gpio->GPBDAT = 0x0; //tekkamanninja
#endif

17.   [WAIT]串口已经可以打印出数据了,提示Nand:No NAND device found!!
发现原因在于drivers\mtd\nand\s3c2410_nand.c
需要修改nand寄存器地址,
采用tekkaman移植好的mini2440

18.   为了简化,删除了不需要的board配置和cpu配置。

   u-boot-2009.08-OK.bin是利用git下载tekkaman的移植代码,直接编译得到的文件,经过下载烧写,串口能够正常输出。u-boot-2009.08-serial-OK.bin文件是newtelcom光实现第一个阶段nand读写和串口输出正常的bin文件。
   



文件:
u-boot-2009.08-OK.rar
大小:
110KB
下载:
下载


  

文件:
u-boot-2009.08-serial-ok.rar
大小:
101KB
下载:
下载



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/111832/showart_2181985.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP