rk3368 开机内核启动不了

本文解决RK3368平台Android6.0系统启动时在uboot到kernel阶段卡顿的问题,分析发现是由于电源管理芯片rk818在两阶段的DCDC电压配置不一致导致。通过修改pmic_rk818.c文件中的电压选择逻辑,确保uboot和kernel阶段电压一致,从而解决启动卡顿。

Platform: RK3368

OS: Android 6.0

Kernel: 3.10.0

电源管理芯片用的是配套的rk818,经测量发现板子在上电启动时,u-boot阶段与kernel阶段dcdc电压不一样。从uboot切换到kernel时卡,串口打印只能打印到

Starting kernel ...

就没有打印了,内核没有继续跑下去。

跟踪代码发现uboot中rk818初始化与kernel中的不一样,这会使uboot跳转到kernel后电压出现波动,导致启动内核不能正常启动.改成一样即可解决boot阶段与kernel阶段电压不一样问题。

--- a/drivers/power/pmic/pmic_rk818.c
+++ b/drivers/power/pmic/pmic_rk818.c
@@ -172,10 +172,10 @@ static int rk818_dcdc_select_min_voltage(int min_uV, int max_uV ,int num_regulat
        u16 vsel =0;
        
        if (num_regulator == 0 || num_regulator ==  1){
-               if (min_uV < 700000)
+               if (min_uV < 712500)
                vsel = 0;
                else if (min_uV <= 1500000)
-               vsel = ((min_uV - 700000) / 12500) ;
+               vsel = ((min_uV - 712500) / 12500) ;
                else
                return -EINVAL;
        }

一般卡住问题,就是打印突然中止或者乱码,一般是pmic的 dcdc 电源出现问题。

1卡在Starting kernel ...

2 卡在syr827

3卡在rk818

附近时,一般是dcdc电源配置错误,导致cpu logic ddr vccio等的电压有误差。

### RK3568 Android 开机启动服务配置教程 在RK3568芯片的Android系统中,实现开机启动服务需要结合系统的初始化流程和相关配置文件。以下是关于如何配置开机启动服务的详细说明。 #### 1. 理解Android开机启动机制 Android系统的启动流程分为两个阶段:Linux内核启动和Android框架启动。在Linux内核启动完成后,init进程会读取`/init.rc`或`/system/etc/init/`目录下的初始化脚本,并根据这些脚本来启动相应的服务[^1]。对于特定的应用程序或服务,可以通过修改`init.rc`文件或者使用广播接收器来实现开机启动。 #### 2. 使用广播接收器实现开机启动 Android提供了`BOOT_COMPLETED`广播事件,当系统完成启动后会发送该广播。应用程序可以注册一个广播接收器来监听此事件,并在接收到广播时启动指定的服务。 以下是一个简单的示例代码,展示如何通过广播接收器实现开机启动: ```java // 创建广播接收器类 public class BootReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { // 启动服务 Intent serviceIntent = new Intent(context, MyService.class); context.startService(serviceIntent); } } } ``` #### 3. 配置AndroidManifest.xml 为了确保广播接收器能够正常工作,需要在`AndroidManifest.xml`中进行如下配置: ```xml <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <application> <receiver android:name=".BootReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> <service android:name=".MyService" /> </application> ``` #### 4. 在RK3568平台上预装应用 如果需要在设备出厂时预装某些应用并使其开机启动,可以将APK文件放置在特定目录下,并通过`Android.mk`和`preinstall.mk`文件进行配置[^2]。具体步骤如下: - 将需要预装的APK文件放入`device/rockchip/rk356x/rk3568_r/preinstall_del/`目录。 - 创建`Android.mk`文件,内容如下: ```makefile include $(CLEAR_VARS) LOCAL_MODULE := xxx.apk LOCAL_SRC_FILES := $(LOCAL_MODULE) LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_CERTIFICATE := PRESIGNED include $(BUILD_PREBUILT) ``` - 创建`preinstall.mk`文件,内容如下: ```makefile PRODUCT_COPY_FILES += \ device/rockchip/rk356x/rk3568_r/preinstall_del/xxx.apk:$(TARGET_COPY_OUT_SYSTEM)/priv-app/xxx/xxx.apk ``` #### 5. 修改开机动画(可选) 如果需要自定义开机动画,可以参考相关的文档[^3]。将准备好的图片资源放置在指定目录,并修改`bootanimation.zip`文件以实现动态或静态显示。 --- ### 注意事项 - 确保广播接收器的权限声明正确,否则可能会导致广播无法接收。 - 如果目标设备未启用root权限,可能需要烧录特殊的镜像文件(如`boot-debug.img`)以获得必要的权限[^1]。 - 在实际开发中,建议测试不同的场景以确保服务能够在各种情况下正常启动。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值