1. 程式人生 > >baimingyong007的專欄

baimingyong007的專欄

RK3288

程式碼編譯

uboot編譯  

make rk3288_defconfig

make

          編譯完成後,u-boot根目錄生成RK3288UbootLoader_V2.19.09.bin的loader檔案。

Kernel編譯

          在kernel目錄下執行:

          makerockchip_defconfig

          makerk3288-tb_8846.img

          編譯完成後,kernel根目錄生成kernel.img和resource.img兩個映象檔案。

Android編譯(專案根目錄下)

          先通過執行. ./bulid/envsetup.sh配置編譯環境,再通過lunch命令選擇編譯模式

          make–j24

          編譯完成後,執行./mkimage.sh在rockdev/Image-rk3288目錄下生成韌體。

開啟重力感應

device/rockchip/rk3288/BoardConfig.mk

BOARD_SENSOR_MPU := false

新版SDK不讀U盤

註釋system/vold/Android.mk下的兩個開關

ifeq ($(strip$(TARGET_BOARD_PLATFORM_PRODUCT)), box)

瀏覽器相關

Packages/apps/Browser/res/values/Strings.xml的homepage_base

新增預置標籤

packages/apps/Browser/res/values/strings.xml的bookmarks的陣列新增

packages/apps/Browser/res/values/bookmarks_icons.xml新增

packages/apps/Browser/raw/下新增2張圖片,一個網頁的預覽和logo小圖示

修改預設語言

修改以下三個檔案中的語言項:修改1、2時將需要修改的預設語言放在第一個,修改3時,將“PRODUCT_LOCALES”項改成需要設定的預設語言即可。編譯Android模組,燒錄system.img檔案

1、build/target/product/languages_full.mk

2、build/target/product/languages_small.mk

3、build/target/product/full_base.mk

修改預設時區

修改devices/rockchip/rk3288/system.prop檔案中的“persist.sys.timezone=Europe/London”“Europe/London”來自packages/apps/Settings/res/xml/Timezones.xml

修改預設時間制式

修改佈局檔案

          找到frameworks/base/packages/SettingsProvider/res/values/defaults.xml新增

          <stringname=”time_12_24”translatable=”false”>24</string>

修改Java檔案

          找到

frameworks/base/packages/SettingsProvider/src/com/android/provider/Settings/Databasehelper.java

在loadSystemSettings()函式新增

loadStringSetting(stmt,Settings.System.TIME_12_24,R.string.time_12_24);

修改Build Number

RK方案

找到build/core/makefile修改BUILD_DISPLAY_ID=BOZZ

S500方案

找到device/action/gbs_wxgd/device.mk修改ro.build.display.id=BOZZ

修改藍芽名稱

修改device/rockchip/rk3288/bluetooth/bdroid_buildcfg.h中的” BTM_DEF_LOCAL_NAME”.

刪除預設APP

找到device/rockchip/rk3288/device.mk檔案最後,找到gms_xx.mk檔案路徑

通過gms_xx.mk檔案路徑找到該檔案,把不需要的APP註釋掉即可。註釋掉的app需放在後面。

新增編譯條件

在device/rockchip/rk3288/system.prop檔案中新增判斷條件

修改開機動畫

程式碼:bootAnimation.cpp

函式:bool BootAnimation::android()

圖片:frameworks/base/core/res/assets/images/

修改開機LOGO

在kernel/drives/video/logo下

          通過bmptoppm pic.bmp > pic.ppm      //生成ppm檔案

          通過ppmquant 224 pic.ppm > pic224.ppm   //轉換成224

          通過pnmnoraw pic224.ppm > log_linux_pic.ppm

將log_linux_clut224.c和log_linux_clut224.o檔案刪除

將log_linux_pic.ppm重新命名為log_linux_clut224.ppm

再將kernel/arch/arm/configs/rockchip_defconfig中的CONFIG_LOGO和CONFIG_LOGO_LINUX_CLUT224開啟

在kernel目錄下make clean將中間檔案刪除,重新編譯kernel。

修改桌布圖片

frameworks/base/core/res/res/drawable-sw720dp-nodpi

去除桌面漸變黑邊

Launcher3/.../Launcher.java

          SETWorkspaceBackground => setWorkspaceBackground

註釋boolean isMultiMode = (0 !=Settings.System.getInt(getContentResolver(), "multi_window_config",0));

                     //mLauncherView.setBackground(workspace&&!isMultiMode ?mWorkspaceBackgroundDrawable : null);

    }

修改預設輸入法

frameworks/base/services/core/java/com/android/server/InputMethodManagerService.java

resetDefaultImeLocked()函式修改

/*if(InputMethodUtils.isValidSystemDefaultIme(

      mSystemReady, imi, context)) {

      defIm = imi;

      Slog.i(TAG, "Selected default: " + imi.getId());

   }*/

if(imi.getId().equals("com.sohu.inputmethod.sogou/.SogouIME")) {

      defIm = imi;

      Slog.i(TAG, "Selected default: " + imi.getId());

    }

frameworks/base/core/java/com/android/internal/inputmethod/InputMethodUtils.java

getMostApplicableDefaultIME()函式修改

/*if(InputMethodUtils.isSystemImeThatHasEnglishKeyboardSubtype(imi)

&& !imi.isAuxiliaryIme()) {

                return imi;

       }

       if (firstFoundSystemIme < 0 &&InputMethodUtils.isSystemIme(imi)

&& !imi.isAuxiliaryIme()) {

               firstFoundSystemIme = i;

       }*/

          if(imi.getId().equals("com.sohu.inputmethod.sogou/.SogouIME")){

                          returnimi;

          }

修改recovery顯示方向:

bootable資料夾下recovery, screen相關檔案

開啟/device/rockchip/common/BoardConfig.mk下的BOARD_HAS_FLIPPED_SCREEN

需要make clean

修改桌面佈局

/packages/apps/Launcher3/res/xml/default_workspace_5x6.xml

/packages/apps/Launcher3/src/com/android/launcher3/DynamicGrid.java

隱藏全屏提示

frameworks/base/policy/src/com/android/internal/policy/impl/ImmersiveModeConfirmation.java

public class ImmersiveModeConfirmation {

        public void handleMessage(Message msg) {

           switch(msg.what) {

                                   caseSHOW:

-                           handleShow();

+                    // handleShow();

                                   break;                

                                   caseHIDE:                    

                                           handleHide();

                                   break;                

                                   casePANIC:

-                          handlePanic();

+                    // handlePanic();

                    break;            

                                   }        

          }

LVDS屏關機時白屏解決

Kernel/arch/arm/kernel/Process.c


永不鎖屏永不休眠

1、   Settings/res/xml/display_settings.xml——————————————————刪除休眠選項

註釋"screen_timeout"

2、   Settings/.../DisplaySettings.java新增if條件,如果沒有找到這個preference就不執行相關操作;

   mScreenTimeoutPreference= (ListPreference) findPreference(KEY_SCREEN_TIMEOUT);

if (mScreenTimeoutPreference !=null ) {

....

}

3、   devices/rockchip/rk3288/system.prop——————————————————永不休眠

ro.rk.screenoff_time=2147483647

4、   frameworks/base/packages/SettingsProvider/res/values/defaults.xml——————禁止鎖屏

<bool name="def_lockscreen_disabled">false</bool>改為 true;即預設禁止鎖屏

實現徹底關機

在kernel/arch/arm/kernel/process.c的void machine_power_off(void)函式中新增

          act8846_device_shutdown();

修改kernel/driver/regulator/act8846.c的act8846_device_shutdown(void)函式

          voidact8846_device_shutdown(void)

{

  struct act8846 *act8846 = g_act8846;

  int ret = -1;

  printk("%s\n",__func__);

#if 0

  if (act8846->pmic_hold_gpio) {

                   gpio_direction_output(act8846->pmic_hold_gpio,0);

                   mdelay(100);

                   arm_pm_restart('h',"charge");

  }

#else

  ret = act8846_reg_read(act8846,0xc3);

  ret = act8846_set_bits(act8846,0xc3,(0x1<<3),(0x1<<3));

  ret = act8846_set_bits(act8846,0xc3,(0x1<<4),(0x1<<4));

  if (ret < 0) {

           printk("act8846 set 0xc3error!\n");

           return ;

  }

#endif

}


刪除電池相關

—————————————————刪除百分比———————————­——————

a、SystemUI/.../statusbar/policy/BatteryController.java

mBatteryPercentageView.setVisibility(View.GONE);———————右上角百分比

b、SystemUI/.../statusbar/phone/StatusBarHeaderView.java

mBatteryLevel.setVisibility(View.GONE);————————————下拉百分比

c、SystemUI/.../statusbar/phone/KeyguardStatusBarView.java

mBatteryLevel.setVisibility =(View.GONE);———————————鎖屏百分比

—————————————————刪除圖示——————————————————

d、SystemUI/.../res/layout/system_icon.xml

註釋battery

e、SystemUI/.../statusbar/phone/StatusBarHeaderView.java——————下拉圖示

註釋((BatteryMeterView)findViewById(R.id.battery)).setBatteryController(batteryController);

f、SystemUI/.../statusbar/phone/PhoneStatusBar.java—————————右上角圖示

註釋((BatteryMeterView) mStatusBarView.findViewById(R.id.battery))

註釋dispatchDemoCommandToView(command, args, R.id.battery);

h、SystemUI/.../statusbar/phone/KeyguardStatusBarView.java—————鎖屏介面圖示

註釋((BatteryMeterView)findViewById(R.id.battery)).setBatteryController(batteryController);

i、statusbar/phone/PhoneStatusBarTransitions.java———————解除電池圖示相關屬性設定

註釋mBattery相關的內容

修改“關於裝置”內容

/packages/apps/Settings/res/values/strings.xml————修改“關於裝置”—>“狀態”上層顯示

<stringname="device_status_summary" product="tablet">

/packages/apps/Settings/res/xml/device_info_status.xml—修改點選“關於裝置”—>“狀態”項

packages/apps/Settings/src/com/android/settings/deviceinfo/Status.java

註釋相關的內容

修改“設定”頁面佈局

Settings/res/xml/dashboard_categories.xml——————————刪除對應佈局即可

有時還需要去除AndroidManifest.xml中對應的佈局

修改截圖設定

Settings/.../ScreenshotSetting.java——————————————設定預設時間

Stringsummary_delay=mDelay.getSharedPreferences().getString("screenshot_delay", "15");

Settings/res/values/arrays.xml———————————————設定截圖延時陣列

搜尋“<!-- screenshot setting-->”

去除“設定”HDMI選項

Settings/.../SettingsActivity.java———————————————修改以下內容

boolean isTablet= true;

“無線和網路”—>“更多”

res/xml/wireless_settings.xml

新增充電電池圖示

在PhoneStatusBarPolicy.java中新增屬性private static final StringSLOT_BATTERY = "battery";

在onReceive()函式中新增

else if(action.equals(BatteryManager.EXTRA_STATUS)) {

                updateBattery();

}

在PhoneStatusBarPolicy()函式中新增

filter.addAction(BatteryManager.EXTRA_STATUS);

updateBattery();

新增方法

private final void updateBattery() {

mService.setIcon(SLOT_BATTERY,com.android.internal.R.drawable.stat_sys_battery_charge, 0,mContext.getString(R.string.accessibility_no_battery));

mService.setIconVisibility(SLOT_BATTERY,true);

}

隱藏Recent按鈕

在NavigationBarView.java的setDisabledFlags

getRecentsButton().setVisibility(View.INVISIBLE);

下拉快捷選單

frameworks/base/packages/SystemUI/res/values/config.xml檔案quick_settings_tiles_default_bt

隱藏NOSIM圖示

SystemUI/.../statusbar/SignalClusterView.java————————————隱藏NoSIM圖示

mNoSims.setVisibility(/*mNoSimsVisible ? View.VISIBLE :*/View.GONE);

修改滑鼠右鍵功能

/framework/native/services/inputflinger/InputReader.cpp檔案

if (mBtnRight) {

      //$_rochchips_$_modify_by_huangjc make sure mouse BtnRight for product

       /*char *mIsBox = new char[PROPERTY_VALUE_MAX];

       property_get("ro.target.product", mIsBox, "tablet");

       if(strcmp(mIsBox, "tablet")==0)

        result |= AMOTION_EVENT_BUTTON_SECONDARY;

       else*/

        result |= AMOTION_EVENT_BUTTON_BACK;

    }

修改預設桌面佈局

device/rockchip/rk3288/system.prop:45:ro.sf.lcd_density= //320600dpi

                                                                                                      //160720dpi

修改ADC按鍵

kernel/drivers/input/keyboard/Rk_keys.c

kernel/arch/arm/boot/dts/include/dt-bindings/input/input.h

修改Camera預覽解析度

hardware/rockchip/camera/CameraHal/CameraIspAdapter.cpp的initDefaultParameters函式

修改相機錄影解析度

packages/apps/Camera2/src/com/android/camera/settings/SettingsUtil.java 

static SelectedVideoQualitiesgetSelectedVideoQualities(int cameraId)

        selectedQualities.large =sVideoQualities[largeIndex];

        selectedQualities.medium =sVideoQualities[mediumIndex];

        selectedQualities.small =sVideoQualities[smallIndex];

修改Camera前後置和旋轉角度

hardware/rockchip/camera/CameraHal/CameraHal_Module.cpp的camera_get_camera_info函式    

info->facing=CAMERA_FACING_FRONT;

info->orientation=90;

幾個相關的system.prop

device/rockchip/rk3288/system.prop

device/rockchip/rk3288/rk3288_box/system.prop

device/rockchip/common/system.prop

解決開機logo屏閃

kernel/driver/video/rockchip/lcdc/rk3288lcdc.c檔案static int rk3288_lcdc_parse_dt(struct lcdc_device *lcdc_dev)修改以下內容

          if(of_property_read_u32(np, "rockchip,bcsh-en", &val))

          dev_drv->bcsh.enable= true;

else

          dev_drv->bcsh.enable= (val ? true : false);

if(of_property_read_u32(np, "rockchip,brightness", &val))

          dev_drv->bcsh.brightness= 0x0080;

else

          dev_drv->bcsh.brightness= val;

if(of_property_read_u32(np, "rockchip,contrast", &val))

          dev_drv->bcsh.contrast= 0x01ff;

else

dev_drv->bcsh.contrast = val;

新增TP喚醒

修改TP驅動

新增extern volatile u32 flag_shutdown;

在中斷函式中新增wakeup指定

eg:

          input_event(wdt->input_mt,EV_KEY, KEY_WAKEUP, 1);

          input_event(wdt->input_mt,EV_KEY, KEY_WAKEUP, 0);

          input_sync(wdt->input_mt);

          在建立驅動裝置中指定

                  eg:

                          input_set_capability(input,EV_KEY, KEY_POWER);

                          input_set_capability(input,EV_KEY, KEY_WAKEUP);

                          device_init_wakeup(dev,1);        

/kernel/drivers/video/rockchip/lcdc/rk3288_lcdc.c

externvolatile u32 flag_shutdown;

rk3288_lcdc_early_resume()函式裡面置1

rk3288_lcdc_early_suspend()函式裡面置0

EDP屏點不亮的解決方法

修改drivers/video/rockchip/rk32_dp.c中的prope函式

          //edp->video_info.link_rate  = LINK_RATE_1_62GBPS;

        edp->video_info.link_rate    = LINK_RATE_2_70GBPS;

        //edp->video_info.lane_count       = LANE_CNT4;

        edp->video_info.lane_count         = LANE_CNT2;

刪除電話相關APK

將以下資料夾中的Android.mk備份為Android.bak_mk即可,編譯時注意clean

packages/apps/Contacts和tests            //聯絡人

packages/providers/ContactsProvider和tests //聯絡人儲存

packages/apps/ContactsCommon 和tests               //聯絡人儲存

packages/services/Telecomm和tests            //電話

補丁相關

單個檔案

diff –uN  from-file  to-file  >to-file.patch

patch –p0 < to-file.patch

patch –RE –p0 < to-file.patch

多個檔案

diff –uNr  from-docu  to-docu  >to-docu.patch

patch –p1 < to-docu.patch

patch –R –p1


ADB命令

升級軟體流程

先切換adb使用者為root,將apk檔案放在adb_push目錄下,切換工作目錄為adb_push,然後將資料夾改為可讀可寫(adb shell mount –o remount,rwFilesPath/FilesName),通過adb push命令將apk檔案寫入資料夾(adb push *.apk /FilesPath/FilesName),然後通過(adb shell sync)命令同步一下,再將裝置重啟。

大韌體製作流程

在修改完最終版的軟體後,重新編譯所修改的模組,生成最新img檔案,將升級所需的img檔案和其他檔案放在工具資料夾的“rockdev”資料夾下的“Image”和“backupimage”資料夾下,然後執行“mkupdate.bat”批處理檔案,等待生成完成,最後將生成的最新img檔案更改為軟體所對應專案的名字,放在“Image”和“backupimage”資料夾。

SystemUI在frameworks/base/packages/SystemUI

更新某個模組,只需在更新的目錄下通過“mm”指令單獨編譯模組,生成*.apk檔案,然後將apk檔案push到system/priv-app目錄

修改IO口命令

io –option address value

option:顯示位數

address:GPIO地址

value:寫入的值