加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

u-boot主要的数据结构

发布时间:2020-12-15 18:28:41 所属栏目:百科 来源:网络整理
导读:u-boot的主要功能是用于引导OS的,但是本身也提供许多强大的功能,可以通过输入命令行来完成许多操作。所以它本身也是一个很完备的系统。u-boot的大部分操作都是围绕它自身的数据结构,这些数据结构是通用的,但是不同的板子初始化这些数据就不一样了。所以u


u-boot的主要功能是用于引导OS的,但是本身也提供许多强大的功能,可以通过输入命令行来完成许多操作。所以它本身也是一个很完备的系统。u-boot的大部分操作都是围绕它自身的数据结构,这些数据结构是通用的,但是不同的板子初始化这些数据就不一样了。所以u-boot的通用代码是依赖于这些重要的数据结构的。这里说的数据结构其实就是一些全局变量。
 1)gd 全局数据变量指针,它保存了u-boot运行需要的全局数据,类型定义:
 typedef struct global_data {
?????????? bd_t *bd;????? //board data pointor板子数据指针
?????????? unsigned long flags;  //指示标志,如设备已经初始化标志等。
?????????? unsigned long baudrate; //串口波特率
?????????? unsigned long have_console; /* 串口初始化标志*/
?????????? unsigned long reloc_off;?? /* 重定位偏移,就是实际定向的位置与编译连接时指定的位置之差,一般为0 */
?????????? unsigned long env_addr; /* 环境参数地址*/
?????????? unsigned long env_valid; /* 环境参数CRC检验有效标志 */
?????????? unsigned long fb_base; /* base address of frame buffer */
?????????  #ifdef CONFIG_VFD
?????????? unsigned char vfd_type; /* display type */
?????????  #endif
?????????? void **jt; /* 跳转表,1.1.6中用来函数调用地址登记 */
????????? } gd_t;
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[CONFIG_NR_DRAM_BANKS];
???????? } bd_t;?
3)环境变量指针 env_t *env_ptr = (env_t *)(&environment[0]);(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[CFG_MAX_FLASH_BANKS];记录nor flash的信息。
????  nand_info_t nand_info[CFG_MAX_NAND_DEVICE]; nand flash块设备信息
3、u-boot重定位后的内存分布:
   对于smdk2410,RAM范围从0x30000000~0x34000000. u-boot占用高端内存区。从高地址到低地址内存分配如下:

 显示缓冲区??????????????? (.bss_end~34000000) ???? u-boot(bss,data,text) (33f00000~.bss_end) ???? heap(for malloc) ???? gd(global data) ???? bd(board data) ???? stack????????????????????????? ???? .... ???? nor flash????????????????????? (0~2M)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读