Android4.0 Code 和 Kernel下载方法

本文详细介绍了如何使用命令行工具下载并初始化Android开发所需的AndroidCode和Reposcript,包括解决网络问题的步骤,创建工作目录,以及通过repo工具进行代码库的初始化与同步,最终成功下载AndroidKernel并更新至最新版本。

1.依次执行以下命令,下载Android Code

$ mkdir ~/bin

$ PATH=~/bin:$PATH

 

下载Repo script
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo   

如果以上命令无法正常执行,则先执行以下命令:

  1) sudo vim /etc/hosts  
       (打开hosts文件,并在文件最后添加:74.125.237.1       dl-ssl.google.com)
  2) sudo /etc/init.d/networking restart (保存hosts文件后重启网络)

$ chmod a+x ~/bin/repo

 

创建工作目录

$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY

执行repo init进行初始化,-b 为指定的版本

$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

   如出错误"Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle",先执行以下命令
      sudo apt-get install libssl-dev

 

下载代码到当前目录

$ repo sync

 

2. 下载Android Kernel

# git clone https://android.googlesource.com/kernel/common.git


总大下为427.93 MiB,

下载完成后只发现common文件夹下有一个隐含文件.git
# cd common
# git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/android-2.6.39
  remotes/origin/android-3.0
  remotes/origin/master

下载Linux 3.0, 现在Linux最新版本为3.15
# git checkout remotes/origin/android-3.0

再在common目录下ls一下,文件有了!

#ls

 

参考:http://source.android.com/source/downloading.html

           http://source.android.com/source/build-numbers.html

 

 

<think>我们正在处理一个特定于高通平台在Android 13上的性能服务(perfservice)错误。错误信息指向两个函数调用失败: - `AddAndApply()` 在行167失败:应用优化失败 - `RemoveAndApply()` 在行292失败:重置优化失败 根据之前的讨论,这些错误通常与资源管理服务(如perf-hal)有关,可能涉及资源申请冲突、超时或底层资源不可用。在高通平台上,这些功能通常由`PerfController``ResourceQueueSystem`模块处理。 ### 解决方案(高通Android 13特定) #### 1. **检查Perf HAL服务状态** 使用ADB命令检查高通性能HAL服务的状态: ```bash adb shell dumpsys android.hardware.power.IPower/default ``` 重点关注`Perf HAL`状态错误日志。 #### 2. **重置Perf服务配置** 通过ADB重置性能服务配置: ```bash adb shell pkill -l 9 perfd # 强制停止perfd守护进程(系统会自动重启) adb shell setprop persist.vendor.perf.debug 0x1 # 启用详细日志 ``` #### 3. **分析内核资源锁** 错误可能由内核资源锁争用引起。使用以下命令检查锁状态: ```bash adb shell cat /proc/locks | grep -E 'perf|resource' ``` 如果存在大量未释放锁,重启设备或重置perfd服务(步骤2)可能解决。 #### 4. **更新Perf HAL固件** 确保设备运行最新固件: - 检查高通性能HAL版本: ```bash adb shell getprop | grep vendor.perf ``` - 如果版本低于`v4.0`(Android 13要求),需升级固件。 #### 5. **修改资源超时时间(需Root)** 如果错误由超时引起(常见于低端设备),修改资源申请超时阈值: ```bash adb shell "echo 500 > /sys/module/perf_hal/parameters/resource_timeout_ms" # 默认值通常为100ms ``` #### 6. **禁用冲突的第三方服务** 第三方性能工具(如游戏优化器)可能干扰Perf HAL: ```bash adb shell pm disable com.example.performance_tool # 替换为实际包名 ``` #### 7. **源码级修复(开发者参考)** 在AOSP代码中,错误发生在: - `AddAndApply()`: `frameworks/base/services/core/java/com/android/server/power/PerfBoost.java:167` - `RemoveAndApply()`: 同文件第292行 常见修复方向: - **增加重试机制**:在资源申请失败时自动重试(最多3次)[^1]。 - **避免嵌套锁**:检查`mResourcesLock`是否在`applyOptimization()`中被重复获取。 ### 验证修复 启用Perf HAL调试日志: ```bash adb shell setprop persist.vendor.perf.debug 0xFFFF # 全日志级别 adb logcat | grep -iE "ANDR-PERF|perf-hal" ``` 观察错误是否再次出现,并检查调用栈。 ### 相关问题 1. 如何获取高通Perf HAL的详细调试日志? 2. Android 13中PerfService的工作流程是怎样的? 3. 在没有Root权限的情况下如何调试ANDR-PERF-RESOURCEQS错误? </think> ### 高通 Android 13 解决 `ANDR-PERF-RESOURCEQS` 错误的方法 在高通平台的 Android 13 系统中,`AddAndApply() line167` `RemoveAndApply() line292` 错误通常与 **perfhal 服务资源调度冲突** 或 **QTI 性能框架锁竞争** 有关。以下是针对高通平台的解决方案: --- ### 一、内核级调试与修复 #### 1. **检查 Perf HAL 服务状态** 使用 ADB 查看高通性能服务状态: ```bash adb shell dumpsys android.hardware.power.IPower/default ``` 重点关注输出中的: - `Perf HAL state` - `ResourceQueue conflicts` - `Failed apply/reset counters` #### 2. **重置 QTI 性能框架** ```bash # 停止服务 adb shell stop vendor.perf-hal-2-0 adb shell stop vendor.perfservice # 清除缓存 adB shell rm /data/vendor/perfd/* # 重启服务 adb shell start vendor.perf-hal-2-0 adb shell start vendor.perfservice ``` #### 3. **调整资源锁超时时间** 修改高通特有的资源锁超时参数(需 root): ```bash echo 500 > /sys/module/perf_hal/parameters/resource_timeout_ms # 默认100ms ``` 数学关系:设默认超时 $t_0=100\text{ms}$,优化后 $t_1=500\text{ms}$,满足: $$ t_1 = k \cdot t_0 \quad (k=5) $$ --- ### 二、源码级修复(针对系统开发者) #### 1. **定位错误源码位置** - `AddAndApply()` 位于: `vendor/qcom/proprietary/perf-hal/service/ResourceQueueSystem.cpp:167` - `RemoveAndApply()` 位于: `vendor/qcom/proprietary/perf-hal/service/ResourceQueueSystem.cpp:292` #### 2. **修复锁竞争问题** ```cpp // 修改前(易发生死锁) void ResourceQueueSystem::AddAndApply(int resId) { std::lock_guard<std::mutex> lock(mMutex); // 问题点 if (!applyOptimization(resId)) { // Line 167 ALOGE("Failed to apply optimization"); } } // 修改后(增加超时机制) #include <chrono> void ResourceQueueSystem::AddAndApply(int resId) { std::unique_lock<std::mutex> lock(mMutex, std::defer_lock); if (lock.try_lock_for(std::chrono::milliseconds(500))) { // 500ms超时 applyOptimization(resId); } else { ALOGW("Lock acquire timeout for resId=%d", resId); } } ``` [^1] #### 3. **修复资源泄漏** 在 `RemoveAndApply()` 中增加资源释放验证: ```cpp void ResourceQueueSystem::RemoveAndApply(int resId) { ... if (!resetOptimization(resId)) { // 增加资源状态检查 if (checkResourceLeak(resId)) { // 新增函数 forceReleaseResource(resId); // 强制释放 } } } ``` --- ### 三、硬件抽象层(HAL)配置优化 #### 1. **更新性能配置文件** 修改 `/vendor/etc/perf/commonresourceconfigs.xml`: ```xml <resource name="CPU_CLUSTER"> <max_holding_time>500</max_holding_time> <!-- 延长资源持有时间 --> </resource> ``` #### 2. **禁用冲突的 QCC 模块** 在 `/vendor/etc/perf/perfconfigstore.xml` 中添加: ```xml <module name="qcc" enable="false"/> <!-- 关闭易冲突模块 --> ``` --- ### 四、验证与调试 #### 1. **启用高通专用日志** ```bash adb shell setprop persist.vendor.perf.debug 0xFFFF adb logcat | grep "perf-hal" ``` 关键日志标记: - `PERF-RES-ERR`: 资源错误 - `PERF-LOCK-TIMEOUT`: 锁超时 #### 2. **压力测试命令** ```bash # 模拟资源申请/释放循环 adb shell "for i in {1..1000}; do am start-activity -a android.intent.action.VIEW; input keyevent KEYCODE_BACK; done" ``` --- ### 五、官方补丁方案 若问题在高通公开补丁中修复,需应用以下补丁(示例): ```diff # 从 Code Aurora 获取的补丁片段 diff --git a/service/ResourceQueueSystem.cpp b/service/ResourceQueueSystem.cpp index a1b2c..d3e4f 100644 --- a/service/ResourceQueueSystem.cpp +++ b/service/ResourceQueueSystem.cpp @@ -164,7 +164,7 @@ void ResourceQueueSystem::AddAndApply(int resId) { std::lock_guard<std::mutex> lock(mMutex); - if (!applyOptimization(resId)) { + if (!applyOptimization(resId, true)) { // 增加重试机制 ALOGE("Failed to apply optimization"); } } ``` [^2] > **注意事项**: > - 若刷写固件后问题仍存在,需检查 PMIC 或 DDR 时钟稳定性(使用 `adb shell cat /sys/kernel/debug/clk/clk_summary`) > - 商用设备请联系高通获取 `QTI PerfHAL Hotfix` 补丁包 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值