移植u-boot-2012.04----建立单板_修改时钟_
来源:互联网 发布:erp沙盘软件 编辑:程序博客网 时间:2024/05/16 16:21
ftp://ftp.denx.de/pub/u-boot/ 下载各种版本的u-boot
tar xjf u-boot-2012.04.01.tar.bz2cd u-boot-2012.04.01make smdk2410_configmake
可以支持2410的,现在修改配置支持2440!
source insight工具下打开文件start.s
(u-boot-2012.04.01\arch\arm\cpu\arm920t\start.s)
u-boot做了那些事:
a. 初始化硬件:关看门狗、设置时钟、设置SDRAM、初始化NAND FLASH
b. 如果bootloader比较大,要把它重定位到SDRAM
c. 把内核从NAND FLASH读到SDRAM
d. 设置”要传给内核的参数”
e. 跳转执行内核
2.1 set the cpu to SVC32 mode
2.2 turn off the watchdog
2.3 mask all IRQs by setting all bits in the INTMR
2.4 设置时钟比例
2.5 设置内存控制器
2.6 设置栈,调用C函数board_init_f
2.7 调用函数数组init_sequence里的各个函数
2.7.1 board_early_init_f : 设置系统时钟、设置GPIO
……
2.8 重定位代码:
2.8.1 从NOR FLASH把代码复制到SDRAM
2.8.2 程序的链接地址是0,访问全局变量、静态变量、调用函数时是使”基于0地址编译得到的地址”
现在把程序复制到了SDRAM
需要修改代码,把”基于0地址编译得到的地址”改为新地址
2.8.3 程序里有些地址在链接时不能确定,要到运行前才能确定:fixabs
2.9 clear_bss
…………………………………………………………………………………….
3.1 建一个单板
cd /work/system/u-boot-2012.04.01 make distclean
清除
cd /work/system/u-boot-2012.04.01/board/samsung/cp smdk2410 smdk2440 -rfcd ../../include/configs/cp smdk2410.h smdk2440.h
拷贝
/work/system/u-boot-2012.04.01make smdk2440_config
建立新的配置
make: *** No rule to make target `smdk2440_config'. Stop.make: *** [smdk2440_config] Error 1
错误提示
方法:
修改boards.cfg:
仿照
smdk2410 arm arm920t - samsung s3c24x0
添加:
smdk2440 arm arm920t - samsung s3c24x0
/work/system/u-boot-2012.04.01vi boards.cfg:65 // 去65行
复制修改为
smdk2440 arm arm920t - samsung s3c24x0
重新配置编译
/work/system/u-boot-2012.04.01 make smdk2440_config make
pc和source insight修改如下:
01
02
03
04
接下来分析:start.s
(u-boot-2012.04.01\arch\arm\cpu\arm920t\start.s)
UBOOT里先以60MHZ的时钟计算参数来设置内存控制器,但是MPLL还未设置
处理措施: 把MPLL的设置放到start.S里,取消board_early_init_f里对MPLL的设置。(注:board_init_f
涉及CPU时钟的设置)
修改:
u-boot-2012.04.01\arch\arm\cpu\arm920t\start.s
① start.s—- board_init_f (去定义arch\arm\lib) —-board_early_init_f (去定义board\samsung\ smdk2440\smdk2410.c)
注销
/* to reduce PLL lock time, adjust the LOCKTIME register */ //writel(0xFFFFFF, &clk_power->locktime); /* configure MPLL */ // writel((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV, //&clk_power->mpllcon);
②2012.04.01\arch\arm\cpu\arm920t\start.s删除以下几行:
/* FCLK:HCLK:PCLK = 1:2:4 */ /* default FCLK is 120 MHz ! */ ldr r0, =CLKDIVN mov r1, #3 str r1, [r0]
修改为:
/* 2. 设置时钟 */ ldr r0, =0x4c000014 // mov r1, #0x03; // FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1 mov r1, #0x05; // FCLK:HCLK:PCLK=1:4:8 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 /* 写入控制寄存器 */ #define S3C2440_MPLL_400MHZ ((0x5c<<12)|(0x01<<4)|(0x01)) /* MPLLCON = S3C2440_MPLL_200MHZ */ ldr r0, =0x4c000004 ldr r1, =S3C2440_MPLL_400MHZ str 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
③搜索cpu_init_crit
cpu_init_crit—- lowlevel_init
.word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28)) .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC)) .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC)) .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC)) .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC)) .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC)) .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC)) .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN)) .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN)) .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT) .word 0x32 .word 0x30 .word 0x30
修改为:
.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
windows下的
u-boot-2012.04.01/arch/arm/cpu/arm920t/start.s
u-boot-2012.04.01/board/samsung/smdk2440/lowlevel_init.S、smdk2410.c
复制替换为
linux虚拟机下的start.s、lowlevel_init.S、smdk2410.c
新的 u-boot 烧写到norflash
注:编译出来的uboot非常大,可以先烧写u-boot_all.bin到nor,然后用这个uboot来烧写新的uboot
串口下:
usb 1 30000000
打开dnw 传新的u-boot
protect off all
erase 0 7ffff
cp.b 30000000 0 80000
乱码!
原因分析:
查看串口波特率的设置,发现在get_HCLK里没有定义CONFIG_S3C2440
处理措施:include/configs/smdk2440.h: 去掉CONFIG_S3C2410
添加
#define CONFIG_S3C2440
注释掉
//#define CONFIG_CMD_NAND
重新编译烧写:
可以norflash启动了、
- 移植u-boot-2012.04----建立单板_修改时钟_
- 移植u-boot学习笔记4-----修改代码之建新板_时钟
- 06-S3C2440学习之移植2012u-boot到S3C2440(移植过程一)新建单板+修改时钟+SDRAM+UART
- ok6410 u-boot-2012.04.01移植二修改源码支持单板
- OK6410 u-boot-2012.04.01移植一配置编译单板
- u-boot-2016.09移植(1)-单板配置
- u-boot-2017.07移植到S5PV210单板
- u-boot移植--1、前期准备及时钟的修改
- u-boot-2012.04.01移植到TQ2440(二):修改时钟
- u-boot-2016.05移植:(2)、修改时钟 初始化sdram 重定位u-boot 配置smdk2440.h 修改u-boot.lds
- U-BOOT-2016.07移植 (第二篇) 添加单板
- u-boot-2016.11移植至S5PV210-单板配置
- u-boot-2016.07移植至S5PV210-单板配置
- U-BOOT-2016.07移植 (第二篇) 添加单板
- U-BOOT-2016.07移植 (第二篇) 添加单板
- U-Boot移植串口xmodem协议_附测试代码
- 【Linux 移植 】——3、移植 u-boot-2012.04.01 之 修改代码(时钟,SDRAM,UART)
- 移植u-boot2012.04.1 -》2440 (一)新建单板,第一阶段修改
- java day08_day09基础梳理
- MongoDB (五):安全浅析
- MBR主引导扇区上,0扇区,512个字节,(主引导区一般在C盘,记录整个硬盘的情况;多系统其他盘也有引导区)
- 筛法求素数与欧拉函数
- 【bzoj1598】【 [Usaco2008 Mar]牛跑步】启发式搜索思路+spfa
- 移植u-boot-2012.04----建立单板_修改时钟_
- cookie设置24小时
- MongoDB (六):高级命令操作与实操
- 月薪五万的程序员是什么样的?
- 程序员看见喜欢的人
- 天冷了,码哥急需陪睡!
- fancybox关闭弹出窗体parent.$.fancybox.close();
- chromium的下载和编译
- 动态代理代码示例