android系统重新刷ROM简记(二)

kernel cmdline 添加位置 cmdline 阅读详情

android系统重新刷ROM简记(一)


在Android顶层源码目录使用make编译完成后,会生成这样一个目录: 

out/target/product/xxx,该目录内部有我们需要的boot.img,system.img等文件,boot.img使用kernel和out/target/product/xxx/root(广义的ramdisk)目录打包而成,也就是说boot.img是由kernel和ramdisk.img生成得到。 

在android的编译框架中,把许多固定的、反复用到的目录路径定义为宏变量,而上述生成的目录 

out/target/product/xxx的宏为PRODUCT_OUT 

out/target/product/xxx/system的宏即为:TARGET_OUT 

而out/target/product/xxx/root的宏即为:TARGET_ROOT_OUT, 

out/target/product/xxx/root主要是由system/core/rootdir目录拷贝得到的, 

 

 

而对于编译过程中bootloader,kernel以及system的规定都是放在build/core/Makefile文件中。启动规定了编译生成的规则。 

 

1 

2 

3 

4 

5 

6 

7 

#build/core/Makefile 

  

INTERNAL_BOOTIMAGE_ARGS := \ 

  

            --kernel $(INSTALLED_KERNEL_TARGET) \ 

  

            --ramdisk $(INSTALLED_RAMDISK_TARGET) 

显然,boot.img中包含了Image和ramdisk.img文件,但boot.img中的内容远不只这么多,本文将介绍 

boot.img中的其它参数,boot.img的生成以及最终boot.img的组成格式. 

INTERNAL_BOOTIMAGE_ARGS还包含以下内容: 

1.附加的内核命令行(cmdline): BOARD_KERNEL_CMDLINE 

同样在build/core/Makefile中,有以下一段内容(strip起到去除空格的作用): 

? 

1 

2 

3 

4 

5 

6 

7 

BOARD_KERNEL_CMDLINE := $(strip $(BOARD_KERNEL_CMDLINE) 

  

ifdef BOARD_KERNEL_CMDLINE 

  

    INTERNAL_BOOTIMAGE_ARGS += --cmdline "$(BOARD_KERNEL_CMDLINE)" 

  

#endif 

而BOARD_KERNEL_CMDLINE则在文件device/telechips/tcc88xx-common/BoardConfigCommon.mk中定义: 

? 

1 

BOARD_KERNEL_CMDLINE := console=ttyTCC, 115200n8 

2.内核加载的基地址,BOARD_KERNEL_BASE 

同样在build/core/Makefile中,有以下一段内容: 

? 

1 

2 

3 

4 

5 

6 

7 

BOARD_KERNEL_BASE := $(strip $(BOARD_KERNEL_BASE)) 

  

ifdef BOARD_KERNEL_BASE 

  

    INTERNAL_BOOTIMAGE_ARGS += --base $(BOARD_KERNEL_BASE) 

  

endif 

而BOARD_KERNEL_BASE也在device/telechips/tcc88xx-common/BoardConfigCommon.mk中定义。 

? 

1 

BOARD_KERNEL_BASE := 0x40000000 

3.映像的页面大小:BOARD_KERNEL_PAGESIZE 

同样在build/core/Makefile中,有以下一段内容: 

? 

1 

2 

3 

4 

5 

6 

7 

BOARD_KERNEL_PAGESIZE:= $(strip $(BOARD_KERNEL_PAGESIZE)) 

  

ifdef BOARD_KERNEL_PAGESIZE 

  

    INTERNAL_BOOTIMAGE_ARGS += --pagesize $(BOARD_KERNEL_PAGESIZE) 

  

endif 

而BOARD_KERNEL_PAGESIZE 却在device/telechips/tcc8800/BoardConfig.mk中定义: 

? 

1 

BOARD_KERNEL_PAGESIZE := 8192 

剩下的内容就是生成boot.img的关键语句,在 build/core/Makefile中,内容如下: 

? 

1 

2 

3 

4 

5 

INSTALLED_BOOTIMAGE_TARGET := $(PRODUCT_OUT)/boot.img 

  

$(INTALLED_BOOTIMAGE_TARGET) : $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILE 

  

      $(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS)  --output $@ 

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

? 

1 

2 

3 

4 

--kernel     out/target/product/tcc8800/kernel 

--ramdisk   out/target/product/tcc8800/ramdisk.img 

--cmdline   console=ttyTCC,115200n8 

--base 0x40000000  --pagesize 8192 

而预知boot.img的格式,必须查看MKBOOTIMG这个程序,其实就是out/host/linux-x86/bin/mkbootimg中的mkbootimg程序。 

mkbootimg程序由system/core/mkbootimg工程生成得到,为此我们来看看其中的mkbootimg.c文件,其中有这样一段: 

? 

1 

2 

3 

4 

5 

6 

7 

8 

9 

10 

11 

12 

13 

//信息头部分 

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(wirte_padding(fd,pagesize,hdr.ramdisk_size)) goto fail; 

可见boot.img是由文件头信息,内核数据以及文件系统数据组成,它们之间非页面对齐部分用0填充(可以 

查看write_padding的代码),文件头信息的具体结构可以在system/core/mkbootimg/bootimg.h中看到: 

? 

1 

2 

3 

4 

5 

6 

7 

8 

9 

10 

11 

12 

13 

14 

15 

16 

17 

18 

19 

20 

21 

22 

23 

24 

25 

26 

27 

28 

29 

30 

31 

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加密等内容 

  

} 

其它成员也很明了,由此可知boot.img的大致组成结构了。 

高通uefi的abl增加新的kernel cmdlin标签经验分享 阅读详情

相关推荐

android10.0(Q) root QCOM-SM6125 user版本打开root权限

修改方案 总共修改 12 个文件 modified:device/qcom/qssi/BoardConfig.mk modified:device/qcom/trinket/BoardConfig.mk modified:system/core/init/Android.bp modified:system/core/init/Android.mk modified:system/core/init/selinux.cpp modified:system/core/fs_mgr/Android.bp m

纸上得来终觉浅,绝知此事要躬行 5905

关于写死bootargs实例

文章目录1. 说明2. 举例3. 原理 1. 说明 1.附加的内核命令行(cmdline): BOARD_KERNEL_CMDLINE 在build/core/Makefile中,有以下一段内容(strip起到去除空格的作用): BOARD_KERNEL_CMDLINE := $(strip $(BOARD_KERNEL_CMDLINE) ifdef BOARD_KERNEL_CMDLINE ...

生于忧患,死于安乐 764

ROM定制编辑修改完整教程

ROM编辑定制,修改自定义系统,完整教程

zecoki的博客 3942

【Linux kernel】linux kernel中的cmdline (二)

在linux启动完成后,通过 cat /proc/cmdline也是可以看到cmdline. 那么cmdline是如何添加的呢?

weixin_41028159的博客 902

android修改原生代码,【ROM教程】安卓原生ROM修改源码消除WIFI叹号教程

【ROM教程】安卓原生ROM修改源码消除WIFI叹号教程。Android为了对网络状态进行检测,采用了一种叫做captive detection的方式进行网络状态检测。其实说起来很简单,每当连接到一个网络,比如移动数据网络或者WIFI的时候,Android的NetworkMonitor模块会构造一个http/https的请求,发送到指定的服务器,然后利用收到的响应进行网络状态判断。安卓手机网络状态...

weixin_35141284的博客 2453

安卓13_ROM修改定制化-----ROM解打包 修改 讲解 导读篇

💖💖💜本文介绍了安卓13系统ROM解打包与定制修改的基础知识。主要内容包括:ROM解打包的概念与必要性,常用工具的使用方法,以及系统功能定制、参数优化、限制突破等常见修改方向。文章还强调了修改风险,包括设备变砖和保修失效的可能性,并警示不得用于非法用途。最后指出实践是掌握ROM修改技能的关键,后续将深入讲解具体操作步骤。该系列专栏旨在为安卓系统定制爱好者提供技术指导和交流平台。

小马哥的专栏 1219

Android ROM制作教程,让你拥有自己喜欢的ROM

文章转载自:http://bbs.xiaomi.cn/t-13336185 作者斯文是我 关键词:java环境配置 制作工具 update-编写美化 集成 编译反编译 一. 制作目的: 1. 培养个人兴趣,感受动手动脑的快乐。 2. 学习手机基本知识,最终动手制作自己的ROM。 3. 帮助那些需要帮助的朋友(说不定有人喜欢你制作的ROM) 二. 制作原理: 1. 安卓基础知识普及: Andro...

iqiqiya的博客 3万+

全面掌握安卓ROM制作工具

在开始制作自定义安卓ROM之前,了解合适的工具是至关重要的。本章将对ROM制作过程中常用到的工具进行简单介绍。在众多签名工具中,一些尤为突出。例如,Google官方提供的刷机工具fastboot就是一个强大的签名工具,它能够对Android系统的boot分区、recovery分区等进行签名。另一个知名的工具是Android Open Source Project (AOSP) 的mkbootimg工具,它可以用来创建和修改boot.img文件,并为其添加签名。

weixin_32098457的博客 1224

MIUI刷Android原生,小米手机怎么刷安卓原生系统

小米手机自带的系统很好,但是很多人还是希望用安卓的原生系统,小米手机是支持刷机成为安卓原生系统的。那么小米手机怎么刷安卓原生系统呢?今天学习啦小编与大家分享下小米手机刷安卓原生系统的具体操作步骤,有需要的朋友不妨了解下。小米手机刷安卓原生系统方法下载工具包和线刷完整包,下载完成后解压,刷机工具点击下载MIUI 最新版线刷Fastboot开发版完整包点击下载。(请检查文件后缀名是否为".tgz",如...

weixin_39653481的博客 2万+

cut&tag学习笔记

上图是我得到的结果,下图是教程的结果,比对结果有一些差异,我也不知道具体原因是啥。谷歌了一下,发现原因可能是因为环境变量的问题,系统不知道picard的具体位置,需要设置全局环境变量,遂查了一下picard的位置。我发现我做出来的结果测序深度一致,但是比对的结果有一点差异,不知道是我的操作问题,还是参考基因组更新了导致比对结果出现了些许不同。上图是我得到的结果,下图是教程的结果,除了IgG_rep1外比对结果一致。上图是我的结果,下图是教程的结果,结果不太一致,不知道是具体的原因是什么。

weixin_52073820的博客 2423

KEPServerEX实战:Modbus TCP与RTU双协议配置详解

本文详细解析了如何使用KEPServerEX软件同时配置与管理Modbus TCP和RTU混合网络。通过实战步骤,指导用户建立双协议通道、配置设备与标签,并分享核心的地址映射规则与通讯故障排查技巧,帮助工业自动化工程师高效集成多协议设备,简化数据采集架构。

weixin_29186249的博客 397

android 刷rom,刷ROM是什么?刷ROM是什么意思?

刷ROM是什么意思首先,ROM是由英文Read only Memory的首字母构成的,意为只读存储器。顾名思义,就是这样的存储器只能读,不能像RAM一样可以随时读和写。它只允许在生产出来之后有一次写的机会,数据一旦写入则不可更改。它另外一个特点是存储器掉电后里面的数据不丢失,可以存放成百上千年。手机ROM指的是存放手机固件代码的存储器(常说的刷机也就是指的是重新构建自己想要的ROM),比如手机的操...

weixin_42131342的博客 1951

爬虫风控实战:当你的代理IP被数美滑块盯上时,如何优雅破解?

本文深入探讨了爬虫风控对抗中数美滑块验证码的破解与防御策略。通过分析数美滑块的多层防御机制,提出了代理IP池精细化管理、请求特征拟人化改造以及工程化滑块验证解决方案等系统性方法,帮助开发者有效降低验证码触发率,提升爬虫效率。

weixin_27419879的博客 207

计算机ROM指什么意思,ROM是什么 刷ROM是什么意思

ROM是只读内存(Read-Only Memory)的简称,是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦储存资料就无法再将之改变或删除。通常用在不需经常变更资料的电子或电脑系统中,并且资料不会因为电源关闭而消失。如今安卓智能手机说的最多还是刷机,但现在又冒出了一个刷ROM,对于很多朋友来说,容易将这两者混淆,以致于不容易理解。其实手机刷ROM就是指刷机。ROM是指手机硬盘(存储东西与...

weixin_30520605的博客 2万+

Spyglass实战指南:跨时钟域同步方案深度解析

本文深度解析了Spyglass在跨时钟域同步方案验证中的实战应用。通过真实案例阐述了亚稳态的危害,并详细介绍了从基础的两级同步器到复杂的异步FIFO与握手协议等八大同步方案,以及如何利用Spyglass进行有效配置、检查与问题排查,为提升芯片设计可靠性提供系统性的避坑指南。

weixin_29219189的博客 838

workbench谐响应

定义材料 打开Engineering Data定义材料,在分析时不同部分选择不同材料 建模 打开Geometry建模,我举的例子很简单就一根光秃秃的轴 因为要加轴承,在轴上创建imprint face 因为要用point mass代替轴上原来的盘,在轴上盘的位置新建一个Plane,用Slice方法将轴从XYPlane3分成两段 施加边界条件以及谐响应分析 打开Model 1.在两段轴的交界面处,创建Point Mass,输入质量与转动惯量,位置在轴线上 2.mass point promote to.

my blogs include programming, math, physics.回首过去,放眼未来。 leslielee.blog.youkuaiyun.com 5884

安卓rom制作教程_【教程】一加5/5T刷入第三方ROM教程

一、备份手机上需要的资料二、解锁及刷twrp recovery:首次刷入需要用电脑下载一键刷入recovery工具https://www.lanzous.com/i50mihc,在手机的设置---关于中,连续点击版本号,出现开发者选项后,返回到设置,进入开发者选项,打开OEM解锁和usb调试,连接电脑,手机出现询问信息,点击允许;刷机打开下载好的工具,按照提示操作,等待完成后即可三、刷入...

weixin_39811193的博客 2821

LoRa正点原子模块组网步骤

按照我上一篇的博客和视频演示,相信大家一定都可实现了lora模块点对点的通信了。那我们来进行一个比较有高难度的设计吧! 使用多个loRa模块去完成一个组网设计: 在这之前一定要配置模块信息为定点传输 AT+TMODDE要等于1奥 第一步分析通讯协议: 点对点通讯是在透明传输的条件下,地址和信道都是一样的,直接发送接受数据。 组网呢我们利用是: 定向传输就是 A、B的地址、信道不同 假如A是要想B发送信息就用函数来下面: int b[5]...

weixin_43205178的博客 4082

卡刷rom轻松转线刷rom_常见的第三方REC卡刷过程总结

从最原始的官方REC升级,到第三方REC卡刷ROM,刷机的方式,也在不断的更新,并且产生出新的卡刷形式。尤其是在谷歌推出的Project Treble(简称PT)之后,新机型对于各种不同的厂商的ROM的兼容性似乎更好了。这也就意味着可以刷通刷包或者恢复包了。和普通的第三方REC卡刷不同,通刷包以及恢复包的刷入形式比较特殊,不是简单地安装即可。目前,常见的第三方REC卡刷,主要有以下三种:...

weixin_39767386的博客 2万+

PVE(Proxmox VE)添加VMware Esxi并迁移虚拟机

跨平台迁移虚拟机:从VMware虚拟化平台迁移虚拟机到PVE平台。

VEGETA的博客 7715

SPAD IMX479规格_VOP

对于VOP的定义,很多人可能是不理解这一路的供电,实际上这一路供电是非常重要的,这是给器件SPAD供电,决定SPAD是否work,在大部分的paper以及大部分公司,基本都是叫VOP,名称是SPAD breakdown voltage power supply,严格意义上叫Operating Voltage,工作电压。当然有些公司也有一些其他叫法就不提了。其实大家可以明显的看出,典型值-20.5没有发生变化,市面上绝大多数VOP的典型值也都是在-20V这边。

致力于lidar应用开发 701

[教程] [经验技巧] 任意手机移植ROM 教程,超详细ROM 技术学习

从内核基于linux开始 整个系统就运行在一个虚拟机上,这是安卓的一大特征!! 那么我们移植的时候要修改哪一部分? 这就是我们这个帖子的重点了 参考本链接 http://www.miui.com/thread-3660267-1-1.html 交流学习 通俗易懂的流程,主体框架不会改变。固定的目录结构,移植不同设备,根据不同的需求对几个特定文件进行修改。最后重新进行压缩zip,zip包名改为upd...

qq_15904867的博客 2万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

MIUI13欧洲ROM开发版安卓12超详细教你刷入MIUI欧洲版ROM

MIUI13欧洲ROM开发版安卓12简洁版教程 通过 Fastboot 安装 A12 设备: 下载我们的 ROM zip 文件 解压下载的 zip 文件在 PC 中 将您的设备重新启动到快速启动模式(按降低音量键 + 电源键) 通过 USB 电缆连接到 PC 根据您的 PC 操作系统从解压缩的 zip 运行 fastboot 安装脚本: 对于 Windows 操作系统 -windows_fastboot_update_rom.bat 对于 Linux -linux_fastboot_update_..

zeh_521的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

android 系统重新安装,一招学会安卓手机系统重装教程

看过小编之前的文章的朋友们,相信很多都知道电脑系统重装的教程,那么,安卓手机系统重装教程大家知道吗?如果现在大家用安卓的手机进行一次系统重装,很多人都不知道如何下手了吧!下面,小编就以oppoulike2为例,教大家一招学会安卓手机系统重装教程。关闭手机。按下音量减小键不放的同时,按下开机键。等待手机进入3se模式(recovery模式)。如果不知道自己的手机如何进入recovery模式,可以电脑...

weixin_39627408的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

<ROM>

~

随便写写 2225

什么是android刷机包,什么是安卓RAM?安卓RAM和安卓ROM有什么区别?

我们平时听到的安卓系统其实是一个很复杂的程序,就比如安卓ROM和安卓RAM,安卓ROM我们平时可能听说过,但是RAM可能听说就比较少了,对于初次了解安卓的机友来说可能是一个模糊的地方。今天,小编就为大家详细的讲解一下什么是RAM,RAM和ROM有什么实质的区别。一、ROM和RAM的介绍ROM是英文Read Only Memory的首字母的缩写,其意思是储存器只能读不能写。RAM是英文Readom ...

weixin_30864831的博客 784
上一篇: 文件系统笔记ext4 yaffs2 fat ubi
下一篇: 如何正确的make menuconfig
野-百-合
博客等级 码龄17年 308粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值