gd = (gd_t*)(_armboot_start - CONFIG_SYS_MALLOC_LEN - sizeof(gd_t)); __asm__ __volatile__("": : :"memory"); memset ((void*)gd, 0, sizeof (gd_t)); gd->bd = (bd_t*)((char*)gd - sizeof(bd_t)); memset (gd->bd, 0, sizeof (bd_t)); gd->flags |= GD_FL...
#ifdef CONFIG_ARM64 #define DECLARE_GLOBAL_DATA_PTRregister volatile gd_t *gd asm ("x18") #else #define DECLARE_GLOBAL_DATA_PTRregister volatile gd_t *gd asm ("r9") #endif 从这里看到了gd的定义,而且能够知道气质这个结构体的定义是在:#include <asm-generic/global_data.h>这个文件夹下。 那...
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("x18") #else #define DECLARE_GLOBAL_DATA_PTRregister volatile gd_t *gd asm ("r9") #endif 从这里看到了gd的定义,而且能够知道气质这个结构体的定义是在:#include <asm-generic/global_data.h>这个文件夹下。 那么就去这个文件夹下...
二:uboot启动的第二阶段start_armboot()函数(路径 uboot/lib_arm/Board.c) 1:gd bd地址的设置:gd在DDR中的位置33e00000+2M-912k-512k,bd 在gd下面,紧挨着;gd是一个结构体指针,放在寄存器r8中,gd所指 向的结构体中存放的都是一些全局变量gd->bd也是一个结构体里面存 放着bi_baudrate 波特率(开发板的...
1:gd bd地址的设置:gd在DDR中的位置33e00000+2M-912k-512k,bd 在gd下面,紧挨着;gd是一个结构体指针,放在寄存器r8中,gd所指 向的结构体中存放的都是一些全局变量gd->bd也是一个结构体里面存 放着bi_baudrate 波特率(开发板的波特率); bi_ip_addr IP地址; bi_enetaddr MAC地址; bi_arch_number ...
4、如果系统支持 LCD 或VFD,调用lcd_setmem()或vfd_setmem()计算帧缓(Framebuffer)大小,然后在BSS 数据段之后为Framebuffer 分配空间,初始化gd->fb_base 为Framebuffer 的起始地址;5、调用 mem_malloc_init()进行存储分配系统(类似于C 语言中的堆)的初始化和空间分配;6、如果系统支持 NAND ...
(11)include。头文件目录。uboot和linux kernel在管理头文件时都采用了同一个思路,就是把所有的头文件全部集中存放在include目录下,而不是头文件跟着自己对应的c文件。所以在uboot中头文件包含时路径结构要在这里去找。 (12)lib_开头的一坨。(典型的lib_arm和lib_generic)架构相关的库文件。譬如lib_arm里面就是...
gd->bd->bi_enetaddr 第八步:其他设备的初始化,之前没有进行过初始化的设备要进行初始化。 devices_init 第九步:跳转表设置,uboot中没有使用 jumptable_init 第十步:控制台第二阶段初始化 console_init_r 第十一步:中断使能,uboot中没有使用中断,所以该函数是空的。
如果定义了 CONFIG_CMD_NET,就调用 eth_initialize(gd->bd)进行网卡初始化。 这个宏在include/config_cmd_default.h 中定义,这个头文件又被单板配置文件 include/configs/origen.h 所包含。 eth_initialize 函数在 net/eth.c 中定义,下面是该函数部分代码: ...
头文件中,可以通过不同的宏定义来对引导列表进行区分和开关。#define BOOT_TARGET_DEVICES(func) \BOOT...