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= //320走600dpi
//160走720dpi
修改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:寫入的值