在Application.mk裡可以指定APP_BUILD_SCRIPT
來指定你要的Android.mk
可是在mydroid 跟ndk裡的Android.mk
發現在LOCAL_SHARED_LIBRARIES的用法不太一樣
所以要分開來使用
也就是在mydroid build時要一個Android.mk 而用ndk build時則要另一個
但我在Application.mk中設定APP_BUILD_SCRIPT時
發現取別的名字的話 總是會有LOCAL_MAKEFILE not defined 的error msg
最後看了一下他build 的script
local-makefile = $(lastword $(filter %Android.mk,$(MAKEFILE_LIST))
在這用了makefile的 % character
所以只要把APP_BUILD_SCRIPT設定成 Android.mk結尾的就好了
例如NdkAndroid.mk
Tuesday, December 8, 2009
Saturday, November 28, 2009
android ndk 1.6
這星期用了ndk 1.6
首先要改這個script
http://groups.google.com/group/android-ndk/browse_thread/thread/2127fa52b6aa362c?pli=1
比較特別的是
在Application.mk裡
APP_PROJECT_PATH可以指到別的地方 不一定要在ndk/app底下
另外
LOCAL_SHARED_LIBS
跟LOCAL_LDLIBS的usage還不是很清楚
在mydroid裡LOCAL_SHARED_LIBS可以動
但ndk裡LOCAL_LDLIBS才可以
首先要改這個script
http://groups.google.com/group/android-ndk/browse_thread/thread/2127fa52b6aa362c?pli=1
比較特別的是
在Application.mk裡
APP_PROJECT_PATH可以指到別的地方 不一定要在ndk/app底下
另外
LOCAL_SHARED_LIBS
跟LOCAL_LDLIBS的usage還不是很清楚
在mydroid裡LOCAL_SHARED_LIBS可以動
但ndk裡LOCAL_LDLIBS才可以
Wednesday, November 4, 2009
Monday, November 2, 2009
LOCAL_SDK_VERSION
在Android.mk裡
發現了一個
LOCAL_SDK_VERSION
這是在ApiDemos裡的Android.mk看到的
如果加了
LOCAL_SDK_VERSION := current
就會讓你用sdk的android.jar來編
也就是一些hide的api就不能用了
發現了一個
LOCAL_SDK_VERSION
這是在ApiDemos裡的Android.mk看到的
如果加了
LOCAL_SDK_VERSION := current
就會讓你用sdk的android.jar來編
也就是一些hide的api就不能用了
Wednesday, October 28, 2009
mydroid 找不到sdcard
今天發現我從mydroid build出來的emulator一直mount 不到sdcard
最後發現 我的 /etc/沒有 vold.conf這檔案
然後就把 mydroid/development/data/etc/vold.conf copy 到
out/target/product/generic/system/etc下
然後make systemimage
我可以mount到sdcard了!!!
~
~
~
最後發現 我的 /etc/沒有 vold.conf這檔案
然後就把 mydroid/development/data/etc/vold.conf copy 到
out/target/product/generic/system/etc下
然後make systemimage
我可以mount到sdcard了!!!
~
~
~
Tuesday, September 15, 2009
在Android emulator 上改userdata system 的image max size
之前被問到userdata image要如何改大小
花了很多時間才找到XD
首先從Android build system講起
在mydroid/build/core/definitions.mk裡
有個
define assert-max-file-size的 function
原本以為只要指定
BOARD_FLASH_BLOCK_SIZE 跟BOARD_USERDATAIMAGE_MAX_SIZE
就可以了
但發現他這只是作個檢查的動作而已
不過他這有講到 /proc/mtd的東西
然後看了其他的code
也都是去讀 /proc/mtd 來作partition
dev: size erasesize name
mtd0: 04000000 00020000 "system"
mtd1: 04000000 00020000 "userdata"
mtd2: 04000000 00020000 "cache
然後去checkout android linux kernel的code
下載完首先要switch 到有goldfish的branch
不然預設是msm 裡面沒有goldfish的driver 編kernel也會有error
會跳到linux kernel裡面看的原因是有的embedded linux
會把mtd 的size name 等的information寫在 /drivers/mtd/map下
一個叫mtd_parition的struct裡
在drivers/mtd/devices/goldfish_nand.c下 有看到設定size的code
但他也是從memory中讀值出來而已
static int goldfish_nand_init_device(struct goldfish_nand *nand, int id)
看mtd->size
但是其他的地方都找不到設定size的地方
後來又跳到emulator的source裡看(mydroid/external/qemu)
首先發現了qemu可以讓你指定nand
"-nand name[,readonly][,size=size][,pagesize=size][,extrasize=size][,erasepages=pages][,initfile=file][,file=file]"
然後發現
android在emulator的options裡有加讓你設定nand size的option
-partition-size system/data partition size in MBs
所以 結論就是
在emulator後面加上 -partition-size 就可以設定system userdata image的大小了
# cat /proc/mtd
dev: size erasesize name
mtd0: 07c20000 00020000 "system"
mtd1: 07c20000 00020000 "userdata"
mtd2: 04000000 00020000 "cache"
花了很多時間才找到XD
首先從Android build system講起
在mydroid/build/core/definitions.mk裡
有個
define assert-max-file-size的 function
原本以為只要指定
BOARD_FLASH_BLOCK_SIZE 跟BOARD_USERDATAIMAGE_MAX_SIZE
就可以了
但發現他這只是作個檢查的動作而已
不過他這有講到 /proc/mtd的東西
然後看了其他的code
也都是去讀 /proc/mtd 來作partition
dev: size erasesize name
mtd0: 04000000 00020000 "system"
mtd1: 04000000 00020000 "userdata"
mtd2: 04000000 00020000 "cache
然後去checkout android linux kernel的code
下載完首先要switch 到有goldfish的branch
不然預設是msm 裡面沒有goldfish的driver 編kernel也會有error
會跳到linux kernel裡面看的原因是有的embedded linux
會把mtd 的size name 等的information寫在 /drivers/mtd/map下
一個叫mtd_parition的struct裡
在drivers/mtd/devices/goldfish_nand.c下 有看到設定size的code
但他也是從memory中讀值出來而已
static int goldfish_nand_init_device(struct goldfish_nand *nand, int id)
看mtd->size
但是其他的地方都找不到設定size的地方
後來又跳到emulator的source裡看(mydroid/external/qemu)
首先發現了qemu可以讓你指定nand
"-nand name[,readonly][,size=size][,pagesize=size][,extrasize=size][,erasepages=pages][,initfile=file][,file=file]"
然後發現
android在emulator的options裡有加讓你設定nand size的option
-partition-size
所以 結論就是
在emulator後面加上 -partition-size 就可以設定system userdata image的大小了
# cat /proc/mtd
dev: size erasesize name
mtd0: 07c20000 00020000 "system"
mtd1: 07c20000 00020000 "userdata"
mtd2: 04000000 00020000 "cache"
Thursday, September 3, 2009
Gold linker
Linker Part1
http://www.airs.com/blog/archives/38
妙的是 levine有留comment喔
可惜lan回 : I don’t actually have a copy to hand....
Linker Part2
http://www.airs.com/blog/archives/39
有點講歷史的感覺
Linker Part3
http://www.airs.com/blog/archives/40
Linker Part4
http://www.airs.com/blog/archives/41
講到了Procedure Linkage Table, Global Offset Table
ELF spec也有講到這東西
PLT:
GOT:
The program linker will create the dynamic relocations which the dynamic linker will use to initialize the GOT at runtime. Unlike the PLT, the dynamic linker always fully initializes the GOT when the program start
GOT會被存在%ebx裡
Linker Part5
http://www.airs.com/blog/archives/42
有介紹到 ELF symbol visibility
不過..... 在ELF spec 跟System V ABI都沒看到這個
原來 這是在System V ABI的update裡
http://www.sco.com/developers/gabi/2000-07-17/contents.html
Linker Part6
http://www.airs.com/blog/archives/43
講Relocation
in general a relocation has a type, a symbol, an offset into the contents, and an addend.
然後講linker怎麼把他轉成executable
Linker Part7
http://www.airs.com/blog/archives/44
Thread Local Storage
comment裡有提到幾個resource
http://dlc.sun.com/pdf/817-1984/817-1984.pdf
http://people.redhat.com/drepper/tls.pdf
http://www.lsd.ic.unicamp.br/~oliva/writeups/TLS/RFC-TLSDESC-x86.txt
Linker Part8
http://www.airs.com/blog/archives/45
ELF Segments
Linker Part9
http://www.airs.com/blog/archives/46
Symbol Versions
Linker Part10
http://www.airs.com/blog/archives/47
Parellel Linking
Linker Part11
http://www.airs.com/blog/archives/48
Archives
Linker Part12
http://www.airs.com/blog/archives/49
Symbol Resolution
Linker Part13
http://www.airs.com/blog/archives/50
Symbol Version Redux
Linker Part14
http://www.airs.com/blog/archives/51
Linking Time Optimization
Linker Part15
http://www.airs.com/blog/archives/52
COMDAT sections
Linker Part16
http://www.airs.com/blog/archives/53
C++ template instantiation
Linker Part17
http://www.airs.com/blog/archives/54
Warning Symbols
Linker Part18
http://www.airs.com/blog/archives/55
Incremental Linking
Linker Part19
http://www.airs.com/blog/archives/56
__start and __stop symbols
Linker Part20
http://www.airs.com/blog/archives/57
Gold linker update
http://www.airs.com/blog/archives/38
妙的是 levine有留comment喔
可惜lan回 : I don’t actually have a copy to hand....
Linker Part2
http://www.airs.com/blog/archives/39
有點講歷史的感覺
Linker Part3
http://www.airs.com/blog/archives/40
Linker Part4
http://www.airs.com/blog/archives/41
講到了Procedure Linkage Table, Global Offset Table
ELF spec也有講到這東西
PLT:
GOT:
The program linker will create the dynamic relocations which the dynamic linker will use to initialize the GOT at runtime. Unlike the PLT, the dynamic linker always fully initializes the GOT when the program start
GOT會被存在%ebx裡
Linker Part5
http://www.airs.com/blog/archives/42
有介紹到 ELF symbol visibility
不過..... 在ELF spec 跟System V ABI都沒看到這個
原來 這是在System V ABI的update裡
http://www.sco.com/developers/gabi/2000-07-17/contents.html
Linker Part6
http://www.airs.com/blog/archives/43
講Relocation
in general a relocation has a type, a symbol, an offset into the contents, and an addend.
然後講linker怎麼把他轉成executable
Linker Part7
http://www.airs.com/blog/archives/44
Thread Local Storage
comment裡有提到幾個resource
http://dlc.sun.com/pdf/817-1984/817-1984.pdf
http://people.redhat.com/drepper/tls.pdf
http://www.lsd.ic.unicamp.br/~oliva/writeups/TLS/RFC-TLSDESC-x86.txt
Linker Part8
http://www.airs.com/blog/archives/45
ELF Segments
Linker Part9
http://www.airs.com/blog/archives/46
Symbol Versions
Linker Part10
http://www.airs.com/blog/archives/47
Parellel Linking
Linker Part11
http://www.airs.com/blog/archives/48
Archives
Linker Part12
http://www.airs.com/blog/archives/49
Symbol Resolution
Linker Part13
http://www.airs.com/blog/archives/50
Symbol Version Redux
Linker Part14
http://www.airs.com/blog/archives/51
Linking Time Optimization
Linker Part15
http://www.airs.com/blog/archives/52
COMDAT sections
Linker Part16
http://www.airs.com/blog/archives/53
C++ template instantiation
Linker Part17
http://www.airs.com/blog/archives/54
Warning Symbols
Linker Part18
http://www.airs.com/blog/archives/55
Incremental Linking
Linker Part19
http://www.airs.com/blog/archives/56
__start and __stop symbols
Linker Part20
http://www.airs.com/blog/archives/57
Gold linker update
Tuesday, August 25, 2009
把Android裡的key 轉成 keystore
update 2011.01.18
之前的link已經不見了 所以重新update一下
http://en.wikipedia.org/wiki/PKCS
java的keystore(jks)算是pkcs12的部分
但由於jks是sun的proprietary的format
所以openssl沒法處理jks 要先把他轉成pkcs12再用keytool來轉
首先要先把 private key (pkcs8) 從DER format轉成PEM format
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
然後要把private key 跟public key 轉成pkcs12
openssl pkcs12 -export -in platform.x509.pem -inkey platform.pem -out platform.pkcs12
最後用keytool把他轉成jks
keytool -importkeystore -srckeystore platform.pkcs12 -srcstoretype pkcs12 -srcstorepass android -destkeystore platform.jks -deststoretype jks -deststorepass PASSWORD
之前的link已經不見了 所以重新update一下
http://en.wikipedia.org/wiki/PKCS
java的keystore(jks)算是pkcs12的部分
但由於jks是sun的proprietary的format
所以openssl沒法處理jks 要先把他轉成pkcs12再用keytool來轉
首先要先把 private key (pkcs8) 從DER format轉成PEM format
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
然後要把private key 跟public key 轉成pkcs12
openssl pkcs12 -export -in platform.x509.pem -inkey platform.pem -out platform.pkcs12
最後用keytool把他轉成jks
keytool -importkeystore -srckeystore platform.pkcs12 -srcstoretype pkcs12 -srcstorepass android -destkeystore platform.jks -deststoretype jks -deststorepass PASSWORD
注意的是 產生的alias是1 還不知道怎麼改alias就是了.......
keytool -list -keystore platform.jks -storetype jks -storepass PASSWORD
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
1, Jan 18, 2011, PrivateKeyEntry,
Certificate fingerprint (MD5): 8D:DB:34:2F:2D:A5:40:84:02:D7:56:8A:F2:1E:29:F9
在build.properties 加上
key.store=platform.jks
key.alias=1
最後 ant release 再打上PASSWORD就好了
2011.06.13
===== java keystore to certificate + private =========
keytool -export -alias 1 -keystore platform.jks -file exported-der.crt
openssl x509 -in exported-der.crt -inform der > platform.x509.pem
就變回原來的x509 certificate
至於private key
目前查到的結果都是keytool沒辦法export private key
都要另外下載個ExportedPriv.java來作export的動作
Reference :
http://conshell.net/wiki/index.php/OpenSSL_to_Keytool_Conversion_tips
http://conshell.net/wiki/index.php/Keytool_to_OpenSSL_Conversion_tips
http://www.herongyang.com/crypto/Key_Formats_PKCS8_PKCS12_4.html
Monday, August 17, 2009
java的byte to int
今天下午在作一些byte operation時
有field是開頭用2byte來指定這個data的size
例如說 c000這是little endian的
所以實際是 00co
然後要拿這length來作事情時
b[0] | b[1] <<> char是unsigned了吧
不過很麻煩 用時還要把他轉int
最後發現可以用 b[0] & 0xff 這樣
主要是 0xff 他是一個int , 0x000000ff
所以b[0]也會被promoted為int 雖然int也是signed
但跟0x000000ff AND後sign bit 就不見了
不過也有看到比較雜的code
((b0 & 0x80) == 0x80 ? (b0 & 0x7F) + 0x80 : b0);
這也能把byte轉成unsigned的
原理是一樣的
但似乎多作了很多事..........
真的要買hack's delight來看了
有field是開頭用2byte來指定這個data的size
例如說 c000這是little endian的
所以實際是 00co
然後要拿這length來作事情時
b[0] | b[1] <<> char是unsigned了吧
不過很麻煩 用時還要把他轉int
最後發現可以用 b[0] & 0xff 這樣
主要是 0xff 他是一個int , 0x000000ff
所以b[0]也會被promoted為int 雖然int也是signed
但跟0x000000ff AND後sign bit 就不見了
不過也有看到比較雜的code
((b0 & 0x80) == 0x80 ? (b0 & 0x7F) + 0x80 : b0);
這也能把byte轉成unsigned的
原理是一樣的
但似乎多作了很多事..........
真的要買hack's delight來看了
coscup 2009的收穫
最大的收穫大概來自於星期天下午的
Smaller and Faster Android: Optimization and Toolchain Perspective
因為只有半小時 他講超快的 還用英文
裡面有講到
Interprocedural optimization -> 用 arm-eabi-gcc --fripa
還有
FDO -> Feekback Directed Optimization
Build-Run-Build
Class Loading Profiler -> trade off between boot-up time and app init time
ICF -> Identical Comdat Folding 不過他說Comdat 應該要說是Code 才是 還有講到一個IPO的term 不知道是什麼的縮寫就是了
Profiled Guided Optimization -> 跟FDO有關?
並講到了google 目前正在開發的gold linker
http://en.wikipedia.org/wiki/Gold_(linker)
http://www.airs.com/blog/archives/38
另外之後的walkingice有講到目前bionic的linker沒有處理weak symbol
還有gcc的版本 arm-eabi-gcc
目前Android用的是4.2.1
donuts會用4.3.1 而之後的E'clair會用4.4.1
分別是在 size improvement 上
4.2.1 -> 3%
4.3.1 -> 15%
4.4.1 -> 17%
而這三者的performance是差不多的
在libstdc++-v3方面 好像還不是很完整
要用就要把他static link ???
arm-eabi-gcc 會用一個option -mandroid
不過還不是很完整 所以還沒merge back to gcc
之後講了一些用到的compiler option
-fvisibility=hidden
__attribute__((visibility("public"))
-ffunction-session, -Wl,--gc-sessions
-finline-sessions, -fno-inline-functions-called-once
Smaller and Faster Android: Optimization and Toolchain Perspective
因為只有半小時 他講超快的 還用英文
裡面有講到
Interprocedural optimization -> 用 arm-eabi-gcc --fripa
還有
FDO -> Feekback Directed Optimization
Build-Run-Build
Class Loading Profiler -> trade off between boot-up time and app init time
ICF -> Identical Comdat Folding 不過他說Comdat 應該要說是Code 才是 還有講到一個IPO的term 不知道是什麼的縮寫就是了
Profiled Guided Optimization -> 跟FDO有關?
並講到了google 目前正在開發的gold linker
http://en.wikipedia.org/wiki/Gold_(linker)
http://www.airs.com/blog/archives/38
另外之後的walkingice有講到目前bionic的linker沒有處理weak symbol
還有gcc的版本 arm-eabi-gcc
目前Android用的是4.2.1
donuts會用4.3.1 而之後的E'clair會用4.4.1
分別是在 size improvement 上
4.2.1 -> 3%
4.3.1 -> 15%
4.4.1 -> 17%
而這三者的performance是差不多的
在libstdc++-v3方面 好像還不是很完整
要用就要把他static link ???
arm-eabi-gcc 會用一個option -mandroid
不過還不是很完整 所以還沒merge back to gcc
之後講了一些用到的compiler option
-fvisibility=hidden
__attribute__((visibility("public"))
-ffunction-session, -Wl,--gc-sessions
-finline-sessions, -fno-inline-functions-called-once
Thursday, August 13, 2009
generate PDK docs on Android
之前在 mydroid/development/pdk/docs 有些document (HTML)
例如說介紹Android Build system ,
如何在Android裡作不同的device setting
或者是 porting Android kernel and driver
可是最近都變成給DroidDoc吃的 jd檔
然後我make 或者是make docs都沒產生這些文件
最後發現在mydroid/development/pdk 裡有個README
按照他的說明就可以產生這些文件的HTML檔了
或者是用懶人速成法
$mydroid> make -j pdk pdk_all
^^^^^^^^^^^^^^ 兩個缺一不可
例如說介紹Android Build system ,
如何在Android裡作不同的device setting
或者是 porting Android kernel and driver
可是最近都變成給DroidDoc吃的 jd檔
然後我make 或者是make docs都沒產生這些文件
最後發現在mydroid/development/pdk 裡有個README
按照他的說明就可以產生這些文件的HTML檔了
或者是用懶人速成法
$mydroid> make -j pdk pdk_all
^^^^^^^^^^^^^^ 兩個缺一不可
Sunday, August 2, 2009
用家裡電腦編Android
昨天買了cpu mainboard and DDR3
今天來測試一下
AMD Phenom II x4 955
DDR3 1333 4G
real 21m36.468s
user 53m51.970s
sys 4m19.640s
明天來試公司的intel 4核的
不過那好像ddr2...
公司的
real 21m18.609s
user 63m43.910s
sys 4m29.210s
DDR2 800
CPU Core2 Quad Q9400 2.66G
不確定為啥家裡的 real跟公司的是差不多的
今天來測試一下
AMD Phenom II x4 955
DDR3 1333 4G
real 21m36.468s
user 53m51.970s
sys 4m19.640s
明天來試公司的intel 4核的
不過那好像ddr2...
公司的
real 21m18.609s
user 63m43.910s
sys 4m29.210s
DDR2 800
CPU Core2 Quad Q9400 2.66G
不確定為啥家裡的 real跟公司的是差不多的
Thursday, July 23, 2009
A2DP in ubuntu
http://fosswire.com/post/2008/1/a2dp-stereo-linux/
不過amarok好像找不到地方把audio direct 到bluetooth
不過amarok好像找不到地方把audio direct 到bluetooth
Thursday, July 16, 2009
Android查看memory usage
在adb shell裡有幾種方法可以看memory
1. android shell裡的top
PID CPU% S #THR VSS RSS UID Name
VSS -Virtual memory 的size
RSS -就是指physical 的page
不過在android上這兩項不一定是實際的數值
第一是這裡拿到的值是process可以用的memory space
而不是實際上已經使用的memory
第二是在android上很多processes之間有share
所以phy pages是可以被share的
2. 用busybox的top
不過...............那出來的值好像都怪怪的
3.用procrank
# procrank
PID Vss Rss Pss Uss cmdline
Uss是這個process exclusive 的memory
Pss 不是很清楚
不過好像是Uss 加上 RSS/ (用這塊shared memory的process數目)
procrank的source在 mydroid/extras/procrank
主要是利用 kernel 在2.6.25後一個新的功能
在/proc/pid/裡新加一個 pagemap
http://lwn.net/Articles/230975/
4. 如果要看java heap的使用量的話
dumpsys meminfo
** MEMINFO in pid 608 [com.android.phone] **
native dalvik other total
size: 4112 3655 N/A 7767
allocated: 3829 2821 N/A 6650
free: 266 834 N/A 1100
(Pss): 2087 1785 2877 6749
(shared dirty): 1124 3952 928 6004
(priv dirty): 1968 1380 556 3904
Objects
Views: 0 ViewRoots: 0
AppContexts: 5 Activities: 0
Assets: 3 AssetManagers: 3
Local Binders: 18 Proxy Binders: 14
Death Recipients: 1
OpenSSL Sockets: 0
SQL
heap: 142 dbFiles: 0
numPagers: 2 inactivePageKB: 24
activePageKB: 0
dumpsys的source在/mydroid/frameworks/base/cmds/dumpsys
1. android shell裡的top
PID CPU% S #THR VSS RSS UID Name
VSS -Virtual memory 的size
RSS -就是指physical 的page
不過在android上這兩項不一定是實際的數值
第一是這裡拿到的值是process可以用的memory space
而不是實際上已經使用的memory
第二是在android上很多processes之間有share
所以phy pages是可以被share的
2. 用busybox的top
不過...............那出來的值好像都怪怪的
3.用procrank
# procrank
PID Vss Rss Pss Uss cmdline
Uss是這個process exclusive 的memory
Pss 不是很清楚
不過好像是Uss 加上 RSS/ (用這塊shared memory的process數目)
procrank的source在 mydroid/extras/procrank
主要是利用 kernel 在2.6.25後一個新的功能
在/proc/pid/裡新加一個 pagemap
http://lwn.net/Articles/230975/
4. 如果要看java heap的使用量的話
dumpsys meminfo
** MEMINFO in pid 608 [com.android.phone] **
native dalvik other total
size: 4112 3655 N/A 7767
allocated: 3829 2821 N/A 6650
free: 266 834 N/A 1100
(Pss): 2087 1785 2877 6749
(shared dirty): 1124 3952 928 6004
(priv dirty): 1968 1380 556 3904
Objects
Views: 0 ViewRoots: 0
AppContexts: 5 Activities: 0
Assets: 3 AssetManagers: 3
Local Binders: 18 Proxy Binders: 14
Death Recipients: 1
OpenSSL Sockets: 0
SQL
heap: 142 dbFiles: 0
numPagers: 2 inactivePageKB: 24
activePageKB: 0
dumpsys的source在/mydroid/frameworks/base/cmds/dumpsys
Friday, June 12, 2009
用vi來改binary file
最近試著用vi來改binary
加 -b
$> vi -b BINARY_FILE
打開binary後
:%!xxd
就會看到byte 跟ascii
像ultraedit看到的那樣
不過沒像ultraedit方便 左邊到哪 右邊就到哪
改完後
:%!xxd -r
然後就存檔啦
一開始不加-b的話 vi最後會幫你加上eol 所以會多一個byte
少這一步就蝦忙很久了.....
加 -b
$> vi -b BINARY_FILE
打開binary後
:%!xxd
就會看到byte 跟ascii
像ultraedit看到的那樣
不過沒像ultraedit方便 左邊到哪 右邊就到哪
改完後
:%!xxd -r
然後就存檔啦
一開始不加-b的話 vi最後會幫你加上eol 所以會多一個byte
少這一步就蝦忙很久了.....
Tuesday, June 9, 2009
Chromium上也有zygote了
繼Android後
chromium上也放zygote了
http://src.chromium.org/viewvc/chrome?view=rev&revision=17909
不過還沒研究兩者的差別就是了
chromium上也放zygote了
http://src.chromium.org/viewvc/chrome?view=rev&revision=17909
不過還沒研究兩者的差別就是了
Saturday, June 6, 2009
V8 javascript engine
http://code.google.com/events/io/sessions/V8BuildingHighPerfJavascriptEngine.html
在V8 Memory Model 那頁
他用了tagged pointers
因為object都是4 byte aligned 的 所以bit 0 1都沒有東西
所以這兩個bit就會被設為01 來代表這是個pointer
而如果是一般的integer時 bit 0會被設為0
只有31bit來代表 signed integer
所以integer 就是 2^30 - 1 ~ -2^30
不過這ok嗎????
然後Elements Pointer是在幹嘛的?
-----------------------------------
接下來在Hidden class的介紹
Properties的pointer 指到一個buffer 這buffer是多大呢???
然後在p2 construct的時候
使用hidden class的design decision? 90%的數據是怎麼來的
會不會這時class 0 1已經被GC掉了? 如果被GC重新construct的話 最後p2還會指到class 2嗎
還是會指到class 3 但class 3跟class 2的content 是一樣的
在video最後面有人問到說如果p2 是先constuct y再x的話 p2 跟p1會是一樣的嗎?
答案是不一樣的 雖然他們的內容是一樣 只是順序不同
他們還是兩個不同的class
-----------------------------------
接下來在Monomorphic load inline cache
好像是intel syntax?
一開始 compare 這是個pointer or integer
然後比這class的pointer
如果都一樣的話就load properties 來達到fast property access的功能
不過megamorphic好像沒講到太多
------------------------------------
接下來講GC
generational
但又分三種
另外與其他JavaScriptCore or Java的GC有什麼不同呢
每個人的GC都說是棒呆了
----------------------------------
RE
Webkit跟V8在String 上的 implementation哪不一樣造成JSCRE 的performance不好
The implementation of automaton to recognize RE
在V8 Memory Model 那頁
他用了tagged pointers
因為object都是4 byte aligned 的 所以bit 0 1都沒有東西
所以這兩個bit就會被設為01 來代表這是個pointer
而如果是一般的integer時 bit 0會被設為0
只有31bit來代表 signed integer
所以integer 就是 2^30 - 1 ~ -2^30
不過這ok嗎????
然後Elements Pointer是在幹嘛的?
-----------------------------------
接下來在Hidden class的介紹
Properties的pointer 指到一個buffer 這buffer是多大呢???
然後在p2 construct的時候
使用hidden class的design decision? 90%的數據是怎麼來的
會不會這時class 0 1已經被GC掉了? 如果被GC重新construct的話 最後p2還會指到class 2嗎
還是會指到class 3 但class 3跟class 2的content 是一樣的
在video最後面有人問到說如果p2 是先constuct y再x的話 p2 跟p1會是一樣的嗎?
答案是不一樣的 雖然他們的內容是一樣 只是順序不同
他們還是兩個不同的class
-----------------------------------
接下來在Monomorphic load inline cache
好像是intel syntax?
一開始 compare 這是個pointer or integer
然後比這class的pointer
如果都一樣的話就load properties 來達到fast property access的功能
不過megamorphic好像沒講到太多
------------------------------------
接下來講GC
generational
但又分三種
- Scanenge
- Full non-compact GC
- Full compact GC
另外與其他JavaScriptCore or Java的GC有什麼不同呢
每個人的GC都說是棒呆了
----------------------------------
RE
Webkit跟V8在String 上的 implementation哪不一樣造成JSCRE 的performance不好
The implementation of automaton to recognize RE
Subscribe to:
Posts (Atom)