2018年2月12日 星期一

[旅遊] 冬季北海道穿搭筆記


剛從北海道回來,冬天一片雪白真的很美也真的很冷
將這次的穿搭心得跟下次能改進的紀錄一下。

我覺得主要的重點就是防水跟防風,
身體一濕,風一吹真的會很冷,
沒防風的話,冷風還是會刺進來。

這次上半身其實都很ok
頭部有毛帽,口罩,
然後脖子戴登山常見的防風圍脖,
然後身體從內到外分別是:
發熱衣,一般襯衫,然後一件防風保暖的大外套,
基本上就是一件外防風內保暖的大衣就好,
或是防風層跟保暖層能用拉鍊連起來的。

不要洋蔥式穿法,
因為北海道雖然外面很冷,
但一進室內包含交通工具上,
都會熱到讓人受不了,
所以能一進去就方便脫掉最好。

然後這次最需要改進的應該是腳部了,
個人是穿牛仔褲搭一件uniqlo的發熱緊身褲,
發現完全不夠,因為不防風,
冷風還是可以穿透進來,
所以下次應該會準備一件防風褲。

鞋子的話也要有防水的最好,
有時候踩到比較深的雪,
融化之後沒防水的話,腳會很冷,
然後搭個羊毛厚襪,就很足夠了。

2018年1月25日 星期四

[工作] quota介紹(轉)

Android 8.0之後enable quota:
https://source.android.com/devices/storage/faster-stats

鳥哥的介紹:
http://linux.vbird.org/linux_basic/0420quota.php

2018年1月10日 星期三

[工作] Pixel(Google手機) 更換factory image的方法

1. 抓image:
https://developers.google.com/android/images

2. 在Settings -> Developer option裡面開啟OEM unlock

3.
解壓縮下載的image,
fastboot flashing unlock,
flash_all.sh

4. 等燒完重開機就ok了

2018年1月8日 星期一

2017年12月21日 星期四

[工作] Android pm取的package name跟path的用法

取得系統中所有的package:
pm list packages

取得package的path
pm path PACKAGE_NAME

ex:
$ pm path com.android.example
$ /system/app/Example/Example.apk

取得所有package with path
pm list packages -f

2017年12月13日 星期三

[工作] Access PMIC from fastboot command (UEFI)

之前有個需求是希望能透過fastboot command來讓device進shipmode.

找了一下之後發現xbl裡面已經有提供進shipmode的function,

所以我們只需要把這個function加進protocol,

讓bootloader能access這個protocol.


xbl的部份:
Include/Protocol/EFIPmicSchg.h
增加新的定義:


+typedef
+EFI_STATUS(EFIAPI *EFI_PMIC_SCHG_ENABLE_SHIP_MODE)
+(
+  IN UINT32                     PmicDeviceIndex
+);

struct _EFI_PMIC_SCHG_PROTOCOL {
...
+EFI_PMIC_SCHG_ENABLE_SHIP_MODE                EnableShipMode;
...
};


Drivers/PmicDxe/PmicSchgProtocol.c
增加新的function:

+EFI_STATUS
+EFIAPI
+EFI_PmicSchgEnableShipMode
+(
+  IN UINT32    PmicDeviceIndex
+)
+{
+  pm_err_flag_type errFlag = PM_ERR_FLAG__SUCCESS;
+
+  errFlag = pm_schg_batif_enable_shipmode(PmicDeviceIndex);
+  if (PM_ERR_FLAG__SUCCESS != errFlag)
+  {
+    return EFI_DEVICE_ERROR;
+  }
+
+  return EFI_SUCCESS;
+}









EFI_QCOM_PMIC_SCHG_PROTOCOL PmicSchgProtocolImplementation =
{
   ...
+EFI_PmicSchgEnableShipMode,
   ...
};


bootloader的部份:
把xbl裡面protocol的header檔copy過來,
Include/Protocol/EFIPmicSchg.h

Library/BootLib/BootLib.inf
加入protocol的guid:
[Protocols]
...
        gPmicSchgProtocolGuid


XXXModulePkg.dec
更改description, 加入protocol的uuid
gPmicSchgProtocolGuid =          { 0xxxxxxxxx } }


使用protocol function的方式:
EFI_STATUS Status = EFI_SUCCESS;
EFI_PMIC_SCHG_PROTOCOL *PmicSchgProtocol = NULL;
Status = gBS->LocateProtocol(&gPmicSchgProtocolGuid, NULL, (VOID **) &PmicSchgProtocol);

PmicSchgProtocol->EnableShipMode(PM_DEVICE_1);









































2017年11月2日 星期四

[工作] addr2line用法

Trace程式crash時滿好用的.

在Android上, 有程式crash時,
通常會產生一串資訊, 重點如下:
10-31 22:50:29.231 F/DEBUG   ( 5121): backtrace:
10-31 22:50:29.231 F/DEBUG   ( 5121):     #00 pc 00000000000ca8c4  /system/lib64/libsurfaceflinger.so (_ZNK4HWC25Layer11isAbandonedEv+56)
10-31 22:50:29.231 F/DEBUG   ( 5121):     #01 pc 00000000000be370  /system/lib64/libsurfaceflinger.so (_ZN7android5Layer11hasHwcLayerEi+372)
10-31 22:50:29.231 F/DEBUG   ( 5121):     #02 pc 00000000000bc33c  /system/lib64/libsurfaceflinger.so (_ZN7android14SurfaceFlinger15setUpHWComposerEv+2312)
10-31 22:50:29.231 F/DEBUG   ( 5121):     #03 pc 00000000000bb03c  /system/lib64/libsurfaceflinger.so (_ZN7android14SurfaceFlinger20handleMessageRefreshEv+108)
10-31 22:50:29.231 F/DEBUG   ( 5121):     #04 pc 00000000000bae3c  /system/lib64/libsurfaceflinger.so (_ZN7android14SurfaceFlinger17onMessageReceivedEi+124)
10-31 22:50:29.231 F/DEBUG   ( 5121):     #05 pc 0000000000015e58  /system/lib64/libutils.so (_ZN7android6Looper9pollInnerEi+336)
10-31 22:50:29.231 F/DEBUG   ( 5121):     #06 pc 0000000000015c54  /system/lib64/libutils.so (_ZN7android6Looper8pollOnceEiPiS1_PPv+60)
10-31 22:50:29.231 F/DEBUG   ( 5121):     #07 pc 000000000008f620  /system/lib64/libsurfaceflinger.so (_ZN7android12MessageQueue11waitMessageEv+92)
10-31 22:50:29.231 F/DEBUG   ( 5121):     #08 pc 00000000000b9990  /system/lib64/libsurfaceflinger.so (_ZN7android14SurfaceFlinger3runEv+20)
10-31 22:50:29.232 F/DEBUG   ( 5121):     #09 pc 0000000000002d08  /system/bin/surfaceflinger (main+960)
10-31 22:50:29.232 F/DEBUG   ( 5121):     #10 pc 000000000001ba78  /system/lib64/libc.so (__libc_init+88)
10-31 22:50:29.232 F/DEBUG   ( 5121):     #11 pc 00000000000028a8  /system/bin/surfaceflinger (do_arm64_start+80)

addr2line就是幫助你從這堆東西裡面,
找出在哪段程式碼出錯的工具.

ex:
./aarch64-linux-android-addr2line -e ~/work/BSP/android/out/target/product/Cell/symbols/system/lib64/libsurfaceflinger.so 00000000000ca8c4


注意, 必須是要在out/target/product/[project]/symbol下面的

他會顯示出錯誤的地方在哪個檔案, 第幾行.