2009年9月11日 星期五

Linux熱鍵的除錯技巧(1)

筆記型電腦的熱鍵(hotkey)應該可以名列linux的常見問題之一。這裡所謂的熱鍵指得是像Fn+F1、Fn+F2,或是有些筆記型電腦會有專門調整音量大小…等特定功能的鍵。主要因為硬體上常常是各家廠商做各家的,並沒有一套共同的標準,所以每家廠商,甚至每個型號都要特別處理。

這也造成了在linux kernel原始碼中,有著像asus-laptop.c、thinkpad_acpi.c…等,這類專為各大廠不同型號的筆記型電腦處理熱鍵的module,而每個module中又有可能要對每個型號對不同的處理。除了這些modules,甚至連atkbd.c中都有很多的quirk,來處理各種型號筆記型電腦上的熱鍵(forced release key event)。



一種常見的情況是:當按下熱鍵時,既收不到scancode、也收不到ACPI event,看起來就像是linux kernel完全無法從硬體收到任何訊息。但是熱鍵在Windows中是可以用的,所以硬體是正常的。這種情況真是讓人完全找不到頭緒可以從何下手來debug。

不過這樣的bug其實還是有跡可循,我們可先猜測熱鍵是由embedded controller(EC)控制的,利用下列的方法來確認:

首先先找出EC的GPE編號:
$ dmesg | grep EC
ACPI: EC: GPE = 0x11, I/O: command/status = 0x66, data = 0x62


看一下目前interrupt的數字:
$ cat /sys/firmware/acpi/interrupts/gpe11
10608 enabled


此時,按一下熱鍵,再看看interrupt的數字有無增加。如果interrupt的數字增加了,應該就可以判斷那個熱鍵是由EC控制的。

有時候EC也會送一些非熱鍵產生的interrupt,這就只能多靠眼力來觀察。



到這裡,我們就可以把責任歸咎於EC。因為理論上EC是必須要送出scancode或是ACPI event出來的。那麼EC又為什麼不送scancode或ACPI event出來呢?

在一些情況下,硬體製造商希望這個熱鍵的功能是必須安裝某個特定軟體才會啟動。像是某家廠牌的小筆電,必須對某個io port寫入一次,EC才會正確的送出某一個熱鍵的scancode出來。而這樣的「初始化」是寫在Windows平台上特定bundled的軟體中。Linux沒有這樣的軟體,所以熱鍵會無效。

此時我們可以回報原廠,請他們修改BIOS/EC code,讓熱鍵在Linux下也可以正常工作;如果我們知道EC初始化的方式(不過通常一般使用者不會知道),也可以在某支驅動程式中來初始化EC。而另外的作法是寫一個驅動程式,透過kernel所提供的EC的介面來偵測EC的interrupt。

2009年7月26日 星期日

Lenovo Thinkpad X61 Bag of Bad Quality

I had an IBM X40 before. It was a really solid machine. I took it on my way commuting in my graduate school days. I did many works with it on the train.



So, when I need a new computer for my new job, I chose Lenovo X61. Thinkpad doesn't change over the years. Lenovo X61 is as good as IBM X40 (though the electric humming also remains). But it's not for the accessories.

The bag with Lenovo X61 tore after around a week's use.

I came to Lenovo Support Center in Taipei, but they told me that my bag has no warranty due to the lack of the invoice. I bought my X61 on a bidding site, so I didn't get the invoice for that. I also asked Targus, but was told that I had to contact Lenovo for the repair.

Finally, I could just find out my bag for X40 and abandoned the X61 one and don't know how to dispose the torn bag.

2009年6月12日 星期五

My first week in Canonical

I am glad that I am now employed by Canonical.

Moving from a local company to an international company, my first challenge is that I got to communicate with other guys in English orally. I've never spoken so much English words as I did this week.

My boss Hugh Blemings came from Australia and we attended to the FreedomHEC together. He is nice guy and easy to get along with. I hope that I am able to contribute to the Ubuntu kernel as he expects me to in the kernel team.

The most thrilling to me is that the Platform Team Sprint & Distro Sprint are coming in August and September. I can't wait to meet all other guys for so many interesting topics.

2009年5月4日 星期一

離職

我已在2009年4月30日正式離開奇美通訊。在FIH的這一年多來真的是風風雨雨,也見證了一個團隊的興衰。

真的回想起來有好多回憶:FBW project的開始、當FTM leader、出差見證血汗工廠的真相、Android porting、短命的FXP、從BU1搬去BU2、team leader的消失…;其它還有像是抽到鴻海超高級的宿舍、鴻海尾牙、FIH大裁員、三節禮券的消失…

想想還真的經歷了不少事。不過最讓我覺得高興的還是認識了一群一起工作的好伙伴,相信一定會是一輩子的好朋友。



謝謝Acelan、Chris、Eric、Hanson、James、Mask、Neil、兩個Paul、Piny、Stefan、Tim、Wesley、還有Clement、Kenny和Wayne以及其它工作上有接觸的同事、朋友一年多來照顧。