星期日, 12月 06, 2009

Cross-Compiling Made Easy - with Gentoo Linux

用 Gentoo 最開心的地方,就是它非常的 developer friendly。

交叉工具鍊 - Cross-Toolchain

個人認為這個翻譯很糟糕... 不過要在 Gentoo 下要生出一個可用的 cross-compiler,只需要兩行指令:

$ sudo emerge crossdev
$ sudo crossdev -t ARCH-VENDOR-OS-LIBC

請將 ARCH-VENDOR-OS-LIBC 取代成對應的軟硬體設置,具體請參考 `crossdev -t help`。

不過在這之前,最好先有個本機上的 PORTDIR_OVERLAY. 不然 crossdev 會建立一些檔案根目錄在 PORTDIR_OVERLAY 裡面找到的第一個目錄下。您可以用以下指令直接修改 /etc/make.conf(注意單引號跟雙引號):

$ sudo bash -c 'echo PORTDIR_OVERLAY=\"/path/to/overlay \${PORTDIR_OVERLAY}\" >> /etc/make.conf'

雖然要等一段時間,不過過程可是全自動的!

做完以後,就會得到一整排的工具了。例如 ARCH-VENDOR-OS-LIBC-{gcc,g++,as,ld,strip,...} 等等。

目標檔案系統 - Target Filesystem

基本上也是三個指令,不過要等更久...

$ sudo emerge crossdev-wrappers
$ sudo emerge-wrapper --init
emerge-ARCH-VENDOR-OS-LIBC system -v

然後系統就會出現在 /usr/ARCH-VENDOR-OS-LIBC 目錄下了。注意喔,千萬別把它移走!即使移走也要作個 symlink 回來,不然 cross-emerge 會找不到路徑。

星期五, 12月 04, 2009

接觸不良

由於憂鬱症的關係,我從大約四個月前開始服用 惠氏速悅持續性膠囊(Effexor XR),其主成分為Venlafaxine。醫師開給我的處方劑量,由一開始的每日一顆,逐步增加到目前的每日三顆。

藥本身還算有用,下面做成清單不是為了賣弄我知道 html 的 <ul> 與 <li> 標籤,純粹只是我討厭在一長段文字裡面敘述這種明明做成清單就可以一目了然、寫成一大段就看得不清不楚的概念:

  • 每日 75mg:30% 療效
  • 每日 150mg:50% 療效
  • 每日 225mg:70% 療效

這裡的「療效」指的是,我自認與正常沒有神經病的人相比的相似程度 - 之於我也就是可以在固定的時間固定的事情,以及不會莫名其妙就想些雜七雜八事情的能力。

但是... 雖然醫生有給我開連續處方籤,但是你不能期待一個神經病會自己去拿藥來吃是吧?所以每隔一個月左右,我總會有幾天想吃藥卻沒藥吃的時候(例如現在 XD)。

服用高劑量卻突然「斷糧」的結果,是會有突然停藥的強大副作用 @@ 感覺就好像是類比電視突然被突波干擾,畫面瞬間跳掉又回來那樣。可是這種狀況發生在你的視覺、聽覺、觸覺上。

唔...「為什麼你不去拿藥吃就好了呢?」


btw,照這個比例來講我吃五顆就會變成超人了是吧?

星期四, 11月 26, 2009

rtc-davinci-evm for dm6446 on linux-davinci.git

中文版

從 2.6.27-davinci1 開始,由於引進了新的 i2c framework,導致 dm6446evm 上許多走 msp430 的週邊都不能用了,例如 rtc-davinci-evm 與 IR receiver 等等。到今天 2.6.32 都快 release 了,還是沒有人把 driver port 過去...

沒辦法,公司產品需要,所以咧... 只好自己動手啦!(這也是 Open Source 社群最有趣的地方!)

悲慘的是,寫好 driver、測試成功以後,居然 linux-davinci 的 mailing-list 不給我寄 @@ 所以只好先放在公司的 git repository 上啦。不過這個網址只是暫時的,也許過一陣子會改...

English Version

Start from 2.6.27-davinci1, linux introduced the new i2c framework, which causes many peripherals of the msp430 chip on dm6446evm stop working, such as rtc-davinci-evm and the IR receiver. As for today, although the 2.6.32 is about to get released, but the driver is still stays unusable...

Too bad, my company just uses dm6446 in our product, which I just have to port them by my own! (Which is the major fun for an Open Source community!)

But what bothers me is that, after I successfully wrote the driver, and verified it's working great, I cannot submit it on the linux-davinci mailing-list due to some unknown error (used to be able to send a mail there...) @@ so i just have to put the files on my company's local git server. However this is a temporary domain name, it may or may not be changed later, anyway.

星期三, 9月 16, 2009

Calm down, please. My heart!

If sorry is all you gonna say, I've heard enough.

Yes, like you can never do nothing for me.
Damn me.
Yes, like you just never willing to do nothing for me.
Damn me, once again.

You'll never have no idea how much you ruined my life.
You'll never have no idea how much you messed up my mind.

How can you be so mean?
How can you be so selfish?
How can you be so fucked up?
Why are you bothering my heart whenever I finally got some calm and peace?
Why can't you just tell me that you don't even wanna give a shit about me at all?

Why do I still love you so damn much?

星期一, 8月 31, 2009

救災順利!成功救活四名專題做不出來的學弟!

我大學時代的專題老師,今年叫學弟們做 ARM Linux + RFID 相關的專題,主要是用來管理冰箱裡面的東西的保存期限的。

可是呢,這群學弟...

「ARM 是什麼?可以吃嗎?」
「Linux 我們不太會耶!」
「RFID Reader 只有 Windows driver (還是 VB.Net 寫的) 耶,可以拿去 Linux 上編嗎?」

所以,不知道他們從哪裡找到我,突然來問我要怎麼辦。

我想說,既然是以前的專題老師,要是這組學弟做不出來或做的不好,他也很丟臉... 而且順便也想看看 RFID 在 Linux 上到底會不會動,所以就決定下去台中一趟幫他們看看。

不看還好,一看之下才發現,他們使用的 ARM 是 s3c2410 配上一套有夠舊的 Linux(kernel 是 2.4.x......),可是使用的 SUMMIT U-Reader 在我的機器上倒是抓的到也有 driver,只是沒有 user-space tool 去 access 它而已。所以我乾脆就叫他們說,先在 PC Linux 上做,然後把移植到 arm 上當成一個「願景」。盡量使用嵌入式系統上容易找到的軟體(如 boa),如果真的要移植的話也比較方便。

SUMMIT U-Reader 其實是一個 pc210x 的 USB-to-RS232 晶片,加上他們自己家的 HF 讀卡模組(使用 RS232 介面,Windows 的 VB.Net 程式也是使用 Serial subsystem 去 access)。既然如此,事情就簡單啦!我只要弄個 serial 程式去操作它就可以了!

我目前幫他們寫到可以抓到卡號,讀取以及寫入 RFID Block 就要靠他們自己了。以下是 example code(BSD License!):

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>

#include <iostream>

#define TTYDEVICE "/dev/ttyUSB0"
#define BAUD  B19200

int open_port(void)
{
 int fd = open(TTYDEVICE, O_RDWR | O_NOCTTY | O_NDELAY);
 if (fd == -1)
 {
  perror("open_port: Unable to open " TTYDEVICE);
  return fd;
 }
 fcntl(fd, F_SETFL, 0);

 // port settings
 struct termios options;
 tcgetattr(fd, &options);
 cfsetispeed(&options, BAUD);
 cfsetospeed(&options, BAUD);
 options.c_cflag  |= (CLOCAL | CREAD);
 options.c_lflag  &= ~(ICANON | ECHO | ECHOE | ISIG);
 options.c_oflag  &= ~OPOST;
 options.c_iflag  |= (INPCK | ISTRIP) & ~(IXON | IXOFF | IXANY);
 options.c_cc[VMIN] = 0;
 options.c_cc[VTIME] = 10;
 tcsetattr(fd, TCSANOW, &options);

 // clear I/O buffer
 tcflush(fd, TCIOFLUSH);

 return fd;
}

int main()
{
 // get the file descriptor from open_port()
 int fd = open_port();

 // I/O buffer, let it be the 'I' command initially
 char buf[256] = { 0x1b, 'I', '\r', 0 };

 int n;

 // write() the 'I' command
 if ((n = write(fd, buf, 3)) < 3)
  std::cerr << "write() of 3 bytes failed!\n";
 else
 {
  std::cout << "write() " << n << " bytes: ";
  for (int i = 0;i < n;++i)
  {
   std::cout << "0x";
   std::cout.width(2);
   std::cout.fill('0');
   std::cout << std::hex << static_cast<int>(buf[i]) << ' ';
  }
  std::cout << std::endl;
 }

 // read the result  n = read(fd, buf, 255);
 if (n < 0)
  fputs("read() failed!\n", stderr);
 else
 {
  std::cout << "read() " << n << " bytes: ";
  for (int i = 0;i < n;++i)
  {
   std::cout << "0x";
   std::cout.width(2);
   std::cout.fill('0');
   std::cout << std::hex << static_cast<int>(buf[i]) << ' ';
  }
  std::cout << std::endl;
 }

 close(fd);

 return 0;
}

星期一, 3月 30, 2009

Bug wranglers know this bug by heart now

之前更新 gcc-4.3.3-r1 之後,編 mplayer 會吐 ICE 出來。今天 emerge world -ua 的時候看到 gcc-4.3.3-r2,在裝之前想說看一下 ChangeLog 有沒有修好這個 bug:

27 Mar 2009; Peter Alfredsen -gcc-4.3.3-r1.ebuild, +gcc-4.3.3-r2.ebuild: Revbump with broken patch disabled to stop duplicates of bug 262567 from flowing in. Bug wranglers know this bug by heart now.

這個 #262567 file 的就是這個 bug。點進去看一下... 挖咧!二十幾個 duplicates = = 難怪 Bug wranglers 會 know this bug by heart 了 XD~

底下是一段 Quote:

At last, rev-bumped.

Btw, maybe all those duplicates are not the user's inability to search, but their ability to tell you "please *always* rev-bump fixes that are not build-related to the package itself" :P

- Nikos Chantziaras

星期四, 3月 26, 2009

言論自由

阿克頓勳爵曾經說過:「我不喜歡你的言論,但我誓死保護你的言論自由。」

若查證「郭冠英」就是「范蘭欽」屬實,那麼他的確該下台,因為他違反公務人員應行政中立的基本規範。但是「范蘭欽」發表的文章倒是沒有任何問題,那是言論自由。雖然美國有針對種族歧視言論的法律,但是很抱歉中華民國剛好沒有... 所以他也沒犯法。

我不懂的是這些新聞媒體幹嘛拿「高級的外省人」做文章,這也沒什麼大不了。很多產品不是也會在包裝上寫「高級蜜餞」或「高級水果禮盒」嗎?那這些廠商是不是也通通要上新聞接受批判一下?況且他只有說「我是高級的外省人」而已,不知道這些媒體是從哪裡得來「台灣人是低級」的結論。你說「這是部好看的電影」或「這是本內容豐富的書」的時候,也不表示其他的電影不好看、其他的書沒內容啊...

另外,蔡英文同學,言論自由是憲法保障的,不是你說有就有,你說沒有就沒有的好嗎?

星期五, 2月 13, 2009

宅心禪機

台灣知名宗教團體法鼓山創辦人聖嚴法師,於台北時間中華民國 98 年(西元 2009 年)2 月 9 日因病圓寂。

雖然我本身並沒有宗教信仰,雖然我沒有參加過法鼓山辦的活動,雖然我也沒上過「你可以不必自殺網」(唔,偶爾想自殺的時候應該去逛逛...),不過衝著這幅字還是得悼念一下:

「面對宅、接受宅、處理宅、放下宅」- 法鼓山 聖嚴法師

誰能告訴我為什麼上聖下嚴大法師要把「」寫成「」呢?我搜遍 Google 也找不到一個地方寫兩個字形可以相通的...

星期三, 2月 04, 2009

New Weapon - HP Pavilion dv5-1003ax

最近,我終於受不了了那台四年前買的 NB。是的,我還是很喜歡它 - 它輕巧、方便攜帶、沒有惱人的鏡面螢幕、可以跑 Composite Desktop、效能也不差(至少是我可以接受的速度)。可是它的 512MB DDR-333 * 2 漸漸地不敷使用,開始吃起 swap;螢幕右下角有約 7 個 pixel 的亮塊;硬碟 SMART 也跟我說有一堆 bad block reallocated、電池的使用時間也只剩不到五分鐘...

所以,我很苦惱。這台機器我很願意多用兩年,但是 firefox 多開幾個分頁(嗯... 30~50 個 XD~)就一直 thrashing 是沒辦法接受的事,硬碟開始有壞軌也總是讓人心慌慌(雖然跑 dd if=/dev/zero of=/dev/sda 叫 SMART 修好了),電池只剩五分鐘根本帶不出門(走到門口就沒電了嘛 Orz...)。如果想繼續用下去,就非得換掉這幾個東西:

  • RAM 升級到 DDR-333 1GB * 2 ~= $2500
  • 2.5' PATA HDD or SSD ~= $2000 or $5000
  • 電池也得買新的 ~= $2500
可是這麼一來,價錢等於 1/3 ~ 1/2 台新筆電了,可是... 我還是繼續在用舊電腦,實際感覺得出來有差別的可能只有不會那麼 thrashing = = 所以我一直在這三個念頭上打轉:
  1. 不升級不夠用...
  2. 不想花錢升級統統都舊規格 (DDR-333、IDE PATA) 的東西...
  3. 買新的又有點浪費,畢竟舊的升級尚且堪用...

於是我就問我老爸,請他出個意見,看我應該怎麼辦才好。結果我親愛的老爸很豪邁的說:「哎唷,你那台機器也是三年多四年前買的,不要傷腦筋了。媽咪店裡也剛好需要一台機器,你就換台機器,這台給她吧!」

唔... 既然這麼說,那還是換一台好了,把舊電腦換個硬碟給我媽(我後來把 Windows Vista 的授權貼紙都撕起來貼過去了... 開門做生意別留下把柄才是。)。我比較了市面主流的 CPU 跟 GPU,最後決定挑 AMD PUMA 平台的機器,主要是這幾個原因:

  • 之前 nVidia GPU 有設計瑕疵,焊接的表面會因為鄰接材質膨脹係數不同,熱脹冷縮太多次有機會脫焊,造成硬體故障。雖然 nVidia 宣稱已經修改了設計,但是誰知道晶片裡面是怎樣的呢?所以不考慮 nVidia GPU。
  • Intel CPU 雖然耗電量較低,但是與 AMD 相比同時脈下速度較慢,價錢也較貴。什麼?你說買 2 開頭的?別鬧了,至少也要買 5 或 8 開頭的好嗎,2 開頭實在太舊了啦!雖然 8 開頭的價錢可以壓到三萬,但是都是搭配 Intel GMA,所以還是算了。而不考慮 nVidia GPU 的話,就統統剩下 Intel GMA,不會搭配 ATi 的卡了...
  • AMD CPU 雖然比較耗電,但是他的優點就是便宜肉大塊... 搭配 ATi 顯示卡,效能比 Intel 好多了... ATi 顯示卡的 linux 支援也越來越好,且頻頻對社群釋出善意。之前還放出 r500/r600 的 open source driver(不過... 嗯... 話說 intel driver 一直都是 open source 的 ="=)。
  • 4GB 的 RAM!常常編東西的人,thrashing 的話就等到死。反正現在 RAM 這麼便宜,就插到滿吧!但得注意別買到打不開 memory remapping 的機器(例如我媽那台,插 4GB 用 3GB 還蠻囧的)。
  • 雖然我老爸好像還蠻有錢的,但是也別浪費... 預算放在 NTD $25,000。

本來看上的是 MSI PX210,但是如果配上 ZM-80 要 $29,000,超出預算太多。HP tx2506 似乎也不錯,但是要 $28,000,也是超出預算,而且顯示卡只有 Radeon HD 3200。

最後挑來挑去,買了 HP dv5 1003ax,$25,200 帶回家。詳細的規格如下:

  • CPU:AMD Turion X2 Ultra Dual-Core Mobile ZM-82 @ 2200Mhz
  • RAM:Transcend DDR2-800 2GB x 2
  • GPU:ATI Radeon HD 3450 with GDDR2 256MB
  • HDD:TOSHIBA MK3252GSX - sATA2 320GB 8MB buffer
  • DVD:LightScribe SuperMulti DVD+/-/RW with Double Layer support
  • Display:15.4' 1280x800
  • 其他不重要的週邊:
    • Vermico WebCam
    • SD/MMC/MS/XD Card Reader
    • Fingerprint Reader
    • HDMI、eSATA、Firewire、遙控器
  • Battery:6 cell
  • Weight:2.83 KG
  • 不得不買的 Windows Vista Home Premium(沒 Activate 過,序號貼紙被我撕給原本那台了)

安裝 Linux 的時候遇到一些問題,能解的都解決了,剩下指紋辨識器沒 driver... 安裝時遇到的問題與解決方法紀錄在 Gentoo Wiki,主要是 kernel module 設定,沒有太多 Gentoo specific 的東西。其他 distro 應該有很多用的上的地方才是。

星期五, 1月 02, 2009

Hackintosh, Psystar, and Apple

林檎公司在 2006 年的時候,逐漸將小麥們都改成 Intel 平台。如此一來,以往 x86 上的作業系統統統可以拿去小麥上面跑,程式本身不需要作任何修改,只需要多加一個用 EFI 模擬 BIOS 的 bootloader 就好了。

如此一來,就有很多人想說,既然硬體大部分都相同,我是不是可以把 Mac OS X 裝到一般的 PC 上咧?結果是可以的,只要透過很小的修改,就可以把 Mac OS X 裝到你自己去光華商場拼(血拼、拼湊)來的電腦上。

後來又有一家公司做了個叫 EFi-X 出來,把這個東西插在主機板的 USB 擴充埠上,就可以直接啟動官方的 OS X Kernel。更有 Psystar 公司,就直接在 online store 販售預裝 Mac OS X 的桌上型電腦。

但是「將 Mac OS X 裝在非林檎神發售的硬體上」這件事情,本身是違反 Mac OS X 的 EULA 的,所以於是就鬧上了法院

一件事情合不合理,只要先把這件事情抽象化,將邏輯提煉出來以後,再帶入其他對應的實體即可。以這次的例子來說,讓我們這樣代換一下:

某罐頭廠商在販售自家鮪魚罐頭的時候,附上了一份 EULA,裡面寫著「請勿將本罐頭以非本罐頭廠商出售的食譜作成菜餚」以及「若開啟此罐頭,表示接受本授權協議。」芸芸。可是某個歐巴桑自己在做菜的時候用到這個罐頭,又不是罐頭廠商出的食譜的指定菜單。於是,這家罐頭廠商有權力告他,因為他違反本罐頭的 EULA。如果罐頭廠商勝訴,這位歐巴桑以後都不能用這個罐頭做菜以外,還可能必須賠錢給罐頭廠商。

另外,又有一家食譜出版社,因為覺得這個罐頭還不錯,所以針對這個罐頭設計了一系列的菜單,並且販售食譜。於是罐頭公司可以告這家出版社,因為罐頭公司誘使使用者將罐頭使用在自家提供的菜單以外,侵犯了罐頭公司的利益。

如果作個代換...

  • 「罐頭公司」改成「Apple 公司」
  • 「鮪魚罐頭」改成「Mac OS X 作業系統」
  • 「食譜」改成「硬體」
  • 「製作成菜餚」改成「安裝作業系統」
  • 「食譜出版社」改成「Phystar」

恩... 無限上綱。