当前位置: 首页 > news >正文

深圳集团网站建设公司/班级优化大师官网

深圳集团网站建设公司,班级优化大师官网,华为认证培训机构排行榜,wordpress邮件功能一、引言 前面给大家介绍过,boot.img不是普通意义上的文件镜像,而是一种特殊的Android定制格式,由文件头信息boot header,压缩的内核,文件系统数据ramdisk以及second stage loader(可选)组成&a…

一、引言

前面给大家介绍过,boot.img不是普通意义上的文件镜像,而是一种特殊的Android定制格式,由文件头信息boot header,压缩的内核,文件系统数据ramdisk以及second stage loader(可选)组成,它们之间非页面对齐部分用0填充。今天来好好分析一下。

二、boot.img的生成与结构

boot.img的生成、配置

在build目录下查找boot.img,即可知道其编译规则在build/core/Makefile中,如下

# -----------------------------------------------------------------
# the boot image, which is a collection of other images.
INTERNAL_BOOTIMAGE_ARGS := \$(addprefix --second ,$(INSTALLED_2NDBOOTLOADER_TARGET)) \--kernel $(INSTALLED_KERNEL_TARGET) \--ramdisk $(INSTALLED_RAMDISK_TARGET)INTERNAL_BOOTIMAGE_FILES := $(filter-out --%,$(INTERNAL_BOOTIMAGE_ARGS))BOARD_KERNEL_CMDLINE := $(strip $(BOARD_KERNEL_CMDLINE))
ifdef BOARD_KERNEL_CMDLINEINTERNAL_BOOTIMAGE_ARGS += --cmdline "$(BOARD_KERNEL_CMDLINE)"
endifBOARD_KERNEL_BASE := $(strip $(BOARD_KERNEL_BASE))
ifdef BOARD_KERNEL_BASEINTERNAL_BOOTIMAGE_ARGS += --base $(BOARD_KERNEL_BASE)
endifBOARD_KERNEL_PAGESIZE := $(strip $(BOARD_KERNEL_PAGESIZE))
ifdef BOARD_KERNEL_PAGESIZEINTERNAL_BOOTIMAGE_ARGS += --pagesize $(BOARD_KERNEL_PAGESIZE)
endifINSTALLED_BOOTIMAGE_TARGET := $(PRODUCT_OUT)/boot.imgifeq ($(TARGET_BOOTIMAGE_USE_EXT2),true)
tmp_dir_for_image := $(call intermediates-dir-for,EXECUTABLES,boot_img)/bootimg
INTERNAL_BOOTIMAGE_ARGS += --tmpdir $(tmp_dir_for_image)
INTERNAL_BOOTIMAGE_ARGS += --genext2fs $(MKEXT2IMG)
$(INSTALLED_BOOTIMAGE_TARGET): $(MKEXT2IMG) $(INTERNAL_BOOTIMAGE_FILES)$(call pretty,"Target boot image: $@")$(hide) $(MKEXT2BOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) --output $@

根据

INTERNAL_BOOTIMAGE_ARGS := \$(addprefix --second ,$(INSTALLED_2NDBOOTLOADER_TARGET)) \--kernel $(INSTALLED_KERNEL_TARGET) \--ramdisk $(INSTALLED_RAMDISK_TARGET)

可知道,boot.img中包含了Image和ramdisk.img文件。
往下看

BOARD_KERNEL_CMDLINE := $(strip $(BOARD_KERNEL_CMDLINE))
ifdef BOARD_KERNEL_CMDLINEINTERNAL_BOOTIMAGE_ARGS += --cmdline "$(BOARD_KERNEL_CMDLINE)"
endif

可知道,在这里设置内核命令行(cmdline):BOARD_KERNEL_CMDLINE
在根目录下查找此变量

build/target/board/vbox_x86/BoardConfig.mk:20:BOARD_KERNEL_CMDLINE := init=/init qemu=1 console=tty0 vga=788 verbose androidboot.hardware=vbox_x86 androidboot.console=tty0 android.qemud=tty0
build/core/Makefile:404:BOARD_KERNEL_CMDLINE := $(strip $(BOARD_KERNEL_CMDLINE))
build/core/Makefile:405:ifdef BOARD_KERNEL_CMDLINE
build/core/Makefile:406:  INTERNAL_BOOTIMAGE_ARGS += --cmdline "$(BOARD_KERNEL_CMDLINE)"
build/core/Makefile:709:ifdef BOARD_KERNEL_CMDLINE
build/core/Makefile:710:  INTERNAL_RECOVERYIMAGE_ARGS += --cmdline "$(BOARD_KERNEL_CMDLINE)"
build/core/Makefile:987:    $(hide) echo $(BOARD_KERNEL_CMDLINE) > $(PRODUCT_OUT)/boot/cmdline
build/core/Makefile:1255:ifdef BOARD_KERNEL_CMDLINE
build/core/Makefile:1256:	$(hide) echo "$(BOARD_KERNEL_CMDLINE)" > $(zip_root)/RECOVERY/cmdline
build/core/Makefile:1275:ifdef BOARD_KERNEL_CMDLINE
build/core/Makefile:1276:	$(hide) echo "$(BOARD_KERNEL_CMDLINE)" > $(zip_root)/BOOT/cmdline
build/core/tasks/factory_ramdisk.mk:82:ifneq (,$(BOARD_KERNEL_CMDLINE_FACTORY_BOOT))
build/core/tasks/factory_ramdisk.mk:83:  RAMDISK_CMDLINE := --cmdline "$(BOARD_KERNEL_CMDLINE_FACTORY_BOOT)"
build/core/product.mk:238:	BOARD_KERNEL_CMDLINE \

很明显,此变量在"build/target/board/vbox_x86/BoardConfig.mk"中设置
将此文件中的此变量console修改为我们用的串口、波特率,修改完编译后,console即可成功启动。

往下

BOARD_KERNEL_BASE := $(strip $(BOARD_KERNEL_BASE))
ifdef BOARD_KERNEL_BASEINTERNAL_BOOTIMAGE_ARGS += --base $(BOARD_KERNEL_BASE)
endif

此处设置内核加载的基地址,BOARD_KERNEL_BASE
同上,在源码中查找此变量即可找到并修改kernel加载的基地址

往下

BOARD_KERNEL_PAGESIZE := $(strip $(BOARD_KERNEL_PAGESIZE))
ifdef BOARD_KERNEL_PAGESIZEINTERNAL_BOOTIMAGE_ARGS += --pagesize $(BOARD_KERNEL_PAGESIZE)
endif

此处设置映像的页面大小:BOARD_KERNEL_PAGESIZE

此时,剩下的代码就是生成boot.img的语句:

INSTALLED_BOOTIMAGE_TARGET := $(PRODUCT_OUT)/boot.imgifeq ($(TARGET_BOOTIMAGE_USE_EXT2),true)
tmp_dir_for_image := $(call intermediates-dir-for,EXECUTABLES,boot_img)/bootimg
INTERNAL_BOOTIMAGE_ARGS += --tmpdir $(tmp_dir_for_image)
INTERNAL_BOOTIMAGE_ARGS += --genext2fs $(MKEXT2IMG)
$(INSTALLED_BOOTIMAGE_TARGET): $(MKEXT2IMG) $(INTERNAL_BOOTIMAGE_FILES)$(call pretty,"Target boot image: $@")$(hide) $(MKEXT2BOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) --output $@

到此,我们可以知道 INTERNAL_BOOTIMAGE_ARGS的内容是:

–kernel out/target/product/xxx(产品名称目录)/kernel
–ramdisk out/target/product/xxx(产品名称目录)/ramdisk.img
–cmdline console=ttyx,115200n8(实际设置的串口、波特率)
–base 0x40000000 --pagesize 8192(设置的页大小)

boot.img的结构

了解boot.img的格式,必须查看MKBOOTIMG这个程序,其实就是out/host/linux-x86/bin/mkbootimg中的mkbootimg程序。
mkbootimg程序由system/core/mkbootimg工程生成得到,为此我们来看看其中的mkbootimg.c文件:

    if(write(fd, &hdr, sizeof(hdr)) != sizeof(hdr)) goto fail;if(write_padding(fd, pagesize, sizeof(hdr))) goto fail;if(write(fd, kernel_data, hdr.kernel_size) != hdr.kernel_size) goto fail;if(write_padding(fd, pagesize, hdr.kernel_size)) goto fail;if(write(fd, ramdisk_data, hdr.ramdisk_size) != hdr.ramdisk_size) goto fail;if(write_padding(fd, pagesize, hdr.ramdisk_size)) goto fail;if(second_data) {if(write(fd, second_data, hdr.second_size) != hdr.second_size) goto fail;if(write_padding(fd, pagesize, hdr.second_size)) goto fail;}

可知boot.img将信息头、内核、ramdisk以及second stage loader的可选选项组合到了一起,我们也可以修改上述代码来改变boot.img的机构。

小广告

最后打个小广告,是本人的一个小小副业。

大家有需要各种品牌的鞋(耐克、阿迪、斐乐、vans、匡威等),都可以加下面这个微信号,性价比巨高,质量绝对可靠,自己穿的也都是这买的,到手不喜欢,不影响二次销售可直接退货,希望大家能多多支持(暂时不想买的也欢迎添加,首双优惠!),全国包邮!

vx:cp_shop12138

http://www.lbrq.cn/news/1072675.html

相关文章:

  • 网站 自适应文字大小怎么做/uc浏览器网页版入口
  • 山东助企网站建设/站长是什么级别
  • 梧州网站优化/站长工具seo查询
  • 织梦网站上传路径不对/百度榜单
  • 淄博网站制作建设/线上网络推广怎么做
  • 如何建公司网站的步骤/图床外链生成工具
  • 皇岗网站建设/seo平台优化服务
  • 徐州建站网页建设/市场调研报告怎么写范文
  • 公司网站可以免费建吗/代运营哪家比较可靠
  • 网站模板 demo.vhostgo.com/网站域名查询工具
  • 做电商网站的/株洲网络推广
  • 做婚庆找什么网站/东莞网站建设推广公司
  • 怎么做扒代码网站/网站优化排名金苹果下拉
  • 唯一做性视频的网站/株洲做网站
  • 网站优化要怎么做才会做到最佳/最近发生的热点新闻
  • 西安网站建设推广服务/软文广告经典案例300字
  • 怎做网站转app/微信营销软件有哪些
  • 千库网官网首页登录/阳山网站seo
  • 网站的百度推广怎么做的/正规seo排名外包
  • 上海公司做网站的价格/网站统计哪个好用
  • 家居网站页面设计图片/目前最好的引流推广方法
  • 武进常州做网站/全国人大常委会
  • 动态网站开发基础教程课后习题答案/google网站入口
  • 徐州做网站的哪个好/宁波pc营销型网站制作
  • ps可以做网站动态图/沈阳高端关键词优化
  • 网站竞价难做优化/百度网站排名规则
  • 受欢迎的网站开发/恶意点击软件有哪些
  • 网易做相册旅游网站/北京网站seowyhseo
  • 义乌兼职网站建设/新东方一对一辅导价格
  • wordpress添加模板文件/百度seo点击排名优化
  • [硬件电路-143]:模拟电路 - 开关电源与线性稳压电源的详细比较
  • Java学习第一百部分——Kafka
  • 【ROS2】ROS2节点Node机制与常用命令行
  • RAWINPUT避坑指南(涉及GetRawInputData/GetRawInputBuffer)
  • linux进度条程序
  • Linux性能监控与调优全攻略