ubootとは

ubootの概要

u-bootは、組み込みシステムで一般的に使用される一種のブートローダーです。ブートローダーは、オペレーティングシステムが実行される前に実行される小さなプログラムです。これにより、ハードウェアデバイスを初期化し、メモリ空間のマッピングテーブルを確立して、適切なソフトウェアを確立できます。ハードウェア環境は、オペレーティングシステムカーネルを最後に呼び出す準備ができています。ブートローダーの主な操作タスクは、ハードディスクからRAMにカーネルイメージを読み取り、カーネルのエントリポイントにジャンプして実行します。つまり、オペレーティングシステムを起動します。システムは通常、電源投入時またはリセット時にアドレス0x00000000から開始され、システムのブートローダープログラムは通常このアドレスに配置されます。

ubootの構成

ディレクトリ構造

1、board中存放于开发板相关的配置文件,每一个开发板都以子文件夹的形式出现;
2、Commom文件夹实现u-boot行下支持的命令,每一个命令对应一个文件;
3、cpu中存放特定cpu架构相关的目录,每一款cpu架构都对应了一个子目录;
4、Doc是文档目录,有u-boot非常完善的文档;
5、Drivers中是u-boot支持的各种设备的驱动程序;
6、Fs是支持的文件系统,其中最常用的是JFFS2文件系统;
7、Include文件夹是u-boot使用的头文件,还有各种硬件平台支持的汇编文件,系统配置文件和文件系统支持的文件;
8、Net是与网络协议相关的代码,bootp协议、TFTP协议、NFS文件系统得实现;
9、Tooles是生成U-boot的工具。

  其中比较重要的目录就是/board、/cpu、/drivers和 /include目录,如果想实现u-boot在一个平台上的移植,就要对这些目录进行深入的分析。

作業モード

U-Bootの動作モードには、ブートロードモードとダウンロードモードがあります。ブートロードモードは、ブートローダーの通常の動作モードです。組み込み製品がリリースされると、ブートローダーはこのモードで動作する必要があります。ブートローダーは、組み込みオペレーティングシステムをフラッシュからSDRAMにロードして実行します。プロセス全体は自動です。ダウンロードモードは、ブートローダーが何らかの通信手段を介してPCからターゲットボードのフラッシュにカーネルイメージまたはルートファイルシステムイメージをダウンロードするモードです。ユーザーは、ブートローダーが提供するいくつかのコマンドインターフェイスを使用して、必要な操作を完了できます。

uboot起動プロセス

  • 第1ステージ(コンパイル)
1、CPU 自身初始化:包括MMU,Cache,时钟系统,SDRAM 控制器等的初始化;
2、重定位:把自己从非易失性存储器搬移到 RAM 中;
3、分配堆栈空间,设置堆栈指针;
4、清零 BSS 数据段;
5、跳转到第二阶段入口函数 start_armboot();
  • 第2段階(C言語)
1、为 U-boot 内部私有数据分配存储空间,并清零;
2、依次调用函数指针数组 init_sequence 中定义的函数进行一系列的初始化;
3、如果系统支持 NOR Flash,调用flash_init ()和display_flash_config ()初始化并显示检测到的器件信息;
4、如果系统支持 LCD 或VFD,调用lcd_setmem()或vfd_setmem()计算帧缓(Framebuffer)大小,然后在BSS 数据段之后为Framebuffer 分配空间,初始化gd->fb_base 为Framebuffer 的起始地址;
5、调用 mem_malloc_init()进行存储分配系统(类似于C 语言中的堆)的初始化和空间分配;
6、如果系统支持 NAND Flash,调用nand_init ()进行初始化;
7、如果系统支持 DataFlash,调用AT91F_DataflashInit()和dataflash_print_info()进行初始化并显示检测到的器件信息;
8、调用 env_relocate ()进行环境变量的重定位,即从Flash 中搬移到RAM 中;
9、如果系统支持 VFD,调用drv_vfd_init()进行VFD 设备初始化;
10、从 环 境 变 量 中 读 取 IP 地址和MAC 地址, 初始化gd->bd-> bi_ip_addr 和gd->bd->bi_enetaddr;
11、调用 jumptable_init ()进行跳转表初始化,跳转表在global_data 中,具体用途尚不清楚;
12、调用 console_init_r()进行控制台初始化;
13、如果需要,调用 misc_init_r ()进行杂项初始化;
14、调用 enable_interrupts ()打开中断;
15、如果需要,调用board_late_init()进行单板后期初始化,对于AT91SAM9260EK,主要是以太网初始化;
16、进入主循环:根据用户的选择启动 linux,或者进入命令循环执行用户输入的命令;

参考文献

U-BOOTの簡潔なバージョン-クイックスタートuboot

オリジナルの記事を162件公開 賞賛された183件 表示回数12万回

おすすめ

転載: blog.csdn.net/qq_31339221/article/details/105426073