2010年4月30日

Ubuntu 10.04與sk98lin

前面來點前言,我用的主機板是P5Q-E,這塊主機板不錯,C/P值也頗高,內建的Gigabit LAN Controller是MARVELL,要說差也不差,但Linux內建的Driver(skge/sky2)就是很鳥,因此都得用原廠的sk98lin,但每次kernel一升級,就經常無法編譯通過,這次Ubuntu 10.04同樣遇到了!
因為Ubuntu 10.04還太新了,目前沒google到patch,我所幸自己試著抓抓改改,目前看來應該ok!

安裝時編譯錯誤程式碼如下:
/tmp/Sk98IpXJpMHrIbXnZSVQLQbMS/all/skge.c: In function 『SkGeTestIsr』:
/tmp/Sk98IpXJpMHrIbXnZSVQLQbMS/all/skge.c:1750: error: 『TASK_NORMAL』 undeclared (first use in this function)
/tmp/Sk98IpXJpMHrIbXnZSVQLQbMS/all/skge.c:1750: error: (Each undeclared identifier is reported only once
/tmp/Sk98IpXJpMHrIbXnZSVQLQbMS/all/skge.c:1750: error: for each function it appears in.)
/tmp/Sk98IpXJpMHrIbXnZSVQLQbMS/all/skge.c: In function 『SkGeTestMsi』:
/tmp/Sk98IpXJpMHrIbXnZSVQLQbMS/all/skge.c:1780: warning: passing argument 2 of 『request_irq』 from incompatible pointer type
include/linux/interrupt.h:117: note: expected 『irq_handler_t』 but argument is of type 『int (*)(int, void *)』
/tmp/Sk98IpXJpMHrIbXnZSVQLQbMS/all/skge.c:1790: error: 『TASK_UNINTERRUPTIBLE』 undeclared (first use in this function)
/tmp/Sk98IpXJpMHrIbXnZSVQLQbMS/all/skge.c:1790: error: implicit declaration of function 『schedule_timeout』
make[2]: *** [/tmp/Sk98IpXJpMHrIbXnZSVQLQbMS/all/skge.o] Error 1
make[2]: *** Waiting for unfinished jobs....


注意到,
Q1:
TASK_NORMAL、TASK_UNINTERRUPTIBLE 沒定義

Q2:
schedule_timeout 無法被skge.c直接呼叫

cscope之後發現 TASK_NORMAL、TASK_UNINTERRUPTIBLE、schedule_timeout 都在 sched.h中。

因此,修改 DriverInstall/sk98lin.tar.bz2 壓縮檔中的 2.6/skge.c
(DriverInstall/sk98lin.tar.bz2:/2.6/skge.c)
.....
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,19)
static int __devinit SkGeTestIsr(int irq, void *dev_id)
#else
static int __devinit SkGeTestIsr(int irq, void *dev_id, struct pt_regs *ptregs)
#endif
{
#define TASK_INTERRUPTIBLE 1
#define TASK_UNINTERRUPTIBLE 2
#define TASK_NORMAL (TASK_INTERRUPTIBLE | TASK_UNINTERRUPTIBLE)
struct SK_NET_DEVICE *dev = (struct SK_NET_DEVICE *)dev_id;
.....
static int __devinit SkGeTestMsi(struct SK_NET_DEVICE *dev, SK_AC *pAC)
{
#define TASK_UNINTERRUPTIBLE 2

struct pci_dev *pdev = pAC->PciDev;
.....
SK_OUT8(pAC->IoBase, B0_CTST, CS_ST_SW_IRQ);
SK_IN8(pAC->IoBase, B0_CTST, &test8);

extern signed long schedule_timeout(signed long timeout);
extern signed long schedule_timeout_interruptible(signed long timeout);
extern signed long schedule_timeout_killable(signed long timeout);
extern signed long schedule_timeout_uninterruptible(signed long timeout);

wait_event_timeout(pAC->msi_wait, (pAC->AllocFlag & SK_ALLOC_MSI), HZ/10);
.....


skge.patch
--- skge.old 2010-04-30 20:31:24.502166321 +0800
+++ skge.c 2010-04-30 20:34:07.902165413 +0800
@@ -1732,6 +1732,9 @@
static int __devinit SkGeTestIsr(int irq, void *dev_id, struct pt_regs *ptregs)
#endif
{
+#define TASK_INTERRUPTIBLE 1
+#define TASK_UNINTERRUPTIBLE 2
+#define TASK_NORMAL (TASK_INTERRUPTIBLE | TASK_UNINTERRUPTIBLE)
struct SK_NET_DEVICE *dev = (struct SK_NET_DEVICE *)dev_id;
DEV_NET *pNet;
SK_AC *pAC;
@@ -1768,6 +1771,8 @@
*/
static int __devinit SkGeTestMsi(struct SK_NET_DEVICE *dev, SK_AC *pAC)
{
+#define TASK_UNINTERRUPTIBLE 2
+
struct pci_dev *pdev = pAC->PciDev;
int Ret;
SK_U32 test32;
@@ -1787,6 +1792,11 @@
SK_OUT8(pAC->IoBase, B0_CTST, CS_ST_SW_IRQ);
SK_IN8(pAC->IoBase, B0_CTST, &test8);

+extern signed long schedule_timeout(signed long timeout);
+extern signed long schedule_timeout_interruptible(signed long timeout);
+extern signed long schedule_timeout_killable(signed long timeout);
+extern signed long schedule_timeout_uninterruptible(signed long timeout);
+
wait_event_timeout(pAC->msi_wait, (pAC->AllocFlag & SK_ALLOC_MSI), HZ/10);

if (!(pAC->AllocFlag & SK_ALLOC_MSI)) {


最後附上幾個改過得檔案連結:
skge.patch
sk98lin.tar.bz2

2010年4月8日

台灣~核能發電~再生能源

這篇是我發表在mobile01上的回文,因此同步po在blog上當作台灣能源發展現況的介紹。

核能目前還是效益、乾淨度最高的發電方式。

再生能源很多,目前講得出來的有一堆,但多半都兩個根本上的問題:
1. 穩定性很差
2. 發電效益很差

風力發電是不錯的發電方式,風轉成電的轉換效率不錯,但問題在於,風力發電受限於風,風並不是穩定的一直吹,而是有時大有時小,這會造成發出來的電力有時多有時少,穩定性並不好。
同樣的一點,風力發電的風必須要是穩定吹送的風,風太小不能發電,風太大也不行,所以說,颱風來襲時,風力發電機並不是火力全開,而是全部關閉,否則機組會損壞。

太陽能發電更慘,太陽能發電一樣有穩定性不好的問題,太陽越大發出的電越多,因此晚上不能發電(一天只有一半的時間有機會發電),另外遇到陰天也不大能發電。
那台灣北部,冬天(像現在)會經常有寒流通過,這段時間經常會下雨、陰天,就不適合發展太陽能發電。
令一個太陽能發電的最大問題是轉換效率很差,目前網拍買得到的太陽能發電產品,上面硬的太陽能板轉換效率大概只有15%上下,100單位的光只能產生15 單位的電,很低。
這邊順便可以提一下,有一種太陽能商品,太陽能板是軟的,通常縫在背包或衣服上,看似方便,但那種太陽能板轉換效率只有6%左右。
商業運轉的太陽能發電廠,轉換效率高很多,但也只有26%左右。
考慮到一天只有半天能發電,陰天也不能發電,穩定性差,轉換效率又低,就知道為甚麼台電不很願意投資太陽能電廠了。(儘管如此,基於節能環保的政策,目前台電正在南部蓋一座「世界第二大的太陽能發電廠」(僅次於西班牙),新聞中台電明白說了,主要就是宣示意義,實際上對台電整個發電幫助有限,但未來我們有新景點可以觀光了)

最後,太陽能發電還一個大麻煩,太陽能板是「耗材」,它用久了轉換效率會越來越差,最後就得更換,我到現在都很懷疑,搭太陽能發電板發出的電,一直到它無法運作為止,到底成本能不能攤平。

水力發電不錯,但很不幸的,台灣目前水力發電廠已經蓋到爆炸了,沒地方可以蓋水力發電廠了,台灣的水力發電廠蓋得很誇張,不是一條河一座,是一條河從上游蓋到下游,蓋個4,5座,所以很不幸,水力發電台灣已經做到極限了。

至於其他的發電方式,常聽到的像是地熱、潮汐。
台灣的地熱資源做發電,經濟效益不夠,也就是說,可能電廠蓋起來,發出的電連電廠成本都攤不平。

潮汐發電目前國外有研究,台電n年前有實驗性的去做,目前這些潮汐發電機都爛光了,原因何在?
潮汐發電你要把發電機組放在海上,海水本身有鹽份,會腐蝕發電機組,因此用一段時間(幾年後)這些機組就會被腐蝕生鏽,然後就是損壞無法使用。

目前台灣主要的發電就是核能、火力、水力三種發電方式。
核能和火力為主,原因在於這兩者的穩定性最好,發電量不會忽高忽低,所以台電有個稱呼,叫做「基載發電」,顧名思義就是以這兩種發的電為基礎,供應全台灣用電主要負載。
水力發電在台灣,像日月潭水庫,白天從上游把水沖下來發電,晚上把水打上去放,加上有時水量低,所以發電量不穩定,因此沒辦法當基載發電。

而火力發電廠和核能發電的發電量差很多(水力對火力也是),加上台灣沒汽油、沒煤炭、天然氣少得可憐,所以火力發電並不是很好的選擇,之前有新聞,全台灣的汽油、煤油、天然氣存放場,只夠全台灣用3天(包括火力發電)3天內一定要有油輪、天然氣輪靠港送燃料。前幾年颱風來,滯留台灣,就讓台電、中油嚇很大,就擔心汽油、煤油、天然氣不夠用。

前幾年反核四,核四停工,問題是電會不夠用怎麼辦?結果就是政府發一堆火力發電廠的執照,增加火力發電廠的機組,這樣就是環保嗎?

目前為何西方國家很多都回頭搞核能發電,就因為全世界講減碳,基載發電也就核能跟火力,限制火力發電來減少碳排放,那當然就是發展核能阿!這很清楚明白~

至於反核,西方國家最早講反核,是反「核子武器」,不是反「核能發電」。
每次都會提到車諾比事件,車諾比那個「不是核能發電廠」,是「核子實驗室」,車諾比的核能,是「核子實驗為主,主要生產核子彈原料鈽,發電為輔」,發電只是順便而已。
講白了,爆炸就是做實驗做到爆炸,不是在穩定環境下的結果。目前以穩定發電為主的核能發電廠,全世界都沒有發生過爆炸。
台灣發展原子彈的歷史大家都知道,美國直接派人把我們的實驗機組封了(整個反應爐灌水泥,沒救了),所以我們沒有發展核子彈的能力,也沒辦法發展,核能就是只有發電而已,不搞實驗。

所以,還是把專業回歸專業吧!

最近幾個月有不少有趣的新聞可以注意,像有新聞提到美國有公司提出超小型的核能發電機組,似乎可以小部份修改就替換火力發電的發電機組,這似乎滿有趣的。
另一個新聞就是台灣黑潮,看來似乎比風力、潮汐、地熱、太陽能都有潛力,值得注意。

最後一點,現在有很多假環保之名行欺騙之實的,有板主說的商人,但也有不少團體。
5,6年前風力發電沒現在盛行,就說應該用風力發電,那個環保,現在台灣風力發電機組也蓋了100多台了,就開始出現風力發電不環保的聲音。
正如上幾篇大大提到的,只要是發電,就一定會對環境造成影響,問題是,同樣是發電,當然選對環境傷害小的阿,不能一邊說這個很糟糕,一邊又說那個也不怎麼樣,一定是在兩個裡面選一個比較好的來做吧!每個都有意見就是甚麼都不做,甚麼都不做就會是好的嗎?

我舉個可能不很好的例子,每個人都有排泄物,當只有幾個人的時候,對著河釋放排泄物,河川影響不會很大,但當人數變成幾十萬人的時候,同樣都是對著河釋放排泄物,就變成以前的淡水河。
可是我們甚麼都沒做阿~就因為甚麼都沒做才變成這樣,那所以,就蓋了污水處理廠,接著河水淨化。

這個世界本來就是平衡,凡事過猶不及,當人數少、污染少、數量少時,問題都不大,但是當規模變得很大時,就得要想些方式解決產生的問題。
減碳就是這樣,以前瓦特發明蒸汽機時,誰會想到燒煤炭會搞到地球溫室效應,但當時量事實上也沒有很誇張,近100年來,人類對石化能源的需求,讓地球溫室效應的影像以等比級數在增加,這就可以想見人類對石化能源的使用誇張到離譜,規模大到這種地步,自然就得分散使用其他能源來解決問題。