2008/12/26

Neo FreeRunner 新手手冊 (10) 認識 Openmoko 社群, 環境, 工具以及開發人員


Neng-Yu Tu (Tony Tu)

Openmoko 是一個非常特別的專案, 也是目前唯一軟體及硬體都完全根據 Open source 社群精神公開的專案. 2006 年底, 第一個產品 Neo1973 (GTA01) 在市場上販售前, 所有相關的程式碼及開發資訊就已在網路上公開. 在2008 年 6 月 FreeRunner (GTA02) 發售後, 相關的電路圖 (schematics: http://downloads.openmoko.org/developer/schematics/ ) 以及外型設計 CAD 檔 (Housing: http://downloads.openmoko.org/developer/CAD/) 也都開放給開發人員下載. 同時也提供了大部分的硬體 datasheet 供開發人員有機會 base on 在原設計下進行自己的設計.

[開放原始碼社群常使用的工具]
這幾年來, 許多硬體產品除了原先的出貨的功能外, 會有開放原始碼社群加入開發或以 hack 的方式增加原先產品的功能. 比較有名的例如最早建立在 Linksys 的 WRT54G 的 OpenWRT ( http://openwrt.org/ ) 專案, 提供了無線 AP 的相關 firmware. 或是最近的 Google Android 也提供了幾乎完整的原始碼在 http://android.git.kernel.org/ .

而其它的像是 Gumstix ( http://gumstix.com/ ) 也有 Windows CE (http://www.codeplex.com/gumstix) 及 OpenEmbedded (http://www.gumstix.net/) 不同的討論社群. 基本上, 開放原始碼社群進行開發 (極端的分散式開發 ;) ) 使用的工具有下列幾項:

* 郵件/即時線上討論: IRC, mailing list, jabber
* 原始碼管理: svn 及 git
* 知識管理: wiki
* Developer 個人的分享: planet/blog
* Bug 追蹤/Issue tracker: Trac/Bugzilla
* Project 管理: taskjuggler
* 常用的免費服務: sourceforge, google xxx (code/calendar/docs) 等
* 釋出版本及套件下載

[線上討論]
Oopenmoko 的線上公開討論區是在 Freenode 的 #openmoko , Windows 的使用者可以用 mIRC 或是其他 IRC 軟體.

[郵件討論]
在開放原始碼社群 (open source community)中, 傳統的 mailing list 是最常見的討論方式, 以及 irc. 這一點和國內常用的討論區方式不同. Openmoko 的 mailing list 列表在這裡: http://lists.openmoko.org/mailman/listinfo/ 如果你習慣討論區的介面, 可以透過http://lists.openmoko.org/nabble.html 來加入討論.

最重要的有:

* community: 社群主要的討論區, 包含常見問題, 發展方向, 抱怨, 希望...等
* devel: 軟體相關討論: 主要是在應用程式 level, 包含工具, 各個 distribution, release package 討論
* kernel: 相關 kernel porting/driver bugs, 以及介於 software 和 hardware 相關的問題
* hardware: 硬體相關問題討論, hardware bugs
* support: 常見的 distribution 問題, 硬體瑕疵和軟體使用問題等

在這些 mailing list 進行訂閱動作後, 相關的討論 mail 就會寄到你的信箱, 通常一個單一 list 一天都會有數封到數十封不等的信件. Android 或其他的 Open Source 專案, 都以類似的方式進行資訊分享與協同開發.

[原始碼伺服器]
Openmoko 是一個開放原始碼專案, 當然提供所有相關的原始碼供使用者下載. Openmoko 使用下列原始碼伺服器:

<git 伺服器>
位址: http://git.openmoko.org/

可能一般開發人員對 svn 或是 virtual source safe 的原始碼管理方式比較熟悉, 但是對於 git 可能會有一些陌生. git 最主要的優點就是分散式設計, 可以快速 branch. 舉例來說, 每個人自己 clone 下來的 git 都是可以自己 branch, 同時可以在本機 commit 自己的 code. 不需要連回原 server 做 commit 的動作. 網路上的有許多的 cheat sheet (http://git.or.cz/gitwiki/GitCheatSheet), 可以印出來, 讓你快速習慣工具使用. Openmoko 的 git 裏, 主要有:

* Linux Kernel 相關的原始碼及 patch
* u-boot 相關原始碼及 patch
* qi 一個精簡的 boot 程式, 最早是 werner 想用 k-boot 換掉 u-boot, 後來變成帶有東方味的 qi (氣)
* xglamo: FreeRunner 用的 X driver
* 產測相關軟體 production-testing
* 開發人員的自己使用的 tools 及 Distribution fork

Openmoko 的 git 基本上是從 vanilla linux kernel (未修改的 linux kernel from kernel.org), 加上 ARM 相關的 patch, 再加上 Ben Dooks 的 S3Cxxxx 的 porting patch, 最後加上 Openmoko 自己的patches. 相關的說明可以參考這一頁:
http://git.openmoko.org/?p=kernel.git;a=summary

<svn 伺服器>
位址: http://svn.openmoko.org/

Neo1973 開發時, Openmoko 使用的主要版本控制系統. 不過目前 kernel 及 u-boot 都已經被移到 git 中繼續開發. Svn 留下的是一些比較小型的專案/工具, 以及開發人員所會用到的開發工具放在 svn 中.

[Bug 追蹤/Issue tracker]
Openmoko 使用 Trac (http://trac.edgewall.org/) 作為主要的 Bug track 及 Issue track. 通常這類 Bug/issue tracker 工具的功能都差不多, Trac 的介面整合了 wiki 跟 issue tracker 的功能, 是用 python 作維護. Openmoko 的 Trac 在 http://docs.openmoko.org/trac/

[知識管理 - wiki]
開放原始碼專案大部分都會提供某一種的 "共筆" 平台, 讓參加專案以及想發表心得的人可以有一個地方把資訊有系統的紀錄下來. 通常許多的話題都是從 mailing list 開始, 然後討論的結果會到 wiki 或是 Trac �. Openmoko.org 的首頁就是 wiki (http://wiki.openmoko.org/wiki/Main_Page), 同時, Openmoko 的 wiki 也是使用 wikipedia 使用的 media wiki.

* Mailing list 討論有明確結果 -> Wiki
* Mailing list 討論有 bug -> Trac/Bugzilla

要新增/修改/刪除 wiki 頁面上的資料, 必須先在 wiki 上建立帳號, 同時 wiki 上有 一些重要頁面是保護狀態. 只有 Wiki Administrator 才能修改.
[釋出版本及套件下載]
Openmoko 目前釋出的版本及對應的套件 (testing/released/un-stable) 都是放在 http://downloads.openmoko.org/ . 各個社群的 Distributions 可以從各自的網站下載. 要使用預先打包好 opkg 應用程式, 可以參考 http://www.opkg.org/

[相關應用開發]
Openmoko 有自己的 project server (http://projects.openmoko.org/), 申請帳號後即可在 project server 建立新專案. 但是 Openmoko 有計畫要 phase out 這個 server. 所以目前 Openmoko 內部的公開 project, 開始 host 在 google code 上, 例如 motion senor (accelerometer) 的 omnewrotate, 新的 contacts/sms/dialer 介面專案 paroli 等.

[主要開發人員]
Openmoko 最早成員是 Sean Moss/Michael Lauer (Framework)/Harald (Low Level driver and HW consultant)/Werner (bootloader and HW consultant), Sean 帶領了大家開始了這個奇妙旅程.

Openmoko 主要的開發人員都在 wiki 的 Who is Who 頁面中 ( http://wiki.openmoko.org/wiki/Who_is_Who ). 透過 mailing list 或是討論區介面的 mailing list nabble (http://lists.openmoko.org/nabble.html) 是最直接的方式.
雖然大部分的 developer 已經成為歷史 (Sad...), 但是我還是把名字列出來 (2009, March upadte)

[SW]

Andy Green: kernel/Driver (http://warmcat.com/_wp/)
Werner Almesberger: Kernel/Driver/u-boot (http://www.almesberger.net/cv/papers.html)
Matt_Hsu: Kernel/Driver (http://matthsu-abacus.blogspot.com/)
Michael 'Mickey' Lauer: FSO/GTK (http://www.vanille-media.de/site/index.php/about/)
Brenda: Wiki
Roh: IT infrastructure
Gismo: IT infrastructure/SysOP
Marek Linder: Project coordinator
John_lee: OE/Distribution maintenance (http://asleepfromday.wordpress.com/)
Holger 'zecke' Freyther: System/QT (http://zecke.blogspot.com/)
Wendy: Testing
Regina: Testing
Tick: opkg/installer/etk/OE (http://linuxocarina.blogspot.com/)
Will: Design, Product manager
Guillaume 'Charlie' Chereau: FSO/Python (http://charlie137-2.blogspot.com/2009/01/paroli-get-website.html)
Julian: Distribution (http://walkingice.twbbs.org/blog/)
Olv: X/LBS application (http://olvaffe.blogspot.com/)
Erin: GTK/Python (http://i-miss-erin.blogspot.com/)
Jeremy: LBS
Willie: Early kernel/production work (http://openmoko.wordpress.com/)
Sean Chiang: gsmd/gps application
Miles: production test
Jelan Hsu: certification/production test
Raster: enlightment/etk/everything (http://www.rasterman.com/)
Harald Welte: kernel/everything (http://laforge.gnumonks.org/weblog/)
Jserv: kernel/application

[HW]

Tim Lee: EE
Allen: EE
Shawn: RF


And Me ;) GTA01/02 PM, the one should be damned :)

2008/12/22

Neo FreeRunner 新手手冊 (9) 安裝 Android, SHR, FDOM, Debian 到 SD (SDHC) 卡


Neng-Yu Tu (Tony Tu)

一般手機或移動式行動裝置只能執行預先安裝的作業系統, 應用程式的寫作也受到 framework 本身的限制, 也不能更換作業系統. Openmoko 的硬體基本上打破了這些人為加上的限制, 透過公開線路圖及取得相關技術文件授權的方式, 提供一般裝置使用者, 可以取得足夠的資訊開發新的移動裝置軟體. 這也是 Openmoko 和 Android 最大不同的地方. 相關完整的說明請參考 http://wiki.openmoko.org/wiki/Boot_from_sd_card

Openmoko 為了解決使用者需要在快速不同作業系統/版本間切換的問題, 所以在 u-boot 設計時, 設計了可從 SD 卡開機的功能, 這個功能同時可由開機的選單啟動或關閉.

FR 的兩份 u-boot, 都可支援 Boot from SD 功能, NOR flash 裡面的 u-boot, 預設開機選單即可選擇從 SD 卡啟動 (先按下 Aux 鍵, 再按電源鈕). 一份是在 NAND flash, NAND u-boot 預設無開機選單.開機看不到開機選單的原因是: u-boot 預設不顯示開機選單, 但可以用先按 power 鍵開機 0.5 至 1 秒後, 按下 AUX 鍵不要放的方式, 使 NAND 的 u-boot 出現開機選單.

注意: 但是 NOR 裡面的 u-boot (可能比較舊) 在 boot SDHC 的 SD 卡時, 可能會無法啟動. 此時就只能使用 NAND 的 u-boot. 同時, 某些 SDHC 有相容性的問題, 請參考: http://wiki.openmoko.org/wiki/Supported_microSD_cards 的內容, 確認你使用的 FR 使用的是支援的 SD 或 SDHC卡, 建議直接使用 SanDisk 的 SD/SDHC 卡可以省去許多相容性的問題.

開機後, u-boot 就會去尋找檔名為 uImage.bin 的檔案 (2008/04 前的 NOR 或 NAND u-boot, 會尋找檔名為 uImage 的檔案)

[修改 NAND 開機選單 (NAND u-boot)]
你可以透過 u-boot 修改環境變數, 加入 menu items 及對應的啟動數值. 或是直接利用 dfu-util 更新環境變數檔案 (可從這邊下載檔案 http://t0ny.net/openmoko/samples/config/env_menu.new). 直接 ./dfu-util -a 2 -R -D env_menu.new . 在 u-boot 的 command prompt, 可以利用 printenv 來看到目前的參數, 用 setenv 來設定每個參數的值.

[製作可開機的 SD 卡]
目前 Openmoko u-boot 對於可開機的 SD 卡的限制, 是必須包含兩個 partition, 第一個 partition 必須是 vfat 格式 (2008/8 月前的 u-boot 都有此限制), 用來放置檔名為 uImage.bin 的 kernel image 檔案. 第 2 個 partition 必須為 ext2/3, 用來放置整個 rootfs 的檔案.

Step 1: 分割 SD (SDHC) 卡 (一般來說, SD 卡原先都會預先 format 成 fat32, 請一樣用 fdisk, 先刪除原有的 fat32 partition)
root@ubuntu:~# fdisk /dev/mmcblk0
The number of cylinders for this disk is set to 125632.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-125632, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-125632, default 125632): +8M
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (246-125632, default 246):
Using default value 246
Last cylinder or +size or +sizeM or +sizeK (246-125632, default 125632):
Using default value 125632
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

Step 2: 格式化 SD (SDHC) 卡
root@ubuntu:~# mkfs -t vfat /dev/mmcblk0p1
mkfs.vfat 2.11 (12 Mar 2005)
root@ubuntu:~# mkfs -t ext3 /dev/mmcblk0p2
mke2fs 1.40.2 (12-Jul-2007)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
501952 inodes, 1003096 blocks
50154 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1027604480
31 block groups
32768 blocks per group, 32768 fragments per group
16192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 22 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

格式結束後, 這一張 SD (SDHC) 卡就可以準備放入 uImage.bin (第 1 個 partition vfat)及 rootfs (第 2 個 partition ext2/ext3) 的檔案及目錄.

[下載需要 kernel 及 rootfs]
每一個 Distribution 幾乎都是一組對應的 rootfs 及 kernel 方式存在. 原因大部分都是因為每一個 Distribution 裡面的程式已經都是在某個時間點將所使用的 package 做 snapshot 或是 fork 出來, 同時某些驅動程式版本及設定檔位置, 也會隨著 Distribution 不一樣. 所以幾乎每一個不同的 Distribution 都提供了成組的 kernel 及 rootfs. 目前 (2008 Dec)唯一不同的是 FDOM, 因為 FDOM 預設的 kernel 對象是 2008.X, 所以 FDOM 使用的 kernel 可以從 downloads.openmoko.org 取得.

同時, 開機 SD 卡裏的 rootfs 是直接以目錄及檔案的方式存在, 所以需要 download rootfs.tar.gz 的整包壓縮檔, 而不是使用 flash 到 NAND flash 的 .jffs2 檔.

請到下面網址, 取得 image 檔案, 有一些網站還提供了 gta01 的版本, download 時請注意.

SHR: http://shr.bearstech.com/
FDOM: http://www.tuxbrain.com/fdom_en.html
Debian: http://wiki.debian.org/DebianOnFreeRunner
Android: http://people.openmoko.org/sean_mcneil/ 或是 http://freerunner.android.koolu.com/release-files or http://t0ny.net/openmoko/images/android/ 在這邊放了一份 snapshot

[安裝 SHR]
SHR 是法國的 bearstech 所提供的版本, 主要以 illume 的 theme 為主的 Distribution. 安裝 SHR 很簡單, 只要 download image 後, 直接 copy uImage.bin 及 rootfs 的檔案到 SD 卡中.

Step 1: 製作一張標準的開機 SD 卡 (最好需要 512 MB 或以上)
Step 2: 複製 uImage.bin 到第一個 SD 卡的 vfat partition 中. 請注意, kernel 檔案必須是 uImage.bin , u-boot 才會認得.

root@ubuntu:~/moko/shr_images# ls
shr-image-om-gta02.jffs2 uImage-om-gta02-latest.bin
root@ubuntu:~/moko/shr_images# cp uImage-om-gta02-latest.bin /media/disk-1/uImage.bin

Step 3: 下載並解開 rootfs.tar.gz 檔案 (tar zvxf rootfs.tar.gz)
Step 4: 到解開的檔案根目錄下, 將整個根目錄 structure 複製到 SD 卡的第 2 個 partition (ext2/ext3) 中 (cp -r . /media/disk-2)

root@ubuntu:~/moko/shr# ls
bin dev home linuxrc media proc tmp var boot etc lib local mnt sbin sys usr
root@tony-ubuntu:~/moko/shr# cp -r . /media/disk-2

Step 5: 用 sync 命令確定檔案已經完整複製過去
Step 6: umount 後將 SD 卡放到 FR 中, 由 NAND 或是 NOR boot 開機選擇 Boot From SD card 選單開機.

[安裝 Debian]
在 SD 卡上安裝 Debian 很簡單, 但是程序有些不一樣. 因為 Debian community 寫了一個 script 讓安裝到 SD 卡的動作自動化. 我覺得這個 script 跟 mokomakefile 一樣, 都是發揮 linux 安裝優點, 而且非常有趣的 script.

Step 1: 製作一張標準的開機 SD 卡 (最好需要 512 MB 或以上)
Step 2: 將 SD 卡放到 FR 中, 同時以 2008.X 或 FSO milestone 3/4 開機
Step 3: 建立 FR 到 Internet 的連線 (可透過 USB 或是 WiFi/Bluetooth)
Step 4: 在 home 目錄下執行:
$ wget http://pkg-fso.alioth.debian.org/freerunner/install.sh
$ chmod +x install.sh
$ ./install.sh all

Step 5: 此時 install script 會將所有檔案, 複製到 SD 卡的第 1 個及第 2 個 partition 中.
Step 6: 複製完後, 可檢查 uImage.bin 檔是不是放到第 1 個 partition 中, 以及相關的 rootfs 是不是放到第 2 個 partition 中.
Step 7: 安裝完, 關機, 重新由 NOR 或 NAND u-boot 開機後, 選擇從 SD 卡開機即可.

目前 Debian Distribution 預設的使用者 UI 是 FSO 的桌面, 所以如果你不確定你執行的是 Debian 還是 FSO, 可以直接用 uname -a 看 kernel 的版本.

[安裝 Android]
Android image 跟一般 image 不一樣的地方在於 Android 目前無法單獨放到 SD 卡上執行. Android 執行時, 需要 NAND flash 及一張空白的 SD (非 SDHC)卡在 FR 中. 所以要在 FR 執行 Android, 需要利用 dfu-util 或是 Neotools 安裝 Android 的 uImage 及 Android 的 rootfs 到 NAND flash 中, 並準備一張 128 MB (512 MB 或以上 preferred) 的 "空白" SD 卡.

Android 需要的空白 SD 卡一樣需要 2 個 partition, 第一個 partition 建議還是使用 vfat (非必要), 第 2 個 partition 需要 ext3 格式. 第一個 partition 中, Android 在第一次開機時, 會建立存放 media 檔案 (影像/聲音) 的相關資料夾. 而在第 2 個 partition 中, Android 會建立 kernel 相關需要的設定檔 folder.

Step 1: 準備 Android 所需要的空白 SD 卡 (非 SDHC 卡)
Step 2: 下載 Android 所需要的相關檔案
Step 3: 執行 dfu-util 將 Android 的 uImage.bin 及 rootfs dfu 到 FR 中. 請注意, kernel 檔案必須是 uImage.bin , u-boot 才會認得.

Step 4: 將 SD 卡放到 FR 後開機. 一般來說, 第一次開機需時 2-3 分鐘. 若超過 5 分鐘無法開機, 請重新移除 SD 卡, 放回 SD 卡後, 重新開機.

同時 2008/11 月前的 FR Android kernel 會發生 suspend 後無法 resume 的情形, 請 disable suspend (在 system settings 最下方有一個 suspend 的時間設定) 功能. 2008/11的 image 進入 suspend 無法開機時, 可刪除第 2 個 ext3 partition 的檔案 (kernel/setting 檔), 通常即可開機.
Koolu 目前 update 的 image 可以從下網址下載 http://freerunner.android.koolu.com/release-files

2008/12/9

Neo FreeRunner 新手手冊 (8) 已知的硬體問題


Neng-Yu Tu (Tony Tu)


FreeRunner 和一般的一般的嵌入式硬體開發及使用過程不太一樣的地方, 就是幾乎所有的開發流程跟硬體問題都可以在討論區找到. 同時也會有許多社群上的人會幫忙測試及提供解答. 所以原先當 FR 在開發流程中沒有測試到的 test case 產生的硬體 Bugs, 也都可以看到社群上的人幫忙整理及討論. 比較詳細的問題在以下的 wiki 網頁中.

http://wiki.openmoko.org/wiki/Neo_FreeRunner_Hardware_Issues 以下是一些常見硬體 Bug 的問題及解決辦法.

[你的硬體版本及軟體版本]
FR 到目前已知有 A5, A6, A7 版本, 從 A5 版本起就是真正量產版本. 觀察版本有幾個方法, 一個是透過 part number, 另一個是透過 cat 手機內的硬體版本資訊. 用軟體指令無法區分是 850/1800/1900 或是 900/1800/1900 硬體版本.

1) Software
* kernel : uname -a
* rootfs : cat /etc/version or cat /etc/om-version
* u-boot: grep Bootloader /dev/mtdblock0 (yields the NOR u-boot version) or grep Bootloader /dev/mtdblock0 (yields the NOR u-boot version)

2) Hardware
* cat /proc/cpuinfo 或 cat
從 revsion ATAG 得知目前的版本, 0350 是 A5, 0360 是 A6, 0370 是 A7 等

3) Part number:
* 56-21146-00 A5 850/1800/1900 版本
* 56-21147-00 A5 900/1800/1900 版本
* 56-21176-00 A6 850/1800/1900 版本
* 56-21175-00 A6 900/1800/1900 版本
* 56-21210-00 A7 850/1800/1900 版本
* 56-21209-00 A7 900/1800/1900 版本

[GPS]

* 問題
這是第一個被發現出來的問題, 就是使用者無法利用內建的 GPS 定位系統得到自己的定位. 這個問題會發生在量產品原因是在設計 test case 時, SD 卡及 GPS 協同運作時 GPS 的訊號是從增強過的 GPS 室內天線發出. 同時產測也是使用增強的 GPS 天線以便配合測試. 所以當使用者在正常 GPS 訊號強度下, 同時使用 SD 卡時, GPS 會無法定到位, 或是需要數十分鐘到數小時才能定位. 這個問題被社群反映後一週, 有人確認此情況只在 SD 卡插入時才發生. 之後確認是 SD card 的 sd_clk 產生的背景干擾.

* 修正方式
Openmoko 1 天後提出第一個這個問題的軟體解法, 就是當無 SD 卡存取動作時. 驅動程式會自動關閉 sd_clk 訊號. 這個修正已經套用在所有 2008 年 8 月後的 kernel 驅動程式中. 一週後提供了硬體解法, 該解法是在 sd_clk 跟 sd_gnd 中間加一個 10 pF 的電容過濾/改變/減低會影響 GPS 的高頻雜訊位置. 此修正已套用在 GTA02 A6 版以後的版本. 經過社群的測試, 軟體修正的效果跟硬體修正的效果類似, 所以 FR 的 GPS 問題目前用 2008 年 8 月以後的 kernel 即可解決.

* 測試方式
可以參考前面 GPS 相關的使用說明

[GSM SIM 卡相容性]
一般的手機有區分為 2G/2.5G 手機及 3G 手機, SIM 卡也有區分 2G 及 3G 的 SIM 卡, 同時 SIM 根據本身設計, 還有 5V, 3V, 1.8V 等不同電壓規格.
GTA02 出貨用的 GSM firmware 預設為 moko8 或是 moko9-beta 1 版本. 目前 FR 可用及有問題的 SIM 卡, community 將資訊收集在以下網址:
http://wiki.openmoko.org/wiki/FreeRunner_unable_to_work_with_3G_SIM_cards

由於 GSM firmware 擁有獨立的版本, 記憶體儲存位置. 所以並沒辦法經由更換 kernel 或是 rootfs 解決.必須透過 TI 提供的 calypso firmware 更新程式 fulid 來更新. 目前最新的版本是 moko 10, 初步測試可解決 GSM 3G SIM 卡相容性的問題, 使用者可參考以下網址更新:http://wiki.openmoko.org/wiki/GSM/Flashing

GSM firmware 更新有可能會失敗, 意思是可能會讓 GSM (手機功能) 無法使用.請注意

[GSM Buzz]
FR 在 A5/A6/A7 均受到程度大小不一的 GSM buzz (有些人稱為 TDD noise) 的問題, 這也是已知無法用軟體修正的問題. 主要是 FR 內 GSM RF 干擾發生的.目前討論區已有硬體改電阻加電容的 workaround 解法, Openmoko 提出的 A5/A6 版修正 SOP 在以下位置 http://people.openmoko.org/joerg/GSM_EMI_noise/

[SD 卡相容性]
* 問題
市面上有許多品牌/規格不同的 SD 卡, 並不是每一種 FR 上面都可以直接使用. 原因是因為各家 SD 卡供應商都有自己的控制晶片, 各晶片對於 SD 規格相容程度不一. 同時, 目前有 SD 卡也有兩種規格 SD 及 SDHC, 後者是較新的規格. 目前 2GB 以上的 SD card 均為 SDHC 的規格. 由於 FR 使用的 SD 驅動程式並沒有經過這麼多種類的 SD 卡測試, 所以僅提供了 "有限的" 相容性. 目前測試已知相容性最好的是 Sandisk 的 SDHC flash 卡.
* 修正方式
目前 Community 測試 microSD 卡最大的是 16 G 的 SDHC, 但是可能需要做一些 SD 卡時脈設定及調整的工作. 經過測試可使用的 SD 卡也都列在 wiki 中 http://wiki.openmoko.org/wiki/Supported_microSD_cards

[電池過度放電的問題]
*問題
由於 FR 的軟/硬體組合設計上, 還有可能會發生關機不完全的漏電現象, 導致電池放電至低於 3.4v, 甚至到幾近 0v 的狀態. 此時會發生一個狀況, 就是當電池放到 FR 中後, 即使插上充電器, 還是無法充電的狀態. 原因是因為無法開機到最基本的 u-boot, 電源管理 IC 無法被正確設定可充電. 同時, 因為電池電壓已經過低, 甚至 PMU "不認為" 電池已經放入 FR 中. 所以導致無法即使插入充電器, 還是無法充電.
*修正方式
有幾個方式可以讓過度放電的電池重新充電:

1) 最快, 也最方便的方式就是使用 Nokia BL-4C/5C/6C 相容的電池充電器替 FR 電池充電, 因為 FR 的電池基本上和 Nokia BL-4C/5C/6C 電池相容. 所以一般市面上 200 元的 Nokia 電池相容充電器均可替 FR 電池充電.

2) 利用 BL-4C/5C/6C 的電池替 FR 開機後 (按下 Aux 鍵, 後按電源鈕從 NOR flash 開機), 接著連接 USB 充電器或是電腦的 USB 埠. FR 可以靠 USB 電源維持開機的狀態, 然後放入已過度放電的電池進行充電.

3) 可以試著拔除電池, SIM 卡, 及 SD 卡, 用 USB 線連接 FR 及電腦或直接使用包裝中附的 USB 充電器, 然後按下 AUX 鍵及電源鍵開機至 NOR 的 u-boot (GTA02 A6 版及以後的硬體, 均應該設計搭配此功能), 開機後, 放入已過度放電的電池進行充電.

2008/12/3

Neo FreeRunner 新手手冊 (7) GPS 及 A-GPS 功能


Neng-Yu Tu (Tony Tu)


Openmoko FreeRunner 使用的是 U-Blox 4 ANTARIS 的晶片組, 這個晶片組提供了 16 個 channel 的標準 GPS 及透過輔助資料快速定位的 A-GPS 功能. GPS 功能啟動後, 就可以從 Neo 的 ttySAC1 得到 NMEA 碼. U-Blox 的 GPS 功能跟一般 GPS 一樣, 一般所需時間從 40 秒 (U-Blox 規格) 到數分鐘不等. 這個時候可以透過一般 GPS 軟體 (TangoGPS/Openmoko AGPSUI/Others) 來做定位的動作. 完整 FR 的 GPS 相關資料可參考.

http://wiki.openmoko.org/wiki/GTA02_GPS

U-Blox 的 A-GPS (Assisted GPS) 分為 A-GPS online 跟 A-GPS offline 兩種不一樣的功能, 差別如下:

* AGPS online: 每次使用時, 需連上網路, 到 agps.u-blox.com 下載約 2-3 k 的定位輔助資料. 定位輔助資料包含了目前使用者上方應該有哪些衛星等資料. 每次下載的資料有效時間約 4 小時.

* AGPS offline: 若原先硬體設計時就包含一顆額外的 Flash 記憶體, U-Blox GPS 在啟動時, 會先從該記憶體找輔助定位資料. 輔助定位資料可以預先從 http://alp.u-blox.com/ 下載, 資料大小從數 k 到數十 k 不等, 資料最長有效時間約 2 個星期, 依下載的檔案而定.
這 2 種定位方式都可以有效的將定位時間縮短到 20 秒內, FR 硬體設計只支援 AGPS online 的模式. FR 也提供 GPS 外接天線的 MMCX 插座, 當連接外部天線時, 硬體會自動切換訊號成外部的 GPS 訊號來源, 軟體無法知道硬體是使用內部還是外部的天線. 一般市面上的有 MMCX 的 GPS 天線, "原則" 上都可以使用.
使用 A-GPS 功能可以加快定位的速度, 但是無 A-GPS 輔助, FreeRunner 還是擁有 GPS 的功能.

[** 硬體BUGS**]
A5 版硬體 (ATAG 0350) FR 的 GPS 功能有一個已知的問題, 就是 microSD 卡插入時, sd_clk 訊號, 可能會干擾 GPS 天線. 這個問題有兩種方法可以解決, 一個是更換新的 FR kernel driver, 這個 driver 可在不使用 microSD 卡時, 關閉 sd_clk. 一個是在硬體的 sd_clk 及 sd_gnd 腳位加一個電容, 濾掉部分會干擾 GPS 頻率的雜訊. 目前 kernel driver 修正已經套用在所有 2008/7 月後的 kernel, 相關資料, A6 版及以後的硬體, 也都已套用此修正, 請參考: http://wiki.openmoko.org/wiki/GPS_Problems

[基本 GPS 使用及測試]
使用 GPS 前, 必須先開啟 GPS 的電源. 開啟 GPS 電源可以下命令或是從 2008.X 使用者介面上的 Setting �, 開啟 GPS 電源. 然後接著可以把 ttySAC1 的資料吐出 來.

root@om-gta02:~# echo "1" > /sys/devices/platform/s3c2440-i2c/i2c-adapter/i2c-0/0-0073/neo1973-pm-gps.0/pwron
root@om-gta02:~# cat /dev/ttySAC1
W 80040001*26
$GPTXT,01,01,02,ROM CORE 5.00 Jan 09 200$GPRMC,,V,,,,,,,,,,N*53
$GPVTG,,,,,,,,,N*30
$GPGGA,,,,,,0,00,99.99,,,,,,*48
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
$GPGSV,1,1,00*79

如果要檢查是否有得到定位, 可以可以從 ttySAC1 得到 GPS 吐出的 NMEA 資料, NMEA 資料基本的格式是: 項目 - 數據. 簡要的項目說明如下:
$GPBOD - Bearing, origin to destination
$GPBWC - Bearing and distance to waypoint, great circle
$GPGGA - Global Positioning System Fix Data
$GPGLL - Geographic position, latitude / longitude
$GPGSA - GPS DOP and active satellites
$GPGSV - GPS Satellites in view
$GPHDT - Heading, True
$GPR00 - List of waypoints in currently active route
$GPRMA - Recommended minimum specific Loran-C data
$GPRMB - Recommended minimum navigation info
$GPRMC - Recommended minimum specific GPS/Transit data
$GPRTE - Routes
$GPTRF - Transit Fix Data
$GPSTN - Multiple Data ID
$GPVBW - Dual Ground / Water Speed
$GPVTG - Track made good and ground speed
$GPWPL - Waypoint location
$GPXTE - Cross-track error, Measured
$GPZDA - Date & Time

參考這邊可以得到完整 NMEA 的說明. http://www.gpsinformation.org/dale/nmea.htm
由於 NMEA 資料很多, 若你只要定位與否相關資料, 可以cat /dev/ttySAC1 grep GGA , 就可以過濾掉額外的資訊.

[使用 AGPSUI]
Openmoko-agpsui2 是 Openmoko 常用的 GPS 測試程式, 可以以圖形方式, 看到 GPS 訊號強度, 衛星在天頂的位置, 定位詳細資料等. openmoko-agpsui2 可以透過 opkg install openmoko-agpsui2 或是從這邊下載 opkg 檔安裝:

http://t0ny.net/openmoko/opkg/samples/agpsui_0.0+svnr3372-r0_armv4t(3).ipk

下載後, 利用 scp copy 到 FR, 直接執行: opkg install agpsui_0.0+svnr3372-r0_armv4t(3).ipk 接著就可以按下畫面下的 one fix 執行.

Openmoko-agpsui2 的原始程式碼, 可以從: http://projects.openmoko.org/scm/?group_id=127 下載. 但是由於 Openmoko 正在 phase out 目前的 project server 並轉移到其他的 platform (如 google code), 所以你可以這邊 download offline 的 source. 詳細使用 AGPSUI 的方法, 請參考: http://wiki.openmoko.org/wiki/Howto_Test_Your_GPS_with_agpsui

[gpsd 及 TangoGPS]
因為 ttySAC1 對 linux 來說是標準的 serial port, 所以當某一個程式 (如 openmoko-agpsui) 佔住後, 其他程式就無法讀取 GPS 資料. 為了要解決多個程式使用 GPS 的問題, 同時增加客戶端程式寫作的彈性及架構. 所以 community 有人做了一個 GPS 的 daemon, 叫做 gpsd ( http://gpsd.berlios.de/ ). 應用程式可以透過網路連線 (localhost) 方式 (TCP port 2947), 讓多個不同的程式同時取得 GPS 的定位資料. GPSD 相關的說明請參考http://wiki.openmoko.org/wiki/Gpsd#GPS_on_GTA02

TangoGPS ( http://www.tangogps.org/ ) 則是一個使用 gpsd 及 OpenStreetMap/Topo/Aerial 的地圖程式. 它提供了一個類似 2008.X 的 Location 程式的功能, 但是它可以提供更多的定位相關資料, 例如目前速度, 平均速度等. 含還蠻適合運動使用. 要使用 TangoGPS 前, 必須先安裝 gpsd.

root@om-gta02:~# pkill packagekit
root@om-gta02:~# opkg install gpsd
root@om-gta02:~# opkg install tangogps_0.9.3-r1_armv4t.ipk

如果 gpsd 或相關套件找不到, 你可能要把 opkg feed 換到 testing feed (/etc/opkg/*.conf) 安裝完後, 啟動 tangoGPS 前, 必須修改 /etc/default/gpsd �, gpsd 的 tty 設定.

設定成 GPS_DEV="/dev/ttySAC1". 更多的設定 (FSO/others), 請參考 http://www.tangogps.org/gps/articles/7-Installation.html

[使用 A-GPS]
每一間 GPS 廠商都有不同的 A-GPS 實做方法, U-Blox 提供了公開的文件及帳號申請程序, 讓使用 U-Blox 的使用者可以使用 A-GPS 服務. 使用 A-GPS 的流程大致如下:

* 申請 A-GPS 帳號: 發一封主旨跟內容都空白的信, 到 agps-account@u-blox.com 申請一個 A-GPS online 的帳號
* 將 FR 利用 GPRS/Wi-Fi 或其他方式連上 Interent, 利用帳號及目前大略的經緯度, 利用 http://svn.openmoko.org/developers/matt_hsu/agps-online/ 的程式, 連上 U-Blox 網站. 取得 A-GPS 定位輔助資料
* 這個程式會利用 U-Blox 的 binary 指令, 將定位輔助資料送進 GPS 模組
* GPS 模組利用這些資料, 節省搜尋衛星的時間

其他更詳細的方式, 請參閱 http://wiki.openmoko.org/wiki/GTA02_GPS .

2008/12/2

Neo FreeRunner 新手手冊 (6) 使用 Debug Board


Neng-Yu Tu (Tony Tu)

Debug Board 對一般應用程式開發人員來說, 可能並不是十分需要. 但是換個角度來說, Openmoko 擁有完全開放的硬體, 從網路上也可以下載 FreeRunner 以及 Neo1973 的硬體線路圖. 同時, Openmoko 的機器在設計上, 就已經將常用的 debug port 如 JTAG/UART/SPI/I2C 等介面連接到主板上的 Debug Connector, 或是將這些 test point 留在主板上容易接取的地方. 簡單來說 Debug Board 是 FreeRunner 設計完全開放硬體的一部分 ;) 如果要學習或練習嵌入式系統開發, 最好還是有 Debug Board 比較好.


Debug Board 留了 1 個 20 pin 的 JTAG 延伸插座, 以及 2 個 10 pin 的 UART/SPI/I2C 插座, 如果有需要, 焊上這些接頭, 就可以在其他的裝置上使用 Openmoko Debug Board. 不過需要注意的地方是, Debug Board 的 JTAG signaling 是使用 3.3v, 對於一些 1.8v 或 5v 的 JTAG signaling 裝置並不適用.

Openmoko 的 Debug Board 共有 3 個版本, 第 3 版 (v3) 跟前面兩個版本的差別在於: 修改了電源及完全符合 USB 規格的一些設計, 同時也將 FR 上 Debug port 預留的 SPI 及 I2C bus 接出到 Debug Board 上. 同時第 3 版的 Debug Board 也增加一個 GPIO 接腳設定功能, 讓 Debug Board 能透過 pull-high 電路讓 FR 上面的 NOR 可以開啟被寫入模式. Debug Board 的電路圖, 可以從以下網址下載.

http://downloads.openmoko.org/developer/schematics/

若要作 JTAG 和 UART 終端機的 Debug 功能, 這 3 個版本都可以達到一樣的功能. 同時 FreeRunner 預設的 u-boot 環境變數, Debug 輸出是 ttyACM0, 並不一定要使用 Debug Board 才能進行 u-boot 的操控.

Debug board 上有一顆 FTDI FT2232 的晶片, 它本身具備有兩個 UART port, 這個晶片奇特的地方在於它可以透過軟體 (不同的函式庫), 轉換不同的通訊協定 (a little like bitbang), 達到支援 RS-232/482/485, DI/O, Address 或是 JTAG. FT2232 的 JTAG 比 Wiggler 快了大約 20-30 倍, 對於除錯時, 節省大量資料寫入的時間有極大幫助 (例如寫入 kernel 及 u-boot 到 nand flash 中)

目前 Openmoko default 的設定是當成 JTAG (port 1) 及 UART (port 2). 同時, 原本這顆 chip 的標準 USB ID 是 FTDI 0403:6010. 0403 是 FTDI 公司的 USB ID, 而 6010 是依據產品別給的不同 ID.

Openmoko debug board 預設的 USB ID 是 1457:5118. 1457 是 FIC 的公司 USB ID. 而 Openmoko 後期的 Freerunner 使用新申請的 1D50 開頭作為標準 ID.

你可以從下面的網址, 找到所有已註冊 USB.org 的公司/裝置 ID.
http://www.linux-usb.org/usb.ids

或 Openmoko 的 wiki, 也紀錄了使用的 ID 位址.
http://wiki.openmoko.org/wiki/USB_Product_IDs

FTDI 公司也提供了標準的 Windows 驅動程式, 讓你可以在 Windows 利用 FT2232 模擬成雙 UART port 的裝置, 或是一個 JTAG, 一個 UART 裝置. 但是由於 Windows 只認識 FTDI 的 0403:6010 ID, 所以必須修改一下 .inf 檔. 下面可以下載 Windows 下的 FTDI 驅動程式: http://t0ny.net/openmoko/driver/debugboard_win32/

除了 Openmoko 外, Linux 社群也常用另一種類似建立在 FT2232 裝置來做 JTAG, 例如 Amontec JTAGkey: http://www.amontec.com/jtagkey.shtml . 這種裝置比較小巧, 同時支援 1.4V 到 5V 的 JTAG signaling, 常被配合標準公版的 20 pin 插座使用.

[安裝 FTDI lib]

會用到 3 個不同的 package, 分別是 libftdi-dev, libftdi-eeprom, libftdi0, 建議開始使用 Debug Board 前先安裝這些 package.

[連接 FR 的 Debug Output (UART)]

由於 Linux 只認識 Default 的 FTDI 裝置 (0403:6010), 所以 Openmoko Debug Board 需要額外載入 FTDI 的 SIO driver. 利用以下指令可載入 FTDI 的 SIO driver. 請使用 root 或是 sudo 來做 I/O port 設定動作.

root@ubuntu:~# rmmod ftdi_sio
root@ubuntu:~#modprobe ftdi_sio vendor=0x1457 product=0x5118

成功之後會在 /dev 目錄下看到 ttyUSB0 及 ttyUSB1, Openmoko 使用 USB1 作為 UART 連線. 連線參數為 115200, N, 8, 1, no hardware flow control 成功後, 使用 minicom/cutecom 或是 cu 可從 UART 輸出得到 Debug port 輸出資料.

[使用 JTAG]

Openmoko 預設的 JTAG 工具是 OpenOCD + Debug Board . OpenOCD 的功能像是一個 middleware (TCP sever with JTAG protocol), 提供了 JTAG 及 gdb 的介面. OpenOCD 詳細的資料可參考:

http://openocd.berlios.de/web/

OpenOCD 也支援了許多不同的處理器架構, 從 ARM7 到 ARM11 都可以使用, 可以下載原始碼後編譯, 或直接從以下網址下載已經編譯好的執行程式. 同時, OpenOCD 需要 FTDI 的 library - libftdi, 版本需要 0.8 或之後的版本.

http://www.ftdichip.com/Drivers/3rdPartyDrivers.htm#Linux

http://www.intra2net.com/de/produkte/opensource/ftdi/index.php

可試著從前面敘述的 apt-get install 包括 libftdi-dev, libftdi-eeprom, libftdi0,libusb 等必要的 package. 也可以從這

http://t0ny.net/openmoko/util/host/gta02/openocd/ 下載已編譯好的 openocd 執行檔及 openocd 需要的裝置設定檔. 接下來:

<Step 1> 連接 Neo 及 Debug Board, 以及連接 Debug Board 到 PC USB port, 開啟 Neo 電源, 然後執行:

root@ubuntu:~/GTA02-DM1/tmp# ./openocd -f openocd-debugv2.cfg
Info: openocd.c:84 main(): Open On-Chip Debugger (2007-01-31 12:00 CET)

正常執行狀況下, 螢幕會停住在Open On-Chip Debugger (2007-01-31 12:00 CET) 這一行.

<Step 2> 接下來使用 telnet localhost 4444 即可進入 CPU, 透過 JTAG 下 command.

root@ubuntu:~# telnet localhost 4444
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Open On-Chip Debugger


> halt
requesting target halt...
> Target 0 halted
target halted in ARM state due to debug request, current mode: Supervisor
cpsr: 0x60000053 pc: 0x33f8b7ec
MMU: disabled, D-Cache: enabled, I-Cache: enabled
>

<Step 3> 執行需要的 script

OpenOCD 可以透過 script 執行連續的 command, 例如寫入多個不同的位址, 大小的檔案到 NAND/SDRAM 的記憶體中並執行. 命令格式是:

> script "script.ocd"

Openocd 執行檔的下載目錄中, 有一個 script.ocd 範例, 若想要學習如何手動寫 u-boot 到 NAND 記憶體中或更多 script 命令, 請參考:

http://wiki.openmoko.org/wiki/U-boot 的內容.

如果看到以下訊息, 代表 JTAG 連線失敗, 請重新連接 USB, 關閉 FR 電源, 開啟 FR 電源, 按下 Debug Board Reset 鈕, 試試是否可以正常停在 Open On-Chip Debugger (2007-01-31 12:00 CET) 這一行..
root@ubuntu:~/GTA02-DM1/tmp# ./openocd -f openocd-debugv2.cfg
Info: openocd.c:84 main(): Open On-Chip Debugger (2007-01-31 12:00 CET)
Error: jtag.c:1181 jtag_examine_chain(): JTAG communication failure, check
connection, JTAG interface, target power etc.

[打開 NOR flash 的寫入功能]

在 FreeRunner 出廠時, NOR flash 預設是防寫的狀態, 所以即使 NAND flash 裡面的 u-boot 受損, 依舊可按 AUX 鍵及電源鍵, 由 NOR 開機後執行更新 image 的工作. 簡單來說, NOR 裡面的 u-boot 包含以下特性:

* 預設是不可變更的
* NOR u-boot 包含了 u-boot/splash screen/environmental variable 環境變數 (MTD parts, default tty output)
* 開機時按下 AUX 鍵, Samsung stepping stone 會跳到 NOR 執行開機的動作

V3 版的 Debug Board 有提供一個 pull-high 電阻 IO 可以解除 FR 上的 NOR 防寫功能, 這個功能必須要透過一個小的公用程式 norwp 啟動.

norwp 的原始碼可以從 http://svn.openmoko.org/trunk/src/host/norwp/ 下載. 要編譯這個程式, 需要 libusb 及 libftdi . 也可以從下面的網址, 下載編譯過的 binary. http://t0ny.net/openmoko/samples/bin/norwp/

使用這個 Utility 很簡單, 只要連接 Debug Board 及 FR 後, 執行:
root@ubuntu:~/norwp# ./norwp rw

就可以開啟 NOR 寫入的功能, 而:
root@ubuntu:~/norwp# ./norwp ro 可關閉寫入的功能

從 openmoko 的 git server, 可以 download u-boot 及 NOR 版 u-boot 的 source code. http://git.openmoko.org/?p=u-boot.git;a=summary

簡單來說, 用 git clone 下來後, 使用 openmoko 官方的 toolchain 即可編譯出相關的檔案. 關於 toolchain 的用法, 這邊先略過.

2008/12/1

Neo FreeRunner 新手手冊 (5) 透過 sysfs 作硬體開關控制


Neng-Yu Tu (Tony Tu)


在 Openmoko 的官方網頁中, FreeRunner 是基於以下的規格需求所開發出來:
http://wiki.openmoko.org/wiki/Neo1973_GTA02_Hardware

在此網頁中, 包含 3 個重點, 分別是:

* 規格設定條件
* 硬體選擇
* 簡要的改版 - 生產紀錄

簡單來說, 在 FreeRunner 中包含了以下的硬體.

* Samsung S3C2442 B54 MCP (含 64 MB SDRAM, 256 MB NAND), running @400Mhz
* 外接一顆 64 MB SDRAM
* ST 8 MB NOR flash
* NXP PCF50633 04 N3 電源管理 IC
* 2顆 LED, Aux 紅色, Power 藍/橘
* S-Media 圖形加速器
* u-blox 4 A-GPS
* microSD card (插槽) (目前 community 測試最大支援到 16 G 的 SDHC microSD 卡)
* 2 顆 ST 3-axis 的 accelerometer (8G/2G 敏感度及 interrupt 模式)
* Atheros AR6001GZ Wi-Fi, firmware version 2.0.0.89 (Accton module)
* CSR BC4 Bluetooth v2.0 (Delta module)
* USB host (同時可提供 5V power, 不需外接電源)
* Calypso GSM/GPRS modem
* 支援聰明電池 (coulomb battery), 可模擬 HDQ 協定的硬體 GPIO 設計
* 硬體可讀版號, 會對應從 u-boot 傳到 kernel 的 ATAG 值 (0350 = v5 版, 0360 = v6 版)

FreeRunner 的完整電路圖, 也可以從 Openmoko 網站下載:

http://downloads.openmoko.org/developer/schematics/

大部分的硬體, 都可以透過 /sysfs 來作開關及讀取一些基本資料. 詳細的內容, 可參閱 wiki 下的網址. http://wiki.openmoko.org/wiki/GTA02_sysfs 同時, sysfs 對應的位置會因為 upstream 相容性改變, 2.6.28 開始, 因為 upstream 的關係, 目錄位址開始變更. 但是基本使用方式及原則是不變的, 可以用 find 指令來找相關的位置.

舉例來說:

<開關 Aux 鍵的 LED>
要開關 Aux key LED, 可以直接使用以下命令:
echo "255" > /sys/devices/platform/gta02-led.0/leds/gta02-aux:red/brightness
或是
echo "0" > /sys/devices/platform/gta02-led.0/leds/gta02-aux:red/brightness

<讀取電池的充電狀態>
讀取 PMU 的的充電狀態是快充還是其他狀態:
cat /sys/devices/platform/s3c2440-i2c/i2c-adapter/i2c-0/0-0073/chgmode

<讀取電池電量> 讀出的數值以百分比表示
cat /sys/devices/platform/bq27000-battery.0/power_supply/bat/capacity

<讀取硬體版本>
root@om-gta02:~# cat /sys/devices/platform/neo1973-version.0/pcb

利用 sysfs, 就可以利用 script 開關硬體, 或是執行簡單的系統測試. 但是例如像是 wi-fi 模組是直接透過 SDIO 連接, 就無法用硬體的方式 power off 模組, 只能用軟體的方式執行 power off 命令.
 
Creative Commons License
著作 係採用創用 CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款授權.