高通8155在启动过程中使/dev/block/bootdevice链接SD卡

时间: 2023-08-01 13:15:26 浏览: 47
高通8155系列芯片在启动过程中默认将`/dev/block/bootdevice`链接到`/dev/block/sda14`,这是因为这个芯片默认使用UFS存储设备,而不是SD卡。 如果需要将`/dev/block/bootdevice`链接到SD卡,需要进行以下操作: 1. 在设备树(device tree)中找到UFS设备节点,并注释掉或删除该节点。例如: ``` &ufs { status = "disabled"; }; ``` 2. 在设备树中添加SD卡设备节点,例如: ``` &mmc { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&sdhc_pins>; bus-width = <8>; vmmc-supply = <&pm8998_l17>; vqmmc-supply = <&pm8998_l16>; max-frequency = <200000000>; non-removable; num-slots = <1>; mmc-slot@0 { reg = <0>; bus-width = <8>; cd-gpios = <&tlmm 3 0>; disable-wp; }; }; ``` 其中,`&mmc`是SD卡设备节点的名称,`mmc-slot@0`是SD卡的插槽号,`cd-gpios`是SD卡的CD引脚,`disable-wp`表示SD卡不支持写保护。 3. 找到`dts`文件中的`chosen`节点,并将其中的`bootargs`属性修改为: ``` bootargs = "console=ttyMSM0,115200n8 root=/dev/mmcblk0p1 rw rootwait"; ``` 其中,`console=ttyMSM0,115200n8`表示串口输出,`root=/dev/mmcblk0p1`表示将SD卡的第一个分区作为根文件系统挂载,`rw`表示挂载为可读写,`rootwait`表示等待根文件系统就绪。 4. 保存修改后的`dts`文件,并编译为`dtb`文件,将其放置在系统镜像中相应的位置。 5. 刷入修改后的系统镜像,重启设备即可。 注意:修改设备树需要具有一定的技术水平,不正确的修改可能会导致系统无法启动或出现其他问题。因此,在进行修改前请备份原文件,并确保修改的内容正确无误。

相关推荐

在Android系统启动过程中,/dev/block/bootdevice/by-name目录下的符号链接是由init进程动态创建的。具体来说,init进程会根据设备树和分区表信息来确定各个分区的设备节点名称,并将这些名称与各个分区的名称进行映射,创建相应的符号链接。 具体的实现方式是通过脚本文件来完成的。在Android系统启动过程中,init进程会执行一系列脚本文件,其中就包括创建/dev/block/bootdevice/by-name目录下的符号链接。 这些脚本文件通常存储在init.rc文件中,它们会在系统启动时由init进程按照一定的顺序执行。例如,在高通平台上,init.rc文件中会包含类似下面的代码: # mount bootdevice partitions on post-fs mount_all /fstab.qcom symlink /dev/block/bootdevice/by-name/userdata /dev/block/bootdevice/by-name/data symlink /dev/block/bootdevice/by-name/misc /dev/block/bootdevice/by-name/apdp symlink /dev/block/bootdevice/by-name/modem /dev/block/bootdevice/by-name/mdm ... 这个脚本文件会在文件系统挂载完成后执行,调用mount_all命令来挂载所有分区,然后创建各个分区的符号链接。例如,上面的代码会创建名为userdata、misc、modem等符号链接,映射到相应的设备节点上。 需要注意的是,不同的Android平台和设备可能会有不同的分区表和设备节点名称,因此/dev/block/bootdevice/by-name目录下的符号链接可能会因硬件设备的不同而有所差异。
在 Android 系统中,/system/core 目录下的代码通常都是由 C++ 编写的,而 C++ 的标准库中并没有类似于 Java 的标准日志库。因此,在 C++ 代码中打印日志需要使用 Android 系统提供的日志库,即 logcat。 如果您无法在 logcat 中看到来自 /system/core 目录下的代码的日志输出,可能是由于以下原因: 1. 没有正确设置日志级别。在 Android 系统中,日志分为不同的级别,包括 VERBOSE、DEBUG、INFO、WARN、ERROR 和 FATAL。如果您的代码中使用了 ALOG 宏来打印日志,需要确保设置了正确的日志级别。比如说,在 DEBUG 模式下,可以在 Android.mk 文件中添加以下代码来设置日志级别: LOCAL_CFLAGS += -DDEBUG=1 然后,在代码中使用 ALOGD 宏来打印调试级别的日志: #include <android/log.h> #define LOG_TAG "MyCppCode" #define ALOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) ALOGD("Hello, world!"); 2. 没有正确设置日志标签。在打印日志时,需要指定一个标签,以便在 logcat 中进行过滤。如果您的代码中没有设置正确的日志标签,可能会导致无法在 logcat 中看到日志输出。在上面的示例中,我们使用了 LOG_TAG 宏来定义标签。 3. 没有正确的权限。在 Android 系统中,只有具有 android.permission.READ_LOGS 权限的应用程序才能读取系统日志。如果您的应用程序没有该权限,可能会导致无法看到日志输出。您可以通过在应用程序的 AndroidManifest.xml 文件中添加以下代码来请求该权限: <uses-permission android:name="android.permission.READ_LOGS" /> 如果您已经确保了以上三点,但仍然无法在 logcat 中看到日志输出,可能需要进一步排查问题,比如说检查是否存在其他的日志过滤条件,或者在代码中添加更多的调试信息来定位问题。
对于高通8155单安卓基线的SD卡启动方式,也可以通过修改cmdline来指定rootfs的挂载方式。具体方法如下: 1. 将SD卡插入电脑,使用任意文本编辑器打开SD卡中的boot分区中的"cmdline"文件。 2. 在"cmdline"文件中添加以下内容: androidboot.selinux=permissive androidboot.hardware=qcom androidboot.console=ttyMSM0 console=ttyMSM0,115200n8 androidboot.serialno=android12345678 androidboot.baseband=msm androidboot.bootdevice=msm_sdcc.1 androidboot.ddr_type=lpddr4 androidboot.boottime=9999999999 androidboot.memcg=1 lpm_levels.sleep_disabled=1 androidboot.verifiedbootstate=orange androidboot.oemandroidver=8.1.0 androidboot.keymaster=1 androidboot.avb_version=1.0 androidboot.fmp_config=1 androidboot.hlos=0x07 kernel.memcg=1 androidboot.boot_recovery=1 androidboot.bootreason=kernel_panic androidboot.slot_suffix=_a androidboot.hardware.revision=8300 androidboot.bootloader=unknown androidboot.secure_hardware=1 androidboot.cid=0x0 androidboot.ab_update=1 androidboot.dtbo_idx=0 androidboot.vbmeta.device_state=unlocked androidboot.bootloader_version=unknown androidboot.bootimage.build.date=Fri Mar 26 11:07:52 UTC 2021 androidboot.bootimage.build.date.utc=1616741272 androidboot.bootimage.build.fingerprint=google/coral/coral:11/RQ2A.210305.006/7119741:user/release-keys root=/dev/mmcblk0p1 rootwait rw 其中,需要修改的是最后一行的"root=/dev/mmcblk0p1 rootwait rw",这个参数指定了rootfs的挂载方式。在这个例子中,rootfs被挂载到一个名为"/dev/mmcblk0p1"的设备上。 3. 保存文件并将SD卡插回设备中,按照SD卡启动的方式启动设备。 需要注意的是,这里的修改是针对SD卡启动的,如果需要修改其他启动方式的rootfs挂载方式,需要对应修改相应的启动参数。同时,需要确保SD卡中的boot分区已经正确设置了启动相关的文件和参数。

最新推荐

网络技术-综合布线-河南农村宽带客户细分的研究.pdf

网络技术-综合布线-河南农村宽带客户细分的研究.pdf

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire

理解Socket编程的基础概念

# 1. 介绍Socket编程的基本概念 ## 1.1 什么是Socket编程 Socket编程是一种在网络编程中使用的抽象概念,它允许应用程序通过网络进行通信。通过Socket编程,可以实现客户端与服务器端之间的数据交换和通信。 ## 1.2 Socket编程的应用范围 Socket编程广泛应用于网络通信领域,包括但不限于Web服务、即时通讯、网络游戏、远程控制等。 ## 1.3 Socket编程的基本原理 Socket编程基于网络套接字(socket)的概念,通过套接字建立连接、传输数据和关闭连接来实现通信。在Socket编程中,使用不同的协议(如TCP、UDP)来实现数据传输和通信

c语言桌子上有几堆糖果,每堆糖果的数量记录在一个整型数组 nums 中。我们可以每次选择任意一堆,拿走其中的一颗或者两颗糖果,求拿完所有糖果的最少次数。

好的,以下是 C 语言的实现代码: ```c #include <stdio.h> #include <stdlib.h> int min(int a, int b) { return a < b ? a : b; } int minSteps(int* nums, int numsSize) { int dp[numsSize + 1]; dp[0] = 0; dp[1] = 1; for (int i = 2; i <= numsSize; i++) { dp[i] = min(dp[i-1] + 1, dp[i-2] + 1)

供应链管理制度(全).ppt

供应链管理制度

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依

Gunicorn监控和自动化运维

# 1. Gunicorn简介 ### 1.1 什么是Gunicorn Gunicorn是一个轻量级的Python WSGI HTTP服务器,可用于运行Django、Flask等Web应用。它通过将请求传递给应用程序的多个进程来实现并发处理,从而提高Web应用的性能和稳定性。 ### 1.2 Gunicorn的特点和优势 - **简单易用**:Gunicorn易于安装和配置,使用简单。 - **性能稳定**:Gunicorn能够有效管理并发连接,提供稳定的性能。 - **资源占用低**:相较于其他服务器,Gunicorn对资源的消耗相对较低。 - **支持异步处理**:Gunicorn

inno setup 怎么在脚本中设置程序的安装目录

在 Inno Setup 脚本中,你可以使用 `[Setup]` 节点中的 `DefaultDirName` 属性来设置应用程序的安装目录。默认情况下,`DefaultDirName` 属性设置为 `{pf}\{#MyAppPublisher}\{#MyAppName}`,其中 `{pf}` 表示“Program Files”目录,`{#MyAppPublisher}` 和 `{#MyAppName}` 分别表示你在脚本中定义的应用程序发布者和名称。 以下是一个示例脚本,演示如何设置应用程序的安装目录: ``` [Setup] AppName=MyApp AppVersion=1.0 De

中铁隧道集团机械设备管理规则.docx

中铁隧道集团机械设备管理规则.docx

关系数据表示学习

关系数据卢多维奇·多斯桑托斯引用此版本:卢多维奇·多斯桑托斯。关系数据的表示学习机器学习[cs.LG]。皮埃尔和玛丽·居里大学-巴黎第六大学,2017年。英语。NNT:2017PA066480。电话:01803188HAL ID:电话:01803188https://theses.hal.science/tel-01803188提交日期:2018年HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaireUNIVERSITY PIERRE和 MARIE CURIE计算机科学、电信和电子学博士学院(巴黎)巴黎6号计算机科学实验室D八角形T HESIS关系数据表示学习作者:Ludovic DOS SAntos主管:Patrick GALLINARI联合主管:本杰明·P·伊沃瓦斯基为满足计算机科学博士学位的要求而提交的论文评审团成员:先生蒂埃里·A·退休记者先生尤尼斯·B·恩