Chinaunix首页 | 论坛 | 博客
  • 博客访问: 384073
  • 博文数量: 138
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1620
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-10 16:55
个人简介

当你比别人优秀一点点,别人会嫉妒你。当你比别人优秀很多,别人会羡慕你。

文章分类

全部博文(138)

文章存档

2016年(2)

2015年(2)

2014年(15)

2013年(119)

我的朋友

分类: 嵌入式

2013-04-08 22:50:12

目录,文件的修改

1、在顶层的makefile中,搜索2410找到对应的行

在附近按照格式添加一行:

s3c2440_config :       unconfig
        @$(MKCONFIG) $(@:_config=) arm arm920t s3c2440 NULL s3c24x0

这里注意,当直接复制粘贴的时候,第二行前面的空格不是tab键,导致第二行可能不能被识别为一个命令模式,需要删掉空格,然后从新用tab键

解释下含义:

arm:CPU架构

arm920t:CPU的类型

btq2440:开发板名称,这个地方要换成自己的,因为我们要在board目录下创建一个自己开发板使用的目录 board/btq2440

NULL:

s3c24x0:片上系统(soc)


2、在board目录下  cp -r  smdk2410  s3c2440

然后:
1)
把拷贝过来的文件重命名,把smdk2410.c 改名为  s3c2440.c

2)makefile中把smdk2410.o 改为  s3c2440.o

这个目录下有这么几个文件
config.mk  flash.c  lowlevel_init.S  Makefile    s3c2440.c  u-boot.lds

lowlevel_init.S 这个文件是用于配置存储控制器的,包括上面提到的SDRAM的配置和CS8900的存储空间的配置,都是在这里配置的。
config.mk 这个文件中就保存了一个参数,是uboot在拷贝到sdram的时候的加载地址。
flash.c这个地方还没用到,不解释。
  s3c2440.c
 这个文件中,使用C语言配置的时钟。前面说到在汇编语言部分,

3、在include/configs/目录下创建对应的头文件 s3c2440.h

我们采用把smdk2410.h 复制过来重命名的方式实


思考:为啥不用
u-boot-1.1.6/include/s3c2410.h那。
应该2400 2410 都是用smdk.h复制过来的,我们应该从最原始的那个复制。

至于为啥放在config/目录下,而不直接放在include目录下,应该是一样的。

===================================================================================================
代码的修改
start.S
    这里面,根据http://blog.chinaunix.net/uid-28708203-id-3540393.html 一个一个看,
    1)2 ) 3) 4)不需要操作,uboot都是好的
    6) 需要吧配置时钟的地方删掉,在后面配置时钟。
    5)配置存储控制器


board/s3c2440/目录下:
   
lowlevel_init.S    
    6) 都在这个里面配置
    修改#define REFCNT                  1113    /* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */
    为:    #define REFCNT                  0x4f4
   
    因为要把代码搬运到SDRAM中去运行,所以我们必须配置好SDRAM,改动并不是很大

    一个是位宽,我们原来的#define B6_BWSCON (DW32) 就是32,不用修改

    再就是时钟频率,SDRAM使用HCLK,我们的开发板要设置HCLK100MHZ,所以要设置刷新频率

    /* period=7.8125us, HCLK=100Mhz, (2048+1-7.8125*100)=4F3.C,取整为4f4 */

    #define REFCNT 0x4f4

s3c2440.c

     我们需要配置下时钟,然后因为时钟是所有一切器件使用的基准,其他器件的配置需要使用时钟提供的 FCLK HCLK PCLK的值,所以提供了函数来获得这几个值,由于我们重新配置了时钟,所以我们需要重新实现下这几个函数,比较重要的修改,这个地方改好了,串口才能正常运行起来.

这里需要更改的是两个地方,一个是对时钟SFR的配置,再一个是对FCLK 这几个值获取的函数,改两个地方.


    1)配置下时钟,时钟原来是在第一阶段的一个地方配置了,我们把他们注释掉,改在第二阶段配置

第二阶段运行的时候,会调用 board/s3c2440/s3c2440.c 中的board_init ()函数,这个函数里面对时钟进行配置,这里特殊一点的是,我们要根据当前是 2410 还是2440 做两套代码.

这里有两个知识点
一个是需要切换总线模式,关于这个知识在:

二是在C语言中内嵌汇编 http://blog.chinaunix.net/uid-28708203-id-3513850.html

设成148是有原因的: CPU运行于最高频率400M, 而SDRAM的最高频率一般只有133M,所以为方便取100M; 外部设备一般取50M

    2)我们修改一下获取 FCLK HCLK 等的函数,这些函数定义在cpu/arm920t/s3c24x0/speed.c

除了修改这里的代码外,还得修改

include/s3c24x0.h中的

S3C24X0_CLOCK_POWER 这个结构体,里面添加成员

S3C24X0_REG32 CAMDIVN

(我犯的错误是把上面两个东西连起来了,S3C24X0_REG32_CAMDIVN,悲催)

改两个东西(3处地方)我们的u-boot就能跑起来并打印输出了



u-boot 暂时告一段落,去移植linux

阅读(449) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~