Thursday, June 03, 2010

Linux kernel & driver

最近在弄 Linux Kernel 跟 driver,幸好不是從頭開始弄,不然還真不知道從何開始。拜這個所賜,總算對 Linux 開始有一點點的瞭解。

跟一般嵌入式系統不同,Linux 是有虛擬記憶體的,所以處理起來反而麻煩許多,因為嵌入式系統不但需要管 kerenl,連 application 都得自己處理,如果沒虛擬記憶體的話,application 直接 link kerenl 的 function,很好用。但是 linux 就不能這樣搞了,雖然據說 linux 也可以不支援虛擬記憶體,但是好像很少人這麼做。

linux 上的 compiler 設定跟 windows  的也不太相同。不過也不能這樣說啦,因為在 Windows 最多編譯 application,而這次可是編譯 kernel 跟 application。所以很多奇奇怪怪的 complier 設定都得碰,像是 weak reference 跟 ATAG。Linux kerenl 的初始化都是在 compile time 就決定了,相對 trace code 變得很困難。

Friday, March 19, 2010

上班雜感

最近上班心得很多啊,公司內大概有快 100 個寫軟體的吧,不過真正有程式人的意識的,應該不會超過一半吧。這點在台灣實在很可悲。

對話1:

A:這個東西規格開這樣好不好?這樣定你應該程式會比較好寫吧?

我:ㄟㄟ…。

OS: 喂,這東西是要給客戶用的耶,客戶只在乎這東西好不好用,不會在乎你程式好不好寫好不好?難怪連公司內部也沒幾個人會用你的東西…。

對話2:

B:你的程式會造成我的東西爛掉耶。

我:可是我只是呼叫你的 API 啊,而且我的程式碼都沒改,改的是你的程式,我要怎麼幫你看?幫你 debug 你的程式嗎?

OS:x大的耶…怎麼會是這付德性。有聽過微軟要使用者幫它 debug Windows 的 bug 嗎?

所以他們寫的程式實在很鳥,鳥到上層應用程式的呼叫方式還得配合他們定的方式才行,不然他們不負責 debug,我剛進公司的時候,最常聽過的一句話:『可是 xxx 應用程式不會啊』。廢話!因為 xxx 應用程式是你們寫的,球員兼裁判,程式怎麼寫都不會出現問題啊。只要應用程式不是依照某個流程,有問題就自己想辦法吧。這種方式在客戶有求於你的時候,當然是可行的,不過客戶應該也是敢怒不敢言吧。一旦公司競爭力下降,或是競爭對手能力上升,應該會很慘吧。

最近要幫他們寫個轉換工具,結果他們的思維還是一樣:『我們有提供轉換工具喔,不過格式要照我們定的格式才可以轉換成功』。我聽到差點昏倒。

轉換工具存在的前提是客戶不需要改動任何程式碼,就可以轉換過去新平台。今天你還要客戶改程式才能套用轉換程式,那客戶直接把程式改完就好了啊,幹嘛要你的轉換程式?況且,用一些文字編輯軟體來作文字替換也是同樣可以達到相同的目的,那這個轉換工具存在的意義到底在哪裡?難道只是可以跟客戶宣稱『嘿嘿,我們有提供轉換工具喔』。

Monday, January 04, 2010

AutoShutDown

自動關機程式。因為電腦有預約錄影的關係,所以自動開機完之後如果沒開啟錄影程式就得自動關機,不然電費就很貴了…。

之前找了很久,不是要錢就是不合需求,後來在這裡 http://plog.tcc.edu.tw/post/530/8256 找到合用的,它是用 windows 內建的 shutdown.exe 加上排程完成需求。不過有個缺點就是會強制關機,不會詢問使用者…常常電腦用到一半就強制關機了。

所以因緣際會下就自己寫一個吧,其實沒有花很多時間,只是寫程式時需要很專心罷了。

需求:

  • 可以分每週的哪一天,那個時候關機。
  • 不需安裝。
  • 開機自動執行
  • 要關機前先等30秒,之後沒回應自動關機。

自動關機是呼叫 ExitWindowsEx() 或 InitiateSystemShutdown(),不過 InitiateSystemShutdown() 有範例可以抄。

開機自動執行很簡單,直接寫 registry 就行。不過在 Windows Vista/7 可能行不通。目前應該不會用 Windows 7 啦,實在太貴了。

config 檔案是用 xml 格式,parser library 用 xerces,好像有點牛刀殺雞?

結果花比較多時間的是透過 WMI 取得系統資訊…。

下載地點:http://cid-1afa215285f12424.skydrive.live.com/self.aspx/.Public/AutoShutDown.7z

codeblock