当你比别人优秀一点点,别人会嫉妒你。当你比别人优秀很多,别人会羡慕你。
分类: 嵌入式
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 复制过来重命名的方式实
至于为啥放在config/目录下,而不直接放在include目录下,应该是一样的。
一个是位宽,我们原来的#define B6_BWSCON (DW32) 就是32位,不用修改
再就是时钟频率,SDRAM使用HCLK,我们的开发板要设置HCLK为100MHZ,所以要设置刷新频率
/* 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
设成1:4:8是有原因的: 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