日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

boot.img的分析

發(fā)布時間:2025/4/16 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 boot.img的分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1 boot.img?
boot.img是由文件頭信息,內(nèi)核數(shù)據(jù)以及文件系統(tǒng)數(shù)據(jù)組成,它們之間非頁面對齊部分用0填充
文件頭信息的具體結(jié)構(gòu)可以在system/core/mkbootimg/bootimg.h中看到:
struct boot_img_hdr??
{??
??? unsigned char magic[BOOT_MAGIC_SIZE];??
??? unsigned? kernel_size;??
??? unsigned? kernel_addr;??
??? unsigned? ramdisk_size;??
??? unsigned? ramdisk_addr;??
??? unsigned? second_size;??
??? unsigned? second_addr;??
??? unsigned? tags_addr;??
??? unsigned? page_size;??
??? unsigned? unused[2];??
??? unsigned? char? name[BOOT_NAME_SIZE]??
??? unsigned? char cmdline[BOOT_ARGS_SIZE]??
??? unsigned? id[8]; //存放時間戳,校驗和,SHA加密等內(nèi)容??
} 2 生成boot.img?
在build/core/Makefile里,INSTALLED_BOOTIMAGE_TARGET 是生成boot.img ,其中參數(shù)為INTERNAL_BOOTIMAGE_ARGS ,該參數(shù)
主要是--kernel , 用到了BOARD_KERNEL_BASE ,而在device/qcom/BoardConfig.mk中,會定義 BOARD_KERNEL_BASE?
這樣mkbootimg :
--kernel???? kernel?? --ramdisk?? ramdisk.img? --cmdline $(BOARD_KERNEL_CMDLINE)?
--base $(BOARD_KERNEL_BASE)? --pagesize 2048?
?
mkbootimg的代碼在system/core/mkbootimg 它分析參數(shù)后,依次寫入header, kernel ,ramdisk .?
header參數(shù)為:
?kernel_addr? = base 0x8000? --- 內(nèi)核加載的基地址
?ramdisk_addr = base 0x01100000
?tags_addr??? = base 0x1000 確認 boot loader 所用的內(nèi)核基地址必須和內(nèi)核映像在編譯時所用的運行基地址一致,假設(shè)你的內(nèi)核映像在
編譯時用的基地址是 0xc0008000,但你的 boot loader 卻將它加載到 0xc0010000 處去執(zhí)行,那么內(nèi)核映像
當(dāng)然不能正確地執(zhí)行了。 在Kernel/arch/arm 下面的Makefile.boot 中指定了內(nèi)核編譯鏈接的基地址。
zreladdr??? ---- kernel_addr
params_phys ---- tags_addr 3 boot.img的加載
?在lk 中, smem_ptable_init 函數(shù)中會初始化 smem_apps_flash_start ,它通過讀share memory ,也就是ARM9端傳入的0:APPS?
?這樣在targe_init函數(shù)中,會將offset = smem_apps_flash_start , 然后ptable_add將第一個分區(qū)的地址設(shè)置為offset .
?
?在ARM9 中 有兩個文件 partition.h 和 partition.c?
?partition.h? 中定義了:
?? FLASH_PARTI_APPS? "0:APPS" --- 對于boot.img?
?partition.c? 中定義了所有的分區(qū)的大小, 這樣smem_apps_flash_start 其實就為ARM9的所有image的大小。
?
?4 ARM9中的實現(xiàn)
?? 函數(shù)smem_retrieve_mibib 中將分配 smem_alloc , 也就是有512 字節(jié)的 MIBIB區(qū)?
???
?? MIBIB區(qū) : 16個字節(jié)是header?
????????????? 每個分區(qū) 28個字節(jié)
????????????? 這樣共有16個分區(qū)
? 每個分區(qū)信息,flash_partition_entry 包括了name 和 offset .
? 這樣ARM11 測 根據(jù)name 為0:APPS 得到offset ,也就是該分區(qū)的起始地址。
? MIBIB 分區(qū) 是通過根據(jù) mjnand -c mibib_xxx.cfg 得到

總結(jié)

以上是生活随笔為你收集整理的boot.img的分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。