博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
移植最新uboot之新建板—时钟—SDRAM—UART
阅读量:4360 次
发布时间:2019-06-07

本文共 1819 字,大约阅读时间需要 6 分钟。

修改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设置注销了

当你做到这里的时候,在编译返回第二步去看结果,会出现乱码。处理方法下回分解。谢谢!

 

转载于:https://www.cnblogs.com/suidan1314/p/5537754.html

你可能感兴趣的文章
Linux重定向与管道
查看>>
【编程题目】圆形是否和正方形相交☆
查看>>
zencart常用表单模块
查看>>
Magic Zoom 使用说明
查看>>
杭电1114
查看>>
各类排序模版(计数排序、基数排序、桶排序、冒泡排序、选择排序、插入排序、希尔排序、归并排序、原地归并排序、快速排序、堆排序)...
查看>>
【NOIP2016提高A组模拟8.15】Password
查看>>
Singleton
查看>>
AngularJS XMLHttpRequest
查看>>
Java反射-方法(Method)
查看>>
移除SharePoint2013里的NoteBook笔记本链接
查看>>
数据集
查看>>
Objective-C内存管理教程和原理剖析(四)
查看>>
RESTClient插件POST方法传递参数
查看>>
新建Oracle数据库
查看>>
动态计算UITableViewCell高度详解 (转)
查看>>
后缀数组详解+模板
查看>>
洛谷P1731 生日蛋糕
查看>>
Redis类型
查看>>
编程之美----求二进制数中1的个数
查看>>