android boot.img u-boot initrd 分析
今天剛好看到一個 booti 的 U-boot指令,因為不知道怎麼做的,就去trace code了。 在 U-boot 可能會使用 bootcmd=mmcinit 1;mmc 1 read 0x500 0x81000000 0x500000;booti 81000000 1. 先初始化 mmc slot 1 (第二個), omap應該是0跟1 2. 讀取mmc上面第一個partition的0x500到 記憶體的 0x81000000,總共讀取 0x500000 3. 開始parse boot_image.img header booti 的意思是該位置存在一個可啟動的image, 就是 kernel + initrd u-boot 流程,從 do_booti()看起,會先判斷前八個字元是否為"ANDROID!",如果是的話,代表他是可啟動android的kernel image。接下來把Header讀出來。 struct boot_img_hdr { unsigned char magic[BOOT_MAGIC_SIZE]; unsigned kernel_size; /* size in bytes */ unsigned kernel_addr; /* physical load addr */ unsigned ramdisk_size; /* size in bytes */ unsigned ramdisk_addr; /* physical load addr */ unsigned second_size; /* size in bytes */ unsigned second_addr; /* physical load addr */ unsigned tags_addr; /* physical addr for kernel tags */ unsigned page_...