2015年8月29日 星期六

SEL-P1650 Sony E 16-50mm f/3.5-5.6 OSS PZ

機身是 A7, 機身 firmware 是 2.0, 鏡頭我沒看.
PDAF 可以動作, OSS 不支援. 鏡頭不是我的所以沒有圖. 就這樣.

2015年8月16日 星期日

M4/3 to E-mount adapter

這是一個很特異的產品, 也是目前唯一一種 MILC mount convert adapter. (右邊那個, 左邊那個是 EOS to M4/3 轉接環, 裡面有光圈葉片, 後述)

這種轉接環有幾個限制, 1. 鏡尾不能太寬, 就像這張圖裡的接環, 還在它容忍範圍內. 上一張 EOS 那種轉接環就因為鏡尾太寬無法轉接. 2.接上機身, 或接上鏡頭蓋時, M4/3 那端此時無法卸除.

EOS to M4/3 這個接環這次沒辦法測試.

當然 M4/3 轉接 NEX 是為了被轉接或改裝成 M4/3 mount 的手動鏡頭而來, 這種手動鏡頭的成像範圍可以函蓋到 APS-C 或 FF, 這樣轉才有意義. ok, 那這種轉接環被轉接上 FullFrame E-mount (FE) 時會有什麼結果呢? 免 google 了, 你找不到的. 我現在就貼實拍結果.

M42 to M4/3, Helios 44-2 (58mm), f/16. 這個還看不出暗角.

Canon FD to M4/3, Canon 50mm f/1.8 S.C., f/16, 也還看不出暗角:

Nikon G to M4/3, Nikon 16-35mm, 16mm, f/22. 開始出現暗角了.

同一顆 16-35mm, 35mm端 f/22, 暗角開始明顯起來.

Nikon G to M4/3, Tamron 70-300mm f/4-5.6 Di VC USD (A005), 300mm端 f/45 (不是 f/4.5..), 暗角很明顯而清楚.

2015/08/21 新增 65mm 長 M4/3 接寫環, 一樣 Tamron A005 f/45 下的測試:
也就是說:

  1. M4/3 用的轉接環 E-mount 可以全數繼承而且絕大部份情況下使用沒什麼問題. 
  2. 其實 M4/3 這個 mount 成像部份其實可以涵蓋到 fullframe 區域,
  3. 看起來鏡後距 (flanger distance) 越長的會越不利.
有機會我還會再去試幾顆原生 M4/3 mount 手動對焦鏡掛到 FE mount 上用..

2015年7月29日 星期三

[draft] android 5.0.2 porting note

換到 android 5.0.2 後首先碰到的兩件事, 一個是 debug console 不能用 (在 selinux 為 permissive 或 enforcing 時), 一個就是 selinux 所需要的權限控制.

平臺以 freescale i.mx6 來說.

debug console 在一開始 lunch project 時選擇 -eng 如 sabresd_6dq-eng 這時才能打開, 而且前提是 selinux 是 enforcing 設定的前提下打開. 否則選用 -user project 時 debug console 會被關掉. 使用 lunch sabresd_6dq-user 時 debug console 會被關掉, 而且同時也不能關 selinux, 這個問題目前無解.

前面這段一定有人會有疑問, 直接關掉 selinux 就好了幹麻又要 debug console 又要開 selinux? 是的, 就是為了專程來 debug selinux 的設定. 在講 selinux 相關筆記時再來提個東西. selinux 有兩種運作模式, permissive 跟 enforcing, android 可以在 kernel parameter 中設定:
androidboot.selinux=permissive
androidboot.selinux=disabled
androidboot.selinux=enforcing
三選一. disabled 就是關掉, 關掉後我也沒辦法在 android console 下用 setenforce 再打開...

再來講到幾個設定檔, 目前僅知的有

  1. BoardConfig.mk, 為什麼先提這個? 因為 BOARD_SEPOLICY_DIRS 要在這裡定義, 這個變數定義著您自訂的 sepolicy 要放在哪裡. 一般來說已經 porting 好的 BSP 裡面都還會再有一大票自定義 selinux 條文, 會整理在一個地方, 為了保留原始設定方便改壞掉時還可以回去參考, 建議 copy 出來一份擺到別的地方, 再指過去. 
  2. *.te, te 檔裡定義幾個東西 
    1. 型別, 從 external/sepolicy 裡原本已經定義的幾個型別裡再繼承出來, 不過我用到的只有 sysfs 跟 proc, 其它還沒用過. 如: 
      • type sysfs_led, fs_type, sysfs_type;
    2. 權限. allow 跟 neverallow (絕不放行, 權限在 allow 之上, 編譯時要特別注意錯誤訊息裡有沒有這東西) 哪些類別的 app (init, init_shell, system_app, untrusted_app 等) 可以存取到什麼樣的權限 (read, write, search, ....). 如:
      • allow untrusted_app sysfs_led:file rw_file_perms;
  3. file_contexts, genfs_contexts 以及一些 contexts 相關的, 這個網路上文章很多也抄來抄去, 很好找所以其它沒講的就不提了. file_contexts 是宣告路徑為哪一個型別所有, 這裡沒有定義的, selinux 通常都是封鎖存取權限. 舉個例子: 
    • /sys/devices/soc\.0/gpio-leds\.66/leds/green/brightness u:object_r:sysfs_led:s0
  4. 定義型別 (sysfs_led) 就是前面講的 .te 檔案裡所述, sysfs_led, untrusted_app 這些都是在 .te 檔裡宣告. 

除了這些以外, debug console 下的 ps -Z 與 ls -Z 的 selinux 型別列表, 是非常重要的 debug 工具 (所以前面一直提 selinux 必需要開著 debug console 也要開著, 否則使用 -Z 什麼都不會顯示).

這裡講 file_contexts, file_contexts 有它自己的特殊語法, 我目前找不到它專用特殊語法的任何說明, 就僅知 "." 一定要用 "\." 替代,  否則後續的檔案定義會大亂. 句號是它的保留字,  "+" "[" "]" "^" "?" 這些也都是它的保留字, 但作用我不知道. 引一個例子來說:
/sys/devices/soc.0/gpio-leds.66/leds/green/brightness u:object_r:sysfs_led:s0
你要在 file_contexts 裡寫成:
/sys/devices/soc\.0/gpio-leds\.66/leds/green/brightness u:object_r:sysfs_led:s0
這個樣子, selinux 才可以認的到.
selinux 我不知道怎麼查已經被設定在 sepolicy 裡的規則檔案路徑怎麼敘述, 只知道一件事, file_contexts 設定如果沒有設定正確, 用 ls -Z 會看到
/sys/devices/soc.0/gpio-leds.66/leds/green/brightness 被設定成 u:object_r:sysfs:s0
如果設定正確, 以上 sysfs 字樣會是我們要設定的 sysfs_led

這裡如果沒有設定成功, .te 檔裡 allow 全部的東西也是不能存取, 所以很重要.

如果是一個目錄下所有的東西, 就會是這樣寫:
/sys/devices/soc\.0/gpio-leds\.66/leds/green/(/.*)? u:object_r:sysfs_led:s0
用 ls -Z 就可以看的到底下所有檔案全被設定成 sysfs_gpio.
至於為什麼要有那個句號, 為什麼 "?" 寫後面, 我不知道, 我也沒找到過任何說明, 知道的人可以補充的話我感激不盡.

還有, file_contexts 裡的東西只對實體檔案有效, 對重導向過後的連結不會有作用, 例如 /sys/class/gpio/gpioxx 這種有重導向過的東西就要貼實際路徑, 不能貼連結.

genfs_context 中因為是設定 /proc 下的檔案, 語法跟 file_contexts 有點不同, 例如:
genfscon proc /cpuinfo u:object_r:proc_cpuinfo:s0

  • /cpuinfo 是指 /proc/cpuinfo, 是省略性寫法, 要注意避過.
  • cpuinfo 是 folder, 不是 file, 被指定的 folder 那底下的所有檔案都會被套成 proc_cpuinfo.
file_contexts 可以直接改寫 out/target/ .... /root/file_contexts 這個檔後, 以 cpio 方式打包成 RAMdisk image 透過 u-boot 以 tftp boot 方式載入執行, 可以改到爽後再寫回到 BSP code 裡的設定, 其它的東西我是直接刷掉 system.img 檔案來觀察更改後的結果.

先到這裡, 這篇只是純筆記, 更接近實作的筆記可以參考這篇:
http://blog.csdn.net/yelangjueqi/article/details/46761987
google 寫的說明頁只負責交代定義, 很重要, 但看完背完就可以扔了.

150730: 找到一篇 file_contexts 的語法說明, 雖然還是有些保留字如 '^' 與 '+' 的作用沒說明, 不過已經足夠應付大部份應用. file_contexts 它跟標準 unix/linux 檔名保留語法有很多不同, 看了就知道. 有人需要我再試圖翻這種東西
http://selinuxsymposium.org/2007/slides/03-fcglob.pdf

2015年6月21日 星期日

sigma 8-16mm 送修

原始的故障情況很簡單, 變焦環轉到 10.5mm 以下後 (例如轉到 8mm) 機身只能讀的到焦長為 10.5mm, 但實際看到拍到的卻是 8mm 焦段. 這東西我不知道怎麼拆, 而且還在保內 (其實只剩 12 天到期) 就寄回恆伸. 寄去還沒過完一個禮拜....

早上醒來踢到一箱瓦斯

包裝內含有瓦斯一筒

瓦斯筒近照

我絕對不會說我是來灌水的zzz

2015年6月18日 星期四

[draft] [ubuntu] failsafe.conf

僅知 ubuntu 12 & 14 有這東西
/etc/init/failsafe.conf
被啟動的條件目前不清楚, 只知道這鳥蛋東西可以造成開機時 20+40+60 = 120 秒完全不工作的延時. 找到後把裡面 sleep 全 remark 成註解掉....

2015年6月9日 星期二

[android] orcale JDK

雖然 google 講說編 AOSP 可以用 openJDK, 可是我沒一次編出來東西能用的, 從 android 2.3.4, 2.3.7, 4.0.4, 4.2.2, 4.4.2, 4.4.3, 5.0.2 這些都是. 根據
http://blog.markloiseau.com/2012/07/how-to-compile-android-on-ubuntu-12-04/
的說法, 他也是因為無法成功編譯才換的. 以下環境為 ubuntu 12.04 與 14.04

  1. 首先先去 orcale 下載 JDK 包.
  2. 解壓縮到 /usr/lib/
  3. 假設您的 JDK 是 jdk1.7_79 就 ln-s /use/lib/jdk 1.7_79 /user/lib/jvm 這樣日後要切換 jdk 版本也迅速方便. (ps. ubuntu 預設就是用 /usr/lib/jvm, 所以記得千萬不要跟 openJDK 一起裝)
  4. 執行這些東西設定預設路徑:

update-alternatives --install /usr/bin/java java /usr/lib/jvm/bin/java 1;
update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/bin/javac 1;
update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/bin/javaws 1;
update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/bin/jar 1;
update-alternatives --install /usr/bin/javadoc javadoc /usr/lib/jvm/bin/javadoc 1;
update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/bin/javah 1;
update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/bin/javap 1

update-alternatives --config java;
update-alternatives --config javac;
update-alternatives --config javaws;
update-alternatives --config jar;
update-alternatives --config javadoc;
update-alternatives --config javah;
update-alternatives --config javap;

這樣就可以.
可以用 java -version 確認版本.
至於這篇之所以現在才貼, 是因為最後兩個 (javah, javap) 在 android 4.4 裡有用到, 才注意到還欠這兩個東西. 5.0.2 就沒欠了, 之後的我不保證...

後記. android 5.0.2 AOSP 中會檢查是不是使用 openjdk, 要在這裡拿掉:
build/core/main.mk
(約 186 行處)
# Check for the current jdk
ifeq ($(requires_openjdk), true)
# The user asked for java7 openjdk, so check that the host
# java version is really openjdk
- ifeq ($(shell echo '$(java_version_str)' | grep -i openjdk),)
+ ifeq ($(shell echo '$(java_version_str)'),)
$(info ************************************************************)
$(info You asked for an OpenJDK 7 build but your version is)
$(info $(java_version_str).)
$(info ************************************************************)
$(error stop)

移除檢查後才能順利用 orcale JDK 去編. 至於 AOSP 為什麼一定要指定使用 openJDK 我就不知道了, google 是間很愛幹壞事的公司, 我也不想知道為什麼要這麼做....

2015年6月6日 星期六

[雜記] Tamron A007

這顆鏡頭因為既是常用焦段, 有夠大的光圈和目前唯一有防手振功能 24-70mm f/2.8 這些因素加總起來, 這顆一直是我非常常用的旅遊鏡, 雖然它成像很軟, 但它的方便性目前沒有可以取代它的東西. 當然啦, 東西用久了總是會有些問題..

其實我不知道本來就很少在用的對焦環為什麼可以脫落成這樣.... 變焦環倒是好好的一點事都沒有

後來進化到可以從前端直接掉出來.... 我就死馬當活馬醫的亂搞它.

就這樣給它箍了一個月 (因為我也忘了有這件事..) 後來拿出來試用, 對焦環橡皮圈有縮回去, 頗神奇. 但用沒多久就開始鬆垮. 於是我開始想些惡搞的手段開始惡搞它 -> 用膠帶黏. 既然要用膠帶, 第一個想到的是 sunpower 的鐵人膠帶, 但問過好幾間店都沒有 carbon 的款式, 只有很醜的純黑色, 那個純黑色就跟上面那張布膠帶幾乎完全一樣, 但布膠帶這樣一綑 45 台幣...

老實講我對這顆鏡頭的成像表現十分不滿, 惡搞它只是剛好而已. 就給它對焦環黏起來....

用起來還蠻順手的... 因為有膠帶綑綁著, 對焦橡膠環也不會再鬆開掉落 (目前是這樣啦..). 既然這樣, 我就很開心的把機身上任何看的到廠牌 / 型號的地方給它全貼起來....
我不能說 D600 相對於 D90 對我而言是降級, 我也對 D600 有點不滿
能撐多久好不好用, 就再觀察看看.... 最少這膠帶比鐵人膠帶便宜很多很多

ps. 布膠帶是錯誤的手法, 要可靠還是要用鐵人膠帶
http://yoko-hama.blogspot.tw/2015/12/tamron-a007-part2.html