2016年11月4日 星期五

1st step for snappy


1st step for snappy
以下是在下用有限的時間了解的淺見,有錯 .... 就算了~
snappy 是Canonical 最近全力發展的一個新品牌,其整個 ecosystem 包含了 snap, snapd, all snaps 因為一些都還在發展之中,這些名字都有可能再變 (之前 snappy 1.0 到 snappy 2.0 就發生過),也因為是新的品牌,常常 google 在找的時後會找到一些沒關係的東酉或是舊的設計架構 (snappy 1.0)
所以,最好每次都比較一下 snapd 版本或是文章的時間 (可能一星期就不太一樣)
整個品牌個人感覺是包含了兩大部份:
universal snap
由snap, snapd, snapcraft 組成,目地是要取代現行的 deb, rpm 等各家不同的 package format ,而用統一 format 可以裝在所有 linux base distribution 上。
如何作到?
snap
  • 新的 package format,為 squashfs image,裡面包了差不多所有執行程式時需的東西 ex. share libs
  • 執行程式時透過 snapd 準備一個臨時 rootfs ,並將需要的 folders bind mount 進去,最後 chroot 進去執行。
  • 以此達成 confinement 及 decouple dependency
  • 還是有一些 interface 可以讓 snap 之間分享資源
  • 但 size 會增加, 其目標 device 為單一或少功能的 IoT ,所以預期空間足夠使用。
  • non-official hardware requirement
snapcraft
  • 一個打包 snap 的工具,執行時可以 parse yaml file 抓取需要的 source code 及 build dependency 然後在獨立的 chroot 環境中編譯。
  • snapcraft.io
snapd
  • 一個 daemon 提供所有執行 snap 所需的環境,也就是說只要有 snapd 的地方都可以執行 snap.
  • 已經發行 snapd 到眾家 distribution 的 store 中,剩下的也將慢慢完成 (連 openwrt 也在計畫當中)
all-snap
由 system-boot, writable partitions, kernel snap, core snap (也叫 os snap), 及支持的 bootloader (u-boot or grub) 組成, 目的是一開機就進入精簡過的 core snap ubuntu rootfs, 然後所有的package 都以 snap 的形式存在,適用於IoT deivce.
如何作到?
kernel snap
OS snap
  • 精簡過ubuntu rootfs, 有點像 ubuntu phone 上面的 ubuntu tarball.
bootloader
  • 透過環境變snap_try_kernel, snappy_core, snappy_kernel, snap_mode 等環境變數來決定要 load 那個 kernel snap 及 os snap,以達到開機失敗就載舊 image 的功能。
  • 目前有 u-boot 及 grub ,在 android 上因為 bootload 常不opensource ,所以可能會以 android recovery 來達成類似的效果。

2016年9月29日 星期四

synaptics touchpad xorg driver issue

最近看了一個 synaptics touchpad 的 issue ,就是 single touch scrolling failed in right edge,but works in bottom edge.

xorg 在開機的時後,會將所有的 driver load 進來,可以在/var/log/Xorg.0.log 看到,而 /usr/share/X11/xorg.conf.d 下面則放著針對各個 driver 的設定檔 (也可以不放就是 default), 像這次遇到的就是 50-synaptics.conf

然後從 xinput 及 移除 psmouse kernel module 的方式可以知道它的 touch pad 是走 I2C,也就是說 kernel driver 把 x, y 丟上來, xorg driver 去判斷是 edge 還是 function button 之類的。

所以再看 xorg 的 user space Synaptics driver :
 * https://cgit.freedesktop.org/xorg/driver/xf86-input-synaptics/
 * https://launchpad.net/ubuntu/+source/xserver-xorg-input-synaptics/1.8.3-1ubuntu1

透過 code 及觀查 evtest 吐出來的 x, y 可以看到兩個問題 (evtest 在 driver 之上, Xorg 之下):
 1. right edge 沒有 x 坐標丟出來
  - 這應該要看 kernel driver.
 2. user space Synaptics driver 根据的 VID:PID [0002:0007] 是 psmouse 的ID,但最後抓到的是 [06cb:78f6] 看起來像是 Synaptics i2c 的 ID.
  - driver根拒這個決定 edge width,UNKNOWN ID 短於 Synaptics ,再加上 第 1. 點,所以touch 點永遠不被判定為 edge

所以解 1 or 2 就可以解掉這個問題,或者直接在 50-synaptics.conf 上面固定 edge width 當 workaround.

另外,同事有建議試用 xinput 取代Synaptics user space driver, 有空再試吧~

reference :
 * https://wiki.archlinux.org/index.php/Touchpad_Synaptics
 * https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-input-synaptics/+bug/1627674

2016年9月23日 星期五

[Ubuntu Snappy 2] tips for tracing and debugging (keep updating)

因為 snappy 不是用 apt 套件管理所以無法簡單的安裝 debian package ,這樣 debug 有點麻煩,然後其實 OS snap 就是 Ubuntu rootfs 也就是一堆 debian package 的集合,那我想知道其中幾個 package version 怎麼辨? 在 beta channel 中有一個 classic snap package,它透過 chroot 的方式再加上 apt package 讓使用者可以使用 apt commands。

class package 是將 writable partition 中的 OS snap copy 一份到
/var/snap/classic/common/classic 中,然後 bind mount host 一些 partition 進去後,chroot 進去,在裡面 就可以用 dpkg -l 取得所以 OS snap 中的 package 資訊:
https://pastebin.ubuntu.com/23220997/

[Ubuntu Snappy 2] - trace the booting process

最近新的 Ubuntu Core 16 Image release 了,這是就我知道的第一版 base on Snappy 2.x 的 Ubuntu core image (Snappy 2.x 是利用 snapd 管理套件, Snappy 1.x 沒研究), 詳情可見這封 mail :
https://lists.snapcraft.io/archives/snapcraft/2016-September/001166.html

小弟花了一點時間看一下他的 boot process 在此作一下記錄以免大腦記憶体不足被 garbage collection 清掉。

Ubuntu core image divides the storage to 2 partition: "writable" and "system-boot" 給 KVM 和給 raspberry pi 3 的 image 其 boot partition label 看起來不同,反正就是一個 boot ,一個 system.

boot partition:
  • /boot/grub/grubenv decides the kernel and core snap which will be loop mounted by grub.
  • /boot/grub/grub.cfg loop mount kernel snap to specify the position of kernel and initramfs image.

在writable partition 中的 kernel snap 中取得 kernel 及 initramfs ,在 initramfs 中 再 mount OS snap:

mount "${writable_mnt}/system-data/var/lib/snapd/snaps/${snap_core}" "$rootmnt"

這裡我覺得可以在開發時將 OS snap 轉成 ext4 image,然後 mount 成 rw ,這樣比較方便,只是 size 會從 75mb 擴增到 242mb。

然後其 initramfs 應該是來自於這裡:
最後就是進到 systemd 再把 snapd 叫起來。

2016年9月18日 星期日

Ubuntu Phone - install Ubuntu on Meizu Pro5 Android edition

最近看到 #phone-phone mailing list[1] 上面有人分享如何將 Meizu Pro5 Android Edition 刷成 Ubuntu Edition,因為手上沒有以 Android 版本出貨的 Meizu Pro5 所以無法實測其方法,但看來是可行的。

因為 Ubuntu Phone Edition 基本上是買不到了,就一定會有人想嘗試從 Android Edition 刷過去,此篇想用小弟的經驗嘗試分析在刷機的前後可能會遇到的問題,供想刷機的人作參考。

任何自行刷機的行為需自行負擔其風險,本人不保証任何保固上面的問題。

以下列出目前有出貨的手機:

  • BQ Krillin
    • 太舊了,不想討論
  • Meizu MX4 (Arale)
    • MTK solution
    • 刷 Factory images 需要用到MTK提供的 flash-tool
      • 本人經驗,不同的 SoC 對應的 flash-tool 版本可能不同,我之前用的是 v5.1452.00.100
  • BQ M10 (frieza)
    • MTK solution
      • 刷 Factory images 需要用到MTK提供的 flash-tool
        • 本人經驗,不同的 SoC 對應的 flash-tool 版本可能不同,我之前用的是 v5.1520.00.100
  • Meizu Pro5 (Turbo)
    • 2Samsung solution
      • 直接用 fastboot 刷 factory image 即可
factory images 就是每個 partition image file, 然後用工具刷進去,就可以出廠了。以上只有 Pro5 可以用 fastboot 直接刷每一個 partition,最方便而且他是最新的一支 Ubuntu phone 所以拿它來刷還滿合理。

上面的 Krillin, Arale and Turbo 是 device name,也就是在 image server 上面的 device 對應,ubuntu-device-flash 的 --device 要輸入的也就是它們。


目前來說,每支 Ubuntu Edition 的 partition size 都跟 Android Edition 不同,因為 Ubuntu 需要的 system partition(2.5G) 及 cache partition (700MB) 比較大。 為何? 因為在 recovery 中作 update 時,要拿 cache partition 來作 buffer。 那問題就來了~ 原本 Pro5 的 cache partition 只有 500mb,有點危險。 system partition Android Edition, AFAIK 原本就給 2.5G,所以沒有問題。

Cache partition 太小會怎樣? 你在 OTA 的時後, tarballs 會被放在 cache partition,然後 recovery mode 的時後拿來 update (請見 ubuntu-phone-recovery),cache 太小就無法 OTA ,聰明的看官應該已經想到應對的方式了..... 對,手動 update 可以解決這個問題,一樣請見 ubuntu-phone-recovery

BTW.... bootloader 就在 device tarball 裡面呀? 那是不是可以直接刷 bootloader 就好? 嗯.... 刷 bootloader 一不小心就變磚了,而且我也不知道 pro5 Android edition 的 bootloader partition 可不可以刷,所以... 科科

再來就是要把 partitions 一個一個刷進去,可以用 [1] 的方法,也可以用小弟的 repack-factory image tool [2] ,直接從 OTA server 上把 images 拉下來打包成 factory images ,然後用 fastboot 刷進去。

以上再次申明,因小弟沒有 Android Edition,所以只在 Ubuntu Edition 上測試過,如果有勇者嘗試了,再請分享結果吧 :)

[1] https://lists.launchpad.net/ubuntu-phone/msg22248.html
[2] https://github.com/alex-tu-cc/ubuntu_phone_tools

2016年7月10日 星期日

Ubuntu Phone - recovery

想要 hack 手機最快速的方式應該是從 recovery 下手,目前 Ubuntu phone 都有在官網上 release adb shell enabled 的 recovery image [1],可以用 fastboot 輕易燒入。

進入 recovery 後,可以借由 ubuntu-device-flash update 的動作了解其如何將 image 更新進去,了解之後要修改 image 內容就容易多了。

本文將簡介其運作,如想深入了解請自行 adb shell 進去 recovery 研究看看。

目前 phablet 6.x common tree 已將部份 recovery 需要的修改收錄進去,從 diff 可以看到有一個 system-image-upgrader 負責 OTA update 的動作,大致上整個 process 為:

 * u-d-f 將 ubuntu tarball, device tarball, custom tarball 從 system-image.ubuntu.com 上拉下來放到 device 裡 /cache/recovery 中並建立 ubuntu_command 檔。
 * system-image-upgrader 讀取 ubuntu_command 裡命令將 tarball 解開並將 放到 /system partition 裡。

如此一來,也可以在其他的 Android phone 上運用相同的方式,將 ubuntu tarball, custom tarball 塞進 /system 或是學 Nexus 4 將 system partition 用 loop mount 的方式放到 ubuntu.img。

接下來就只要煩腦 device tarball 就好了。 device tarball 裡包括了 kernel 及 Android 所需的各 partition 的 image 及一個減肥過的 android 放在 /var/lib/lxc/android/system.img (refer to [2])

Android code tree 的 Ubuntu phone patch 可以在 phablet 6.x common tree [3] 找到,另外 phablet_6.0.0_r1 是一個 fake device 用來假裝一個 Android 6.x device,這樣其他 Android 6.x device code tree 如果其 Merge base 是 AOSP 6.0.0_r1 就可以直接 merge 它取得 Ubuntu 為 Android 6.x 所作的修改。

這樣一來應該就可以 build 出 system.img 了,但是不是可以開機,還要看其廠商給的 Android code tree (BSP AOSP code tree) 是不是改了原本 AOSP 的 HAL,甚致有可能需要改到 hybris[4] 來迎合廠商的修改。

好像寫超過 recovery 的範圍了,反正 recovery 就只用來 OTA update,基本上只要recovery 的動作正常,就算其他 partition 都是空的,也可以透過 recovery 將其全都填上需要的內容。

另外官方的 ubuntu-device-flash 目前只支持三個 tarball 同时更新,但在開發階段可能只需要更新 custom tarball 或是 device tarball,覺得每次都要刷三個 tarball 有點浪費時間的話,可以手動修改 ubuntu_command 或是使用 這個小 tool [5] 去 update 單一個 tarball.

題外話:
如果想要刷回 Android edition ,通常先刷 Android 的 recovery ,再用其 recovery update 就可以了,但要小心的部份是 Android 的更新包中有時後會有 bootloader或preloader 的更新,最好把它拿掉,因為會導致 Ubuntu repartition 的設定不見。 說白了,就是把 system 及 boot partition 換掉,就可以回到 Android 了 (其他 partition 都共用)。

[1] https://wiki.ubuntu.com/Touch/Devices
[2] https://developer.ubuntu.com/en/phone/devices/porting-new-device/
[3] https://code-review.phablet.ubuntu.com/#/admin/projects/aosp/platform/manifest
[4] https://launchpad.net/~libhybris-maintainers/libhybris/+git/libhybris
[5] https://github.com/alex-tu-cc/ubuntu_phone_tools/blob/master/update_tarball.sh

Other refs:
https://wiki.ubuntu.com/Touch/MaintainingCodePhablet

2016年6月14日 星期二

Ubuntu Phone - porting - emulator

其實對 emulator 之前沒什麼研究,依official wiki 中步驟[1]抓來的 android code tree 是phablet-4.4.2_r1 [2],看來 wiki 中的 "Building from scratch" 就是抓 phablet 4.4.2_r1 來 build emulator。
如果是直接裝 ubuntu-emulator 其 dependency ubuntu-emulator-runtime.deb 就會把prebuild 的 emulator 放在下面
/usr/share/android/emulator/out/host/linux-x86/bin/emulator-x86
/usr/share/android/emulator/out/host/linux-x86/bin/emulator-arm
然後執行 "ubuntu-emulator run" 時 [2] 時再去執行相對位置的 emulator-*.

如此看來如果要把 Ubuntu emulator 升級當作一個 reference device 的話,可以拉新的 AOSP code,build 出其 emulator binary,還可以升級goldfish kernel [3] 到3.18 or 4.4.  最新的 emulator kernel 已改為 ranchu [6].

目前新的 AOSP tree 不再包含 qemu [4], 而是直接放一個 prebuilt emulator [5]所以可能需要再另外把它拉回來build。

keep updating .....
(
emulator 還不能動:
https://hackpad.com/Phablet-Ubuntu-Touch-z2FB0yq24Eq
)

[1] https://wiki.ubuntu.com/Touch/Emulator
[2] http://bazaar.launchpad.net/~ubuntu-branches/ubuntu/wily/goget-ubuntu-touch/wily/files/head:/ubuntu-emulator/
[3] https://android.googlesource.com/kernel/goldfish.git
[4] https://android.googlesource.com/platform/external/qemu
[5] https://android.googlesource.com/platform/prebuilts/android-emulator
[6] https://groups.google.com/forum/#!topic/android-emulator-dev/dltBnUW_HzU

2016年6月11日 星期六

Ubuntu Phone - porting - tools

工欲善其事,必先利其器,知道工具在那裡並如何使用,會方便很多,這篇文章就用來收集開發時後可以用到的工具,連結等等 ... keep updating...

## Documents
 * https://wiki.ubuntu.com/Touch
  * https://wiki.ubuntu.com/Touch/MaintainingCodePhablet
  * https://wiki.ubuntu.com/Touch/ContainerArchitecture

## Docker which can be used to build AOSP/device tarball.
 * https://hub.docker.com/r/phablet/platform-devel/

## The place to file bug for Ubuntu touch.
 * https://bugs.launchpad.net/canonical-devices-system-image
 * https://bugs.launchpad.net/turbo
 * https://bugs.launchpad.net/avila
 * https://bugs.launchpad.net/arale

## The reference device Sony Z5 for android 6.x (on developing)
 * https://wiki.ubuntu.com/Touch/Devices/minato

## The phablet 6.x common tree.
 * https://code-review.phablet.ubuntu.com/#/admin/projects/aosp/platform/manifest
  * $ repo init -u ssh://<username>@code-review.phablet.ubuntu.com:29418/aosp/platform/manifest \ -b phablet-6.x && repo sync
 * https://wiki.ubuntu.com/Touch/MaintainingCodePhablet

## The server which host device images
 * Global: http://system-image.ubuntu.com/
 * China: http://cn.system-image.ubuntu.com or http://cache-origin.system-image.ubuntu.com

## Tools
 * https://github.com/alex-tu-cc/ubuntu_phone_tools

## Tips
 * How to flash Meizu Pro5 Android edition to Ubuntu?
  * I did not test this way, but it looks good to go.
  * http://askubuntu.com/questions/767323/how-to-install-ubuntu-on-meizu-pro-5-that-was-originally-with-android/767771#767771?newreg=7437cbdaadd6416ea11a98492c08df17

2016年6月7日 星期二

Ubuntu Phone - porting - 緣起

Ubuntu Phone 已經上市一段時間了,但似乎沒看到 community 在 Port 它,可能是實體手機出貨量太少,也可能是 document 不夠(沒看到中文的)導致開發者興趣缺缺,作最僅剩的第三方 phone os,不免覺得有點可惜。其實買 Ubuntu edition phone 滿划算的,因為其可以刷回 Android 版本,但 Android edition 就不行刷到 Ubuntu edition 了(主因為 Ubuntu resize partition)。

但是如果 WIDI support[1][註1] 順暢度達成後,當成一個開發阿宅的隨身小 pc[2],用來 ssh 到家中或是公司的 server ,在外面開會或是在朋友家中也可以當一個臨時的報告用小 pc 也是滿方便的,甚至有些家庭可能就不需要買文書小筆電可以在外用手機,回家變桌機。這實在是個人滿期待看到的結果。

App 生態不完整是當然不流行的一大主因,但個人認為這是鷄跟蛋的問題,就跟 Android 剛出的時後也是被笑完全跟 Iphone 沒得比,但後來也是追上來了。只要有抓到大家想要的點,自然就會有人用了。目前每次 OTA 後,所有裝過的 deb packages 都要重裝是令個人感覺比較不方便的地方,不知道有沒有什麼好方法解決。

因此,我想借這個 blog 來分享一些開發的經驗,所以留言開放大家點歌~哦不,是點主題,看有那些你很想要知道的,但一直找不到資料,我可以盡我所能(=有空的時後)的回答大家。

目前我想先分享一些 porting 上可能會遇到的問題,以及大約的架構 (說得太淺請別笑我,大家切撮指教)

其實有很多問題也可以直接上 mail list [4]上詢問,上面高手如雲。

[1] http://news.softpedia.com/news/ubuntu-touch-ota-11-update-introduces-wireless-display-support-to-ubuntu-phones-504681.shtml
[2] http://www.techrepublic.com/article/ubuntu-convergence-finally-impresses-me/
[3] https://wiki.ubuntu.com/Touch/Devices/minato
[4] https://lists.launchpad.net/ubuntu-phone/

[註1] 因為目前很多手機都將 MHL 功能拿掉,所以目前看來只有 WIDI 比較可行,不過還是有一些手機存在 MHL [3],如果可以順利 porting 完成,可能也有助於手機廠再回頭看 MHL 這塊。

2015年11月15日 星期日

import AOSP to gitlab


AOSP have almost 700 repositories, it is failed to import them into gitlab.

Install from source, it introduced database (postgresql) and redis

Gitlab architecture:


unofficial gitlab docker:

detail description of parameters:

issue "500 error" after import lots of repositories:

It seems be fixed in this issue?

https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/raketasks/import.md
root@8395b04d4219:/home/git/gitlab# bundle exec rake gitlab:import:repos RAILS_ENV=production

The official docker image give me another issue:
Failed to create repository via gitlab-shell

2015年7月12日 星期日

snappy notes


Test snappy in docker:
http://andrea.corbellini.name/2015/03/25/running-ubuntu-snappy-inside-docker/

[ 小米換到 coolpad 大神 F2 ]

# 之前寫的忘記有沒有寫完 ... 就丟出來吧 XD

最近買了CP 值滿高的 Coolpad 大神 F2 今天剛拿到,感覺還不錯,但是要從原本的手機移過來也是個大問題,雖然很多資料都已經放到雲端,但還是有些是存在App 中,且要一個一個 App 去裝,也很麻煩,因此試了幾個方法。

1. 鈦備份:
這個應該是最好的選則,我之前也有買鈦備份專業版,但可惜的是,它一定要在 root 下使用,偏偏在 coolpad 大陸宣佈 root 後還是照樣有保固的同時,台灣就是沒有同步 (奇怪平常不是一直叫是一個國家,怎麼現在又不同國了?),所以,不能用。

2. adb backup[1]:
看起來也是滿可行的一個方法,但不知為何我的小米 2S 在執行 adb backup 後,device screen 上沒有出現任何訊息 ..... WTF!
adb shell 'pm list packages -f' 
adb backup -apk com.moneyqube -f mi2s-package.ab



[1]: http://android.stackexchange.com/questions/28296/full-backup-of-non-rooted-devices

Google Authenticator - lastpass


因為last pass 的 2-factors authentication show code 的地方沒有 link 常見的底線,容易被忽略 ...... 

接下來跳出的 QR code 用 QR droid 及 手機內建的相機可能辨識不出來,要裝 goggles 就可以了。

2015年4月11日 星期六

docker - 從 container 產生 dockerfile 行不行


最近剛摸 docker ,在學習的時後,就一直有一個問題困擾我。
那就是 docker 可以用 dockerfile 產生 image 也是可以用來作版本控管或分享的一個方式。但是我們在 run 一個 container 時,可能會為了創建環境,而在裡面安了很多 package ,而且應該都是缺什麼裝什麼,一個一個手動裝的。所以等環境建立完,可能自已也忘了裝了什麼 package。 這個時後又想要用 dockerfile 來控管版本或分享給別人,怎麼辨呢?
剛好在 "Docker —— 從入門到實踐" 中看到 "從映像檔產生 Dockerfile" 的說明,覺得應該有機會,因此我從了下面的嘗試。

1. 從在 container 中裝一些 package ex. vim
2. 透過 docker commit 將其 container commit 到某版 image.
3. 透過 command 將 dockerfile 導出。
docker run -v /var/run/docker.sock:/var/run/docker.sock \ centurylink/dockerfile-from-image <IMAGE_TAG_OR_ID> > Dockerfile.txt
4. 只看出導出之 dockerfile 只有一行
FROM ubuntu:vivid

所以,看來目前還是不行的 ....

2015年4月9日 星期四

µBlock - Android 手機看網頁不再有煩人廣告

朋友介紹 µBlock 這個在 PC 版的 Chrome/Firebox/Opera 上的plugin 可以擋廣告,因為 Firefox Android 版也可以裝 plugin (add-ons) 所以就想說應該可以支援囉。
但是從 Android 點入安裝卻出現目前版本不支援?!




原來是最新版還沒有放到首頁,所以可以從 All version 點進去,就看到 0.9.1.0 最新版,就可以安裝囉~






2015年2月26日 星期四

2014年12月17日 星期三

[Linux - Ubuntu]小米 2S 突破 4GB APP 安裝空間限制




最近小米2s的APP 4GB 安裝空間有點不夠了... 因為它不能另外插 SD card,所以 link2SD 也不能用,只好用爆力法更動partition size.

主要注意是這幾個 partition
/system => 用來放系統 App ,這個不用動
/data => 用來放使用者 App ,這個要變大
/sdcard => 用來放Mp3,相片等等假裝成 sdcard 的 partition,這個要變小

因為儲存空間固定,所以就得切一些 /sdcard 空間給 /data
在 Ubuntu 下,大家應該有玩過 gparted 可以直接 resize,就像它的原理。

首先需要先裝含有 repartition 工具的 CM 出版 recovery
CWM for MIUI
http://forum.xda-developers.com/mi-2/development/2014-07-08-clockworkmod-recovery-6-0-5-0-t2878549
how to install by fastboot


http://wiki.cyanogenmod.org/w/Install_CM_for_aries

然後記得備份,我是用鈦備份備份 App,沒試過直接將 /data 整個 copy 下來,如果你成功了,再請分享哦 ;)
另外提醒,如果是用開發版的人,要記得備份 Google Play market 的apk ,我就是忘了備份,還要上網找半天 .....

接下來開進 CWM 後 adb 進手機,
因為我們要動到 /data 所以先 umount 它
$ umount /data
(網上說要 umount /cache 不知為何,我覺得只要 umount /data 就可以)

執行 repartition 工具
$ parted /dev/block/mmcblk0

設定單位
(parted) unit MB

列出目前 partition
(parted) print

16GB 的版本應該會像這樣:
Model: MMC SEM16G (sd/mmc)
Disk /dev/block/mmcblk0: 15.8GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 17.4kB 89.1MB 89.1MB fat16 modem
2 89.1MB 178MB 89.1MB fat16 modem1
3 178MB 179MB 524kB sbl1
4 179MB 179MB 524kB sbl2
5 179MB 180MB 1049kB sbl3
6 180MB 181MB 1049kB rpm
7 181MB 182MB 1049kB tz
8 182MB 183MB 524kB DDR
9 183MB 187MB 4194kB aboot
10 187MB 188MB 1049kB misc
11 188MB 191MB 2990kB logo
12 191MB 192MB 799kB m9kefs1
13 192MB 193MB 799kB m9kefs2
14 193MB 193MB 1024B m9kefsc
15 193MB 201MB 8501kB bk1
16 201MB 202MB 799kB m9kefs3
17 202MB 268MB 66.3MB bk2
18 268MB 284MB 15.7MB boot
19 284MB 300MB 15.7MB boot1
20 300MB 316MB 15.7MB recovery
21 316MB 327MB 11.5MB bk3
22 327MB 336MB 8389kB ext4 persist
23 336MB 872MB 537MB ext4 system
24 872MB 1409MB 537MB ext4 system1
25 1409MB 1812MB 403MB ext4 cache
26 1812MB 5570MB 3758MB ext4 userdata27 5570MB 15758MB 10188MB ext4 storage

接下來刪掉 26, 27 (注意: 刪掉就回不去了,請先作好備份)
(parted) rm 26
(parted) rm 27

因為 parted 只有 support ext2,所以我們要建 ext2 partition 等一下再轉換成 ext4。
command 格式為 mkpartfs primary ext2 {起始 MB} {結尾 MB}
因為我想多切 2GB 給 /data 所以,是1812MB ~ 5570MB
(parted) mkpartfs primary ext2 1812 5570

剩下的切給 /sdcard 5570MB ~ 15758MB
(parted) mkpartfs primary ext2 5570 15758

給 partition name ,這裡需要跟之前的 partition name 一樣。
(parted) name 26 userdata
(parted) name 27 storage

(parted) quit

然後網路教說是說要作下面動作將 partition 轉成 ext4:
$ tune2fs -j /dev/block/mmcblk0p26
$ e2fsck -fDp /dev/block/mmcblk0p26
$ tune2fs -O extents,uninit_bg,dir_index /dev/block/mmcblk0p26
$ e2fsck -fDp /dev/block/mmcblk0p26

$ tune2fs -j /dev/block/mmcblk0p27
$ e2fsck -fDp /dev/block/mmcblk0p27
$ tune2fs -O extents,uninit_bg,dir_index /dev/block/mmcblk0p27
$ e2fsck -fDp /dev/block/mmcblk0p27

但我覺得應該只要用 mke2fs 就好了,但我還是乖乖照作就是了....
有興趣的人可以試看看,我等有空再試看看好了~
$ mke2fs -T ext4 /dev/block/mmcblk0p26
$ e2fsck -fDp /dev/block/mmcblk0p26

$ mke2fs -T ext4 /dev/block/mmcblk0p27
$ e2fsck -fDp /dev/block/mmcblk0p27

接下來再看一次 partition table list 就會看到不同
$parted /dev/block/mmcblk0
(parted)unit MB

(parted) print
print
Model: MMC 016G92 (sd/mmc)
Disk /dev/block/mmcblk0: 15758MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number Start End Size File system Name Flags
1 0.02MB 89.1MB 89.1MB fat16 modem
2 89.1MB 178MB 89.1MB fat16 modem1
3 178MB 179MB 0.52MB sbl1
4 179MB 179MB 0.52MB sbl2
5 179MB 180MB 1.05MB sbl3
6 180MB 181MB 1.05MB rpm
7 181MB 182MB 1.05MB tz
8 182MB 183MB 0.52MB DDR
9 183MB 187MB 4.19MB aboot
10 187MB 188MB 1.05MB misc
11 188MB 191MB 2.99MB logo
12 191MB 192MB 0.80MB m9kefs1
13 192MB 193MB 0.80MB m9kefs2
14 193MB 193MB 0.00MB m9kefsc
15 193MB 201MB 8.50MB bk1
16 201MB 202MB 0.80MB m9kefs3
17 202MB 268MB 66.3MB bk2
18 268MB 284MB 15.7MB boot
19 284MB 300MB 15.7MB boot1
20 300MB 316MB 15.7MB recovery
21 316MB 327MB 11.5MB bk3
22 327MB 336MB 8.39MB ext4 persist
23 336MB 872MB 537MB ext4 system
24 872MB 1409MB 537MB ext4 system1
25 1409MB 1812MB 403MB ext4 cache
26 1812MB 5570MB 3758MB ext4 userdata
27 5570MB 15758MB 10188MB ext4 storage

接下來重開機後,就可以看到 partition 不同,再用鈦備份把 App 備份回來就可以了。






Reference:

http://xiaomi.eu/community/threads/mi2s-extending-size-of-storage-partition.21391/

2014年12月5日 星期五

airdroid 3 - 我最期待的app


看到他 airmirror 的功能,可以把手機上的 app mirror 到 pc 上,這樣就不用慢慢等各家 app 放出pc client app 了,如此 .... 我也可以在 Ubuntu 上用 Line 了
http://help.airdroid.com/customer/portal/articles/1784666-airmirror

但是,可惜現在還不 support Linux .... WTF !!

密切注意這個 thread 吧....
http://forum.xda-developers.com/apps/airdroid/linux-client-t2962111


2014年10月12日 星期日

Linux 多重開機USB disk - multiple OS bootable usb disk


之前花了很多時間想要讓多個OS live CD 放在一個隨身碟裡,試過很多方法都一直有問題,利用這篇記錄一下試過的幾個方式。

這是我比較後來找到的方法,目前是唯一成功讓我在 USB 3.0 disk 上同時放 clonezilla 及 Ubuntu 的方法,但不知為何,只要經過USB 3.0 HUB, 就無法開進 USB disk. 還要再研究。
另外,這個方法作出的 disk 在我的 X240 上面試 clonezillia開機,畫面會亂掉,但在其他PC 不會。因此我幾考其他方法作出來的 clonezillia 開機碟設定,將其 grub.cfg 裡"video=uvesafb:mode_option=800x600-16" 改成"vga=788"後就可以了。



2. GRUB - manually edit
找不到最初看到的文章了,就是自已在 usb disk 上裝 grub2 再把 iso copy 過去,在 grub.cfg 中用 mount loop 的方式 load 進來,我當時遇到的問題是 mount iso 檔的時後,我要如何指到USB 碟? 
用前是用 "set root=(hd0,1)" 指到 usb disk。
這個方法作出來的 disk ,透過 usb hub ,還是可以開進去 clonzillia,所以可以拿來和第一种方法相比較。

後來找到這個有點像,有空再試一下: Boot Multiple ISO from USB via Grub2 using Linux

這個是透過 syslinux 建立的,還沒試,但他這句話讓我有點不想試 XD
"Important Note: YUMI was intended to be used to try to run various "LIVE Linux" Operating Systems from USB. Installing Linux from the YUMI created USB Drive to a Hard Drive is not officially supported. If the installer portion of any Live Linux distro does work, consider it a bonus."

syslinux 似忽都是要將 iso 裡的檔 copy 出來,但我在 copy 時有遇到 error “operation not permitted”,裡面留言所遇到的一樣,但格主沒有回應。

不管那個 error 直接上,Ubuntu 14.04 開不進去,殘唸....

這個也是 syslinux 的方式,就是一個一個用 unetbootin 作好之後,再 copy 到到各別的 folder 再修改 syslinux.cfg 指向它。 但是我看 clonezilla 說,不推用 unetbootin 作開機碟.... 但我想用他的 Tuxboot 作結果應該一樣。

2014年6月13日 星期五

Lenovo Thinkpad X240

最近為了工作買了一台 X240 跑 Ubuntu 14.04 ,分享一下使用上的經驗:


  1. 不知為何,其 default 為 function key
  2. 當使用上面方法時,End/Insert key 就變成以 insert 為 default key.
  3. Ubuntu 14.04 好像取消了中英文輸入法的切換,而改以 super + space 來切換到下一個輸入法,而 super + shift + space 切換到上一個輸入法。
    1. will try this http://jingyan.baidu.com/article/4b07be3c60da3f48b380f3f0.html

      Written with StackEdit.