官方标准uboot2013移植8之串口界面信息打印

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangdapao12138/article/details/81610453

1.banner 信息补全

从crt0.S看,找到board_init_f,然后找到Board.c (z:\uboot\uboot2013\u-boot-2013.10.bak\arch\arm\lib)。

找到init_sequence。

看下display_banner.

自己定义一个:

结果:

2.CPU信息补全

回到init_sequence。看下print_cpuinfo。

找到Cpu_info.c (z:\uboot\uboot2013\u-boot-2013.10.bak\arch\arm\cpu\armv7\s5p-common):int print_cpuinfo(void)。

问题分析

1)时钟显示ARMCLK是400MHz。

2)调试,把m、p、s和apll_ratio打印出来后,发现这几个值的设置和之前的uboot的设置是不同的。原因在于我们当前版本的uboot中并未对SoC的时钟进行过设置,当前uboot中的时钟是iROM代码默认设置的。

3)我自己之前一直认为iROM中把210的时钟设置为了1000MHz,然后三星版本的uboot中设置的时钟也是按照这个数据手册356页推荐的这个最佳性能配置时钟设置的。所以以前认为uboot中可以没有时钟设置也是一样的。

4)但是实际上不是这样的,实际上内部iROM中设置的时钟APLL输出是800MHz,ARMCLK是400MHz。如果uboot中不做时钟的设置实际得到的就是这个时钟。所以我们之前代码得到的结果是400MHz。

5)所以要解决这个时钟不对的问题,要在lowlevel_init.S中添加上时钟初始化的代码即可。

时钟初始化函数的添加

在lowlevel_init.S中移植system_clock_init函数,并且在s5p_goni.h中添加相关的宏定义参数,然后在lowlevel_init函数中调用system_clock_init函数。

 

移植结束,第一行打印:

我们继续看:

添加信息:把三星的uboot中的时钟信息移植过来。

同时移植三星的各个时钟函数:

例如:

但还是编译不通过,因为缺少了一个宏定义:CONFIG_SYS_CLK_FREQ,这个是使用的外部时钟,我们查下三星的uboot和原理图,然后自己定义24MHz:

编译通过,串口打印如下:

3.board名称更改

Goni.c (z:\uboot\uboot2013\u-boot-2013.10.bak\board\samsung\goni):int checkboard(void).

我们改成S5pv210。

I2C我们不看了。不需要的话可以把宏定义去掉。

4.内存大小显示

Goni.c (z:\uboot\uboot2013\u-boot-2013.10.bak\board\samsung\goni):int dram_init(void)。

还是在goni.c中。

宏定义在S5p_goni.h (z:\uboot\uboot2013\u-boot-2013.10.bak\include\configs),进行修改,我们只使用DCM1和DCM2。每个内存块是256MB。

 

上述结果:

5.关于MACH_TYPE的定义问题。

1)在uboot2013.10中和uboot1.3.4中设计有所不同。在uboot1.3.4中这个东西是分散定义在各个配置头文件当中的。但是在uboot2013.10中我们把MACH_TYPE集中定义在一个文件arch/arm/include/asm/mach-types.h中了。

2)集中定义其实是uboot从linux内核中学来的。在linux kernel中MACH_TYPE就是在文件中集中定义的。集中定义的好处是方便查阅,不容易定义重复。

3)这个MACH_TYPE是和开发板绑定的,原则上每一个开发板型号都有一个MACH_TYPE,这个机器码由linux内核管理者来分配的,如果需要应该向这些人申请。

在S5P_GONI.h中定义:

但后面board_init_f会再次定义,这里可以注释掉。

6.DDR初始化的代码并打印出来

删掉第三个。

6. board_init_r

Board.c (z:\uboot\uboot2013\u-boot-2013.10.bak\arch\arm\lib):void board_init_r(gd_t *id, ulong dest_addr)

 注释掉enable_caches。

Goni.c (z:\uboot\uboot2013\u-boot-2013.10.bak\board\samsung\goni):int board_init(void)。

机器码不对,进行修改:

7. 去掉PMIC的代码

8去掉one nand的代码

但编译出错:

Goni文件夹Makefile中拿掉onenand.o。

重新编译:

Mmc.c (z:\uboot\uboot2013\u-boot-2013.10.bak\drivers\mmc):int mmc_initialize(bd_t *bis)

改成1通道:

 

猜你喜欢

转载自blog.csdn.net/wangdapao12138/article/details/81610453