nettui 发表于 2019-7-30 15:31:34

uboot中的数据结构、内存分配

本帖最后由 nettui 于 2019-7-31 08:18 编辑

1.uboot中的数据结构u-boot的主要功能是用于引导OS的,但是本身也提供许多强大的功能,可以通过输入命令行来完成许多操作。所以它本身也是一个很完备的系统。u-boot的大部分操作都是围绕它自身的数据结构,这些数据结构是通用的,但是不同的板子初始化这些数据就不一样了。所以u-boot的通用代码是依赖于这些重要的数据结构的。这里说的数据结构其实就是一些全局变量。1)gd 全局数据变量指针,它保存了u-boot运行需要的全局数据,类型定义:
ifdef 2)bd,板子数据指针。板子很多重要的参数。 类型定义如下:typedef struct bd_info {             int   bi_baudrate;   /* 串口波特率 */            
unsigned long bi_ip_addr;   /* IP 地址 */            
unsigned char bi_enetaddr[6]; /* MAC地址*/            
struct environment_s      *bi_env;            
ulong         bi_arch_number; /* unique id for this board */         
ulong         bi_boot_params; /* 启动参数 */            
struct    /* RAM 配置 */            
{            ulong start;            
ulong size;         
}bi_dram;      
} bd_t; 3)环境变量指针 env_t *env_ptr = (env_t *)(&environment);(common/env_flash.c) env_ptr指向环境参数区,系统启动时默认的环境参数environment[],定义在common/environment.c中。  参数解释:      bootdelay 定义执行自动启动的等候秒数      baudrate 定义串口控制台的波特率      netmask 定义以太网接口的掩码      ethaddr 定义以太网接口的MAC地址      bootfile 定义缺省的下载文件      bootargs 定义传递给Linux内核的命令行参数      bootcmd 定义自动启动时执行的几条命令      serverip 定义tftp服务器端的IP地址      ipaddr 定义本地的IP地址      stdin 定义标准输入设备,一般是串口      stdout 定义标准输出设备,一般是串口      stderr 定义标准出错信息输出设备,一般是串口4)设备相关:   标准IO设备数组evice_t *stdio_devices[] = { NULL, NULL, NULL };   设备列表    list_t    devlist = 0;   device_t的定义:includedevices.h中:typedef struct {   
int flags;          /* Device flags: input/output/system */   
int ext;           /* Supported extensions   */   
char name[16];        /* Device name    */      /* GENERAL functions */         
int (*start) (void);   /* To start the device   */   
int (*stop) (void);    /* To stop the device   */      /* 输出函数 */      
   void (*putc) (const char c); /* To put a char   */   
void (*puts) (const char *s); /* To put a string (accelerator) */       /* 输入函数 */      
int (*tstc) (void);    /* To test if a char is ready... */   
int (*getc) (void);    /* To get that char   */       /* Other functions */         
void *priv;          /* Private extensions   */
} device_t;      u-boot把可以用为控制台输入输出的设备添加到设备列表devlist,并把当前用作标准IO的设备指针加入stdio_devices数组中。在调用标准IO函数如printf()时将调用stdio_devices数组对应设备的IO函数如putc()。5)命令相关的数据结构。6)与具体设备有关的数据结构,    如flash_info_t flash_info;记录nor flash的信息。    nand_info_t nand_info; nand flash块设备信息2.uboot重定位后的内存分布对于smdk2410,RAM范围从0x30000000~0x34000000. u-boot占用高端内存区。从高地址到低地址内存分配如下:                     显示缓冲区                  (.bss_end~34000000)                     uboot(bss,data,text)       (33f00000~.bss_end)                     heap(for malloc)                     gd(global data)                     bd(board data)                     stack                     ·········                  nor flash                           (0~2M)转自小平头电子技术社区,转载请注明出处:https://www.xiaopingtou.cn/article-104101.html

页: [1]
查看完整版本: uboot中的数据结构、内存分配