u-boot-2016.09移植(4)-u-boot.bin

来源:互联网 发布:好听的淘宝店铺英文名 编辑:程序博客网 时间:2024/04/29 00:18

u-boot.bin从start.S中的reset开始执行,执行一些CPU底层初始化,然后跳转到crt0.S中的_main函数。

这里写图片描述

CONFIG_SYS_INIT_SP_ADDR 在单板配置文件 tq210.h中定义,这个可以随便设置,但要保证能够供board_init_f 使用,以及存储GD (‘global data’),我们可以直接设置为DDR 的最高地址0x60000000。

#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + PHYS_SDRAM_1_SIZE)

其中PHYS_SDRAM_1_SIZE定义为它的最大值

#define CONFIG_SYS_LOAD_ADDR      CONFIG_SYS_SDRAM_BASE + 0x40000000

接着调用board_f.c中的board_init_f函数,给它传了一个参数r0=0,事实上没有用到。这个函数使用到了一些全局变量,因此我们需要让u-boot.bin位于其链接地址,通过修改tq210.h中的宏CONFIG_SYS_TEXT_BASE指定其链接地址。我们将其指定为u-boot.bin 在 DDR 中的起始地址

这里写图片描述

接着分析board_init_f,这个在common/board_f.c中定义,在第二节中我们分析了这个函数主要是执行init_sequence_f这个函数数组,这里我们主要分析几个我们需要修改的函数。

调用serial_init初始化串口,通过跟踪代码发现在单板配置文件 tq210.h中通过宏CONFIG_SERIAL0 指定使用哪个串口,默认使用的是串口0,所以这里我们需要为串口0配置GPIO口,直接在board/samsung/tq210/lowlevel_init.S中定义:

这里写图片描述

调用print_cpuinfo显示CPU信息:

修改arch/arm/cpu/armv7/s5p-common/cpu_info.c显示我们自己的CPU:

这里写图片描述

s5p_get_cpu_name得到CPU的名称,在arch/arm/mach-s5pv210/include/mach/cpu.h 中
定义为:

这里写图片描述

get_arm_clk 根据 CPU 的ID决定调用那个函数来获取时钟,其定义在arch/arm/mach-s5pv210/clock.c中:

这里写图片描述

我们将其修改为

这里写图片描述

仿照s5pc110_get_arm_clk()修改一个s5pv210_get_arm_clk(),在s5pv210_get_arm_clk 中调用了get_pll_clk(APLL)来获得APLL 输出时钟,与get_arm_clk一样参考s5pc110_get_pll_clk(pllreg)写一个s5pv210_get_pll_clk(pllreg):

这里写图片描述

这里写图片描述

其他的函数我们不用去修改,返回继续看crt0.S.

编译,产生u-boot.bin,查看得到273K,在crt0.S中复制u-boot.bin时,我们之前的大小是随意写的,这个时候需要修改复制的大小必须必u-boot.bin大,

这里写图片描述

为了防止后面还需要变大,我就在这里使用700扇区,350K。

再次编译,将产生的u-boot.bin烧录到34扇区。
同样的为了验证是否成功,我在board_init_r后面添加点灯程序,灯亮,表示u-boot.bin移植完成。

这里写图片描述

0 0