2017年3月21日 星期二

c data type

資料型態

關鍵字位長範圍printf chars
char1-128..127 (或0..255,與體系結構相關) %c
unsigned char10..255
signed char1-128..127
int2
(Dos或win16)
or
4
(win32或unix)
-32768..32767


 or


-2147483648..2147483647
 %i, %d
unsigned int2
(Dos或win16)
 or
4
(win32或unix)
0..65535


or


0..4294967295
 %u
signed int2
(Dos或win16)
 or
4
(win32或unix)
-32768..32767


or


-2147483648..2147483647
 %i, %d
short int2-32768..32767 %hi
unsigned short20..65535 %hu
signed short2-32768..32767
long int4-2147483648..2147483647 %li, %ld
unsigned long40..4294967295 %lu
signed long4-2147483648..2147483647
long long8-9223372036854775808..9223372036854775807 %lli
unsigned long long80..18446744073709551615 %llu
float43.4x10-38..3.4x10+38 (7 sf) %f, %e, %g
double81.7x10-308..1.7x10+308 (15 sf) %f, %e, %g
long double8 或以上編譯器相關 %Lf, %Le, %Lg

https://msdn.microsoft.com/zh-tw/library/s3f49ktz.aspx

2016年5月30日 星期一

About SysWoW64 Folder

在Windows目錄下一般只有system32目錄,但是如果是64位元的作業系統,Windows目錄下就會多出一個SysWoW64目錄。

一般32位元系統下system32是存放32位元的元件但是到了64位元系統就不一樣了。

Windows\System32 目錄放置所有 64位元的元件。
Windows\SysWOW64 目錄放置所有 32位元的元件。

WOW64其實是 Windows-on-Windows 64bit 的縮寫,主要的目的在於讓64位元的 Windows 可以執行32位元的應用程式。所有舉凡64位元的Windows版本中都有支援,像是 Windows XP x64 Edition、Windows Vista、Windows 7、Windows Server 2003、Windows Server 2008等。

所以以後在64位元系統上如果有32位元程式需要放置或呼叫DLL,就到這裡就對了。

2016年5月5日 星期四

[MFC] Single app execute

檢查應用程式是否已經執行,已執行則將該程序顯示到最前面。

[MFC] Close all popup modal dialog

關閉應用程式的時候需要順便把DoModal dialog一起順便關閉,不然應用程式會等待dialog的Close事件才會結束應用程式。

2016年2月23日 星期二

Visual Studio 2013 "找不到或無法開啟PDB"

  1. "偵錯"→"選項和設定"。
  2. 右邊勾選"啟用來源服務器支援"。
  3. 左邊點"符號"→勾選"微軟符號服務器"。
  4. 執行偵錯的時候會自動下載PDB。

2015年8月30日 星期日

Android - Make signed ota update file

經過修改Release key的步驟及漫長的build流程,我們可以開始製作OTA更新檔。

A. 製作signed-target_files.zip

make_ota_target_file 或 make_ota_package
在out/target/product/fiber-3g/obj/PACKAGING/target_files_intermediates目錄底下生成fiber_3g-target_files-xxx.zip
使用sign_target_files_apks製作signed-target_files.zip
編譯過程會遇到下面的錯誤,原因是由於有些apk程序已經簽過名了或者找不到對應的key,我們僅需將列出來的apk檔加入排除項目即可。
clip_image002
./build/tools/releasetools/sign_target_files_apks \
-d ./build/target/product/security \
-k ./build/target/product/security=./build/target/product/security \
-o \
out/target/product/fiber-3g/obj/PACKAGING/target_files_intermediates/*-target_files-*.zip \
signed-target_files.zip

在android4.4目錄底下生成signed-target_files.zip

B. 製作signed-img.zip

使用img_from_target_files製作signed-img.zip
./build/tools/releasetools/img_from_target_files \
signed-target_files.zip \
signed-img.zip

在android4.4目錄底下生成signed-img.zip

C. 製作完整升級包signed-ota_update.zip

使用ota_from_target_files製作signed-ota_update.zip
./build/tools/releasetools/ota_from_target_files \
-k ./build/target/product/security/releasekey \
signed-target_files.zip \
signed-ota_update.zip

在android4.4目錄底下生成signed-ota_update.zip

D. 製作差異升級包signed-ota-inc.zip

差異升級包,簡稱差分包,它僅使用於兩個版本之間,升級必要的內容而非全部內容,體積小是它最大的優點。要生成差分包,必須提供前一版本的target-file檔,也將是比較文件。
在對應out目錄下out/target/product/xxx/obj/PACKAGING/target_files_intermediates/,生成命名為xxx-target_files-xxx.zip的target-file檔,將其保存起來。
將比較版本的target-file檔拷貝到Android的根目錄下,注意,必須保證Android根目錄下只有一個zip格式的檔。
make_ota_package_inc

在android4.4/out/target/product/xxx目錄底下生成xxx_xxx-ota-xxx-inc.zip
注意:該差分包僅對指定的前一版本固件有效
unsigned-target_files.zip 僅能生成unsigned-ota-inc.zip
signed-target_files.zip僅能生成signed-ota-inc.zip
這邊得留意提供的target_files.zip有無簽章過,否則更新時會驗證失敗。
 

刷機更新系統

A. 透過fastboot tool

輸入指令進入bootloader mode
adb reboot bootloader

輸入指令檢查devices是否已連接
fastboot devices

輸入指令開始更新
fastboot update signed-img.zip

clip_image002[5]
目前Windows上fastboot devices安裝完驅動抓不到機器,不知是什麼原因。

B. 透過Recovery Mode

1. 完整包升級
將signed-ota_update.zip複製到internal storage
adb reboot recovery

選擇apply update from internal storage
再選擇signed-ota_update.zip更新
clip_image004
2. 差分包升級
將fiber_3g-ota-xxx-inc.zip複製到internal storage
adb reboot recovery

選擇apply update from internal storage
再選擇fiber_3g-ota-xxx-inc.zip更新

2015年8月29日 星期六

Setup android release key and Device product name

I. About key

A. 簽名類型

android的標準簽名key有:
testkey
media
platform
shared
以上的四種,可以在源碼的/build/target/product/security/裡面看到對應的金鑰,其中shared.pk8代表私密金鑰,shared.x509.pem公開金鑰,一定是成對出現的。
其中testkey是作為android編譯的時候默認的簽名key,如果系統中的apk的android.mk中沒有設置LOCAL_CERTIFICATE的值,就默認使用testkey。
而如果設置成:
LOCAL_CERTIFICATE := platform
就代表使用platform來簽名,這樣的話這個apk就擁有了和system相同的簽名,因為系統級別的簽名也是使用的platform來簽名,此時使用android:sharedUserId="android.uid.system"才有用!
最後我們需要將testkey置換成releasekey。

B. 製作Release key

subject='/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
mkdir ~/.android-certs
for x in releasekey platform shared media; do \
./development/tools/make_key ~/.android-certs/$x "$subject"; \
done
C ---> Country Name (2 letter code)
ST ---> State or Province Name (full name)
L ---> Locality Name (eg, city)
O ---> Organization Name (eg, company)
OU ---> Organizational Unit Name (eg, section)
CN ---> Common Name (eg, your name or your server’s hostname)
emailAddress ---> Contact email address
另外在使用上面的make_key腳本生成key的過程中會提示輸入password,直接enter,不要密碼!否則build的過程因為多執行緒會build失敗。
將生成的key複製到android4.4/build/target/product/security/ 底下,testkey可以不留。
僅需一個人產生即可,其他人複製同一份security key使用,避免使用不同簽章而在燒錄過程驗證不過。

C. 修改系統默認簽名key

若LOCAL_CERTIFICATE沒有設定的話,系統預設會直接使用testkey為APK簽章。
修改預設使用的testkey為releasekey
android4.4/build/core/config.mk
修正前:
DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/testkey
修正後:
DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/releasekey

android4.4/build/core/makefile
修正前:
ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/testkey)
BUILD_VERSION_TAGS += test-keys
修正後:
ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/releasekey)
BUILD_VERSION_TAGS += release-keys

II.修改Device Product名稱

lichee/brandy/u-boot-2011.09/usb_sunxi/usb_fastboot.h
修正前:
#define SUNXI_FASTBOOT_DEVICE_PRODUCT "Android Fastboot" /*產品資訊*/
修正後:
#define SUNXI_FASTBOOT_DEVICE_PRODUCT "exdroid" /*產品資訊*/

clip_image002
在刷機的時候會去檢查Device Product是否與Update requires相同,若未修改則會遇到上面的狀況而刷機失敗。目前不曉得Update requires的名稱在哪邊可以設定。