移植最新uboot之新建板—时钟—SDRAM—UART
Posted code_development
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了移植最新uboot之新建板—时钟—SDRAM—UART相关的知识,希望对你有一定的参考价值。
修改u-boot支持开发板,我使用的是 2440开发板
(1) 建一个单板
# cd board/samsung //进入这个单板目录
# cp smdk2410 smdk2440 -rf //修改2410的单板为2440的
修改配置文件:
# cd include/configs
#cp smdk2410.h smdk2440.h
执行make smdk2440_config不成功,则 搜索 2410: grep "smdk2410" * -nR
修改如下:
#vi boards.cfg
添加一行2440的 :
smdk2440 arm arm920t - samsung s3c24x0
u-boot 配置: make smdk2440_config
编译: make
(2) 烧写看结果
(3) 调试
问题: 阅读代码发现不足:uboot 里先以60MHZ的时钟计算参数来设置内存控制器,但是cpu的MPLL还未设置。
处理: 把MPLL的设置放到start.S里,取消 boart_early_init_f 里对MPLL的设置
如果u-boot上的烧写内存不够,可以使用 :
usb上传: usb 1 30000000(烧写的地址)
去掉写保护: protect off all
擦除: earse 0 7ffff(512K)
烧写: cp.b 0 30000000 0 80000
a). 修改start.S里的时钟&内存设置:
start.S中 本2410的时钟去掉,换成如下时钟设置:
/* 2. 设置时钟 */
ldr r0, = 0x4c000014
//mov r1, #0x03 //分频系数
mov r1, #0x05 //分频系数
str r1, [r0]
/* 如果HDIVN非0,CPU的总线模式应该从“fast bus mode”变为“asynchronous bus mode” */
mrc p15, 0, r1, c1, c0, 0 /* 读出控制寄存器 */
orr r1, r1, #0xc0000000 /* 设置为“asynchronous bus mode” */
mcr p15, 0, r1, c1, c0, 0 /* 写入控制寄存器 */
/* */
ldr r0, =0x4c000004
ldr r1, =S3C2440_MPLL_400MHZ
str r1, [r0] // r1的值存入r0所指的位置
/* 启动ICACHE */
mrc p15, 0, r0, c1,c0, 0 @ read control reg
orr r0, r0, #(1<<12)
mcr p15, 0, r0, c1,c0, 0 @ write it back 把值写入协处理器里
b). 修改内存设置:
.long 0x22011110; //BWSCON
.long 0x00000700; //BANKCON0
.long 0x00000700; //BANKCON1
.long 0x00000700; //BANKCON2
.long 0x00000700; //BANKCON3
.long 0x00000700; //BANKCON4
.long 0x00000700; //BANKCON5
.long 0x00018005; //BANKCON6
.long 0x00018005; //BANKCON7
.long 0x008C04F4; //REFRESH
.long 0x000000B1; //BANKSIZE
.long 0x00000030; //MRSRB6
.long 0x00000030; //MRSRB7
c). 修改smdk2440.h配置文件:
把MPLL设置注销了
当你做到这里的时候,在编译返回第二步去看结果,会出现乱码。处理方法下回分解。谢谢!
以上是关于移植最新uboot之新建板—时钟—SDRAM—UART的主要内容,如果未能解决你的问题,请参考以下文章
全志H3系统移植 | 移植主线最新uboot 2023.04和kernel 6.1.11到Nanopi NEO开发板