U-Boot学习记录

U-Boot小点记录


第一篇博客,记录下U-Boot小点,这个编辑器要顶格可真麻烦。
—————————————————————————————————————————————
参考:《嵌入式linux应用开发完全手册》

  • CPU上电后,MIPS的CPU会从0XBFC00000取第一条指令,ARM的CPU会从0X00000000开始,Uboot就存放在这个地址处;
  • U-Boot有加载模式(从存储设备加载操作系统)和下载模式(利用串口或网络从服务器主机下拉系统镜像)两种操作;
  • 嵌入式linux系统的典型分区结构:
    U-Boot学习记录_第1张图片
    "Boot parameters"分区存放一些可设置的参数,包括IP地址、串口波特率、 要传递给内核的命令行参数等。
    U-Boot将参数存放在"Boot parameters"分区后,启动内核,内核从"Boot parameters"分区获取参数。
    Linux2.4.x版本后以标记列表(tagged list) 的形式传递启动参数:
    标记列表以ATAG_CORE开始,以ATAG_NONE结束;
    标记的数据结构为tag,由一个tag_header和一个union组成
    tag_header表示标记的类型和长度,不同类型标记使用不同的union。
    相关结构体的定义在arch/arm/asm/setup.h头文件中

例如设置命令行标记:

char *p="root=/dev/mtdblock 2 init=/linuxrc console=ttySAC0";
params->hdr.tag=ATAG_CMDLINE;
params->hdr.size=(sizeof(struct tag_header)+strlen(p)+1+4) >> 2;
strcpy(params->u.cmdline.cmdline,p);
params=tag_next(params);

“params->hdr.size=(sizeof(struct tag_header)+strlen§+1+4) >> 2” 这句右移2没搞明白。
相关例子挺多的,用grep一搜就出来了。
tag结构参考链接.

  • 从存储设备上启动的U-Boot大多都是两部分启动过程:第一部分使用汇编实现,完成依赖CPU架构的实现和调用第二部分diamante;第二部分使用C语言实现;

  第一阶段:
  1、硬件初始化;
  (初始化硬件包括:关闭WATCHDOG、关中断、设置CPU的速度和时钟频率、RAM初始化等(不是都必须的))
  2、为第二阶段代码准备RAM空间;
  3、复制第二阶段代码到RAM空间;
  4、设置栈;
  5、跳转到第二阶段代码;
  第二阶段:
  1、初始化本阶段需要的硬件;
  2、检测系统内存映射;
  3、将系统镜像和根文件系统读取到RAM中;
  4、设置内核启动参数;
  5、调用内核;

  • 调用内核之前必要的设置:

  1、CPU寄存器设置:
  (1)、R0 = 0;
  (2)、R1 = 机器ID;(机器类型ID:内核目录/arch/arm/tools/mach-types
  (3)、R2 = 启动参数所标记的内核在RAM中的起始基地址;
  C语言可用theKernel来调用内核:

void (*theKernel)(int zero, int arch, uint params);
...
启动内核的方式:
theKernel (0, bd->bi_arch_number, bd->bi_boot_params);

theKernel函数在Documentation\arm\Booting 中有说明:
U-Boot学习记录_第2张图片
     2、CPU工作模式:
     (1)、必须禁止中断(FIQ和IRQ);
     (2)、CPU必须为SVC模式(Supervisor超级用户模式);
     3、Cache和MMU设置:
     (1)、必须关闭MMU;
     (2)、必须关闭数据Cache;
     (3)、指令Cache可关闭可不关;

  • U-Boot目录的common的文件夹底下存放着很多UBoot命令的源文件;
  • 编译完UBoot后会在UBoot项目下的tools文件夹中生成一些工具,其中,使用mkimage工具可以将内核文件制作成U-Boot格式的uImage;
  • 配置文件中有两类宏:
       (1)、选项宏,"CONFIG_"前缀,用于选择CPU、SOC、开发板类型、系统时钟设置、设备驱动等;
      (2)、参数宏,"CFG_"前缀,用于设置malloc缓冲池大小、U-Boot提示符、U-Boot下载文件是的默认加载地址、Flash的起始地址等。
  • 未完待续。。。

你可能感兴趣的:(U-Boot)