2011-01-26

WinDbg 的筆記

Scenario 1
dispatch level > APC level > passive level
看到藍幕時,歡迎使用 bug check codes 看看發生什麼事。
!analyze -v
mov edi,edi 原來是每個函式進入點都有的東西,原因「微軟常常有安全更新,所以這邊可以改成 jmp ...」
一定要會的指令: "!analyze -v", dv, dt, r, db, eb, "?? 變數=值", ub, uf, u, k, kp, kP, bl, bc, bp, bu, bm (/1, /t, /p), x, .logopen, .logclose, .reload
vertarget, !process 0 0, lm, !drvobj, !devobj, !devstack, !devnode 0 1, !irpfind, !vm 1, !memusage, .chain, .trap, .cxr, .tss
!vm, !pool, !poolused, !poolvar, !memusage, !poolfind, !pte

Scenario 2
dt nt!_IRP addr
dt nt!_DEVICE_OBJECT addr
dt nt!_EPROCESS addr
!process 0 0
!process -1 0x1E
!thread -1 0xF
!thread ← 推卸責任的好工具 (誤)
.bugcheck
!verifier 3 SIoctl.sys

Scenario 3
kn
.frame 0
dv /V 可以看到 rsp+xx 的偏移量
ub 再 u 看上下文
啊,找到常見的 ptr = 0; *ptr = 1234; 這種錯。

f3cf6bbc f8b9a878 83a3ec00 00000000 00000420 nt!memset+0x41
!verifier 1
!pool 83a3ec00
上面是 memset(0x83a3ec00, 0x00000420);
從 !verifier 1 可以看到分配的 pool 有多大 (0x400)
然後發現給的太少要的太多 (笑)

Scenario 4
kd> !object \Driver
kd> !drvobj usbhub
Driver object (82931a00) is for:
\Driver\usbhub
Driver Extension List: (id , addr)

Device Object list:
82976918 82900c98
kd> !devstack 82976918
!DevObj !DrvObj !DevExt ObjectName
> 82976918 \Driver\usbhub 829769d0 00000063
8282e618 \Driver\usbuhci 8282e6d0 USBPDO-1
!DevNode 82926648 :
DeviceInst is "USB\ROOT_HUB\4&231024c6&0"
ServiceName is "usbhub"
kd> !devnode 82926648
DevNode 0x82926648 for PDO 0x8282e618
Parent 0x82a7aa68 Sibling 0000000000 Child 0000000000
InstancePath is "USB\ROOT_HUB\4&231024c6&0"
ServiceName is "usbhub"
State = DeviceNodeStarted (0x308)
Previous State = DeviceNodeEnumerateCompletion (0x30d)
StateHistory[09] = DeviceNodeEnumerateCompletion (0x30d)
StateHistory[08] = DeviceNodeStarted (0x308)
StateHistory[07] = DeviceNodeEnumerateCompletion (0x30d)
StateHistory[06] = DeviceNodeStarted (0x308)
StateHistory[05] = DeviceNodeStartPostWork (0x307)
StateHistory[04] = DeviceNodeStartCompletion (0x306)
StateHistory[03] = DeviceNodeResourcesAssigned (0x304)
StateHistory[02] = DeviceNodeDriversAdded (0x303)
StateHistory[01] = DeviceNodeInitialized (0x302)
StateHistory[00] = DeviceNodeUninitialized (0x301)
StateHistory[19] = Unknown State (0x0)
StateHistory[18] = Unknown State (0x0)
StateHistory[17] = Unknown State (0x0)
StateHistory[16] = Unknown State (0x0)
StateHistory[15] = Unknown State (0x0)
StateHistory[14] = Unknown State (0x0)
StateHistory[13] = Unknown State (0x0)
StateHistory[12] = Unknown State (0x0)
StateHistory[11] = Unknown State (0x0)
StateHistory[10] = Unknown State (0x0)
Flags (0x00000130) DNF_ENUMERATED, DNF_IDS_QUERIED,
DNF_NO_RESOURCE_REQUIRED
CapabilityFlags (0x00001602) DeviceD2, SurpriseRemovalOK,
WakeFromD0, WakeFromD2
kd> !devnode 82926648 1
DevNode 0x82926648 for PDO 0x8282e618
InstancePath is "USB\ROOT_HUB\4&231024c6&0"
ServiceName is "usbhub"
State = DeviceNodeStarted (0x308)
Previous State = DeviceNodeEnumerateCompletion (0x30d)

2010-08-29

古蘭經 plugin

給 blogger.com 用的 plugin:
1. 選擇設計版面→新增小工具

2. 選 HTML/JavaScript

3. 填進這些值 (請從下面剪貼):


<style type="text/css">
#quran {width: 200px; border: 0px;}
</style>

<div id="quran">
<script src="http://220.133.42.47/quran.php" type="text/javascript" charset="UTF-8"></script>
</div>

4. 儲存,預覽:

5. 最後別忘了存檔哦!

2010-08-18

詞頻列表

昨天寫信給張裕宏老師請安,今天就被 assign 作業了 ... 要生出台灣和大陸的詞頻列表,各22000個詞咧! (撞牆)
趕快來筆記一下:
中研院語言所 現代漢語語料庫詞頻統計
《八十七年口語問卷詞頻資料庫》 ... 區分國小國中高中大學。DBF 格式 (dBase III) 配上倚天中文造字檔! 真懷念。決定不用。
教育部國語詞典簡編本 詞頻表

國語詞典簡編本的統計樣本不知道有哪些。最常用的前十個詞列出來給大家看看: 我們、「台灣」、可以、自己、他們、沒有、因為、可能、如果、問題。
台灣的詞頻排第二名!!! 這個樣本可能完全是報紙、特別是第一疊嚴肅新聞版的! (那「我們」為什麼會在報紙出現呢?)

中研院語言所的沒分單音節詞和多音節... 前十個是: 的、是、一、在、有、個、我、不、了、這。
前12個多音節詞是: 我們、自己、他們、因為、什麼、問題、所以、沒有、台灣、學生、公司、表示、如果 ..
中研院的語料確實以書面為主,所以口語最常用的「因為、所以、沒有、如果、可是、但是」沒排在最前面。
但是「台灣」排第九,還是很令人驚訝! 書面文章裡這麼常提到台灣嗎?

47m 個漢字的 SUBTLEX-CH:中文字頻/詞頻/標注詞頻(PoS)
基于网页的词频统计 基本上是不堪用的。
Lukhnos 提供的 Lancaster Corpus of Mandarin Chinese 詞頻
最重要的: 人民日報的一直找不到!!!

2010-07-23

編譯及執行 Edk2

很多地方都有教學了,只是記在這裡備忘:
1. 抓下 Edk2
2. 修改 edksetup.bat 加上 set CYGWIN_HOME=D:\cygwin
3. set EDK_TOOLS_PATH=D:\edk2\10578\BaseTools
4. edksetup.bat --nt32
5. build
6. build run

2010-04-30

PHC-WIN + WinBinder 的小技巧

最近因為需要在 Windows 下寫一點小工具,於是想起了久久沒用的 RoadSend PHP compiler 。
RoadSend 不錯用,不過最近的版本好像 GTK 支援壞掉了,而且要使用者裝 GTK library, 好像不太友善,於是轉而尋求其他方案...
WinBinder 是套 PHP 的 Win32 API Binder,很好用,速度蠻快的,寫起程式也很直觀,反正都在 Win32 下了,就別想什麼可攜性吧 (笑) ,用用 Win32 API 和 COM 快速解決問題就好。
除了 RoadSend 之外,我找到了 Bambalam Compiler 和 PHC-WIN。
bamcompile (Bambalam Compiler) 一般情況下很好用,對 WinBinder 的支援很好,產生出來的 EXE 檔不大,只支援 PHP4。實際使用時,發現它處理太大的資料時 (我要把一個幾千行的 excel 檔讀進來,排序,輸出) ,會直接當掉。
PHC-WIN 0.3.1 是可用的選擇,優點是支援 PHP5,處理很大的 excel 也很穩定,但缺點是需要把以下檔案連同 EXE 檔包成一塊...
php5ts.dll
php_bcompiler.dll
php_win32std.dll
php_winbinder.dll
php-embed.ini

一下子目錄就多了 5MB, 感覺蠻差的,但至少可以把事情做好...

有個小技巧可以節省空間:抓 Alec Gorge 包好的 DLL 檔,可以省到 3MB,檔案也只要4個:

myprogram.exe
php-embed.ini ← 記得要修改
php5ts.dll ← 這是 Alec Gorge 的
php_bcompiler.dll

記得 php-embed.ini 裡要把其他 DLL 檔拿掉,改成這樣:

[PHP]
extension_dir='./'
extension=php_bcompiler.dll

此外,由於 PHC-WIN 還在開發初期,有一些小技巧可以讓開發更順利... 我可是被它的小 bug 卡住整整一個工作天呢!

技巧1: 砍掉備份檔,只留 .php -- 如 vim 的 *.php~
技巧2: 砍掉 .phb 檔 -- 重編譯不一定會覆蓋! 砍掉比較保險
技巧3: 發佈前先 copy 到別台電腦測試 -- 少掉很多「明明在我這裡跑得動」的對話
技巧4: 移除 PHP 安裝 -- 不要再用 installer 了,免得載入哪一版 DLL 傻傻分不清。
技巧5: 主檔案叫 myprog.phpw 然後把 WinBinder 裝好,節省開發時間。記得用 c:\winbinder\binary\php4\php.exe myprog.phpw 來測試,不然很多錯誤訊息看不到...
技巧6: 和 bamcompile 一樣,但不知道為什麼 PHC-WIN 的手冊沒寫得很清楚。以下是 WinBinder + Excel Reader 的引入檔...

function exe_resource($file)
{
return defined('EMBEDED') ? 'res:///PHP/'.strtoupper(md5($file)) : (getcwd()."/$file");
}
include_once(exe_resource('./wb_windows.inc.php'));
include_once(exe_resource('./wb_generic.inc.php'));
include_once(exe_resource('./wb_resources.inc.php'));
include_once(exe_resource('./oleread.inc.php'));
include_once(exe_resource('./reader.php'));

祝大家開發順利啦!

2010-03-30

不可靠的 compiler

最近連續好幾個被 compiler 陷害的 bug ... 公司內有 MRC Code 用 Visual Studio 2003 的 VC++ compile 出來的東西,加一行減一行就看不到 bug 的問題; CPLD code 重新 compile 後 bug 就不見的問題,我自己做的玩具也被 8051 用的 SDCC 害到。公司的不便多說,先講講 SDCC 害人的情況。

主要是,程式寫好後用模擬器 (S51DEMO) 怎麼跑都OK,但一燒上 AT89S51 就不會動,hang 在 serial_init() 的位置。動用 /* 註解 */ 大法,終於找到問題出在一行 char str[] = {} 宣告:

__code unsigned char str[] = {
0x12, 0x33, 0xf0, 0x33, 0xf0, 0x12, // H
0x24, 0xf0, 0x24, // e
// ...
0x00 } ;

重點在 __code。如果不加的話,SDCC 會把它 compile 成 __DATA 很詭異地賦予初值,然後 AT89S51 就當在這了:

; kbd.c:168: unsigned char str[] = {
mov _main_str_1_1,#0x12
mov (_main_str_1_1 + 0x0001),#0x33
mov (_main_str_1_1 + 0x0002),#0xF0
mov (_main_str_1_1 + 0x0003),#0x33
mov (_main_str_1_1 + 0x0004),#0xF0
; ...
mov (_main_str_1_1 + 0x0024),#0x00
; 誰能告訴我為什麼 8051 執行過這邊就當掉 =.=

加了之後,就會是和其他字串常數一樣正常的 assembly code:

_main_str_1_1:
.db #0x12 ; 18
.db #0x33 ; 51
.db #0xF0 ; 240 ?
.db #0x33 ; 51
.db #0xF0 ; 240 ?
.db #0x12 ; 18
; ...
.db #0x00 ; 0

2008-09-11

[好站]用各種語言實現演算法

Gentoo : Intel® Pentium® 4 Computer Language Benchmarks Game
很有趣,OCaml 其實還蠻快的,Python/PHP/Ruby 自然慢得不得了,Scheme 竟然很慢(怪!) 但 LISP SBCL 非常快!
有兩個語言出乎意料:
Isaac
Smart Eiffel
該找時間研究一下...

2008-09-06

DOS下使用flat mode的好工具 -- Watcom C

部門的專案要在 DOS 下存取 ACPI Table。依據 ACPI Specification 3.0b,ACPI Table 首先是在 F000:0000-FFFF 段中放一段 RSDP,由 "RSD PTR " 標示 RSDP 進入點,從那找到 XSDT (32位元位址,通常在 0x7Fxx_xxxx) 後,再查到 FADT 及 DSDT 。由於 XSDT, FADT, DSDT 都在32位元位址,偷懶的我自然想找些 DOS Extender 來處理,不想自己切進保護模式。
我首先想到的是 djgpp 。一直以來 djgpp 用得十分順手,像這樣:

char x = _farpeekb(_dos_ds, 0xFFFFFFE4); 或是
movedata(_dos_ds, base, _my_ds(), (unsigned)buf, len);

可是,不知道為什麼,只要存取到 0x7F 位址,SIGSEGV 馬上就跑出來,查了 ds selector 的範圍,一切都 OK ,但程式就是動不了。
爬文爬了很久,有人用 Borland C++ 編出來的程式能動,但我不想裝 Borland C++. 靈機一動,想起 DOS4GW ,上網一找果然 Watcom C 已經釋出成為免費軟體了,改名叫 Open Watcom

照著範例寫一寫,32-bit flat mode 真的很棒,像這樣:

char *ptr = (char *)0x000FFFEA;
char x = ptr[0];

這樣就可以存取了耶,讚!因為這樣我就可以

for(i = 0; i < len; i++) buf[i] = ptr[i];

了,簡捷易懂,而且以 Watcom C 的強大最佳化能力,應該不會和 djgpp 的 movedate() 差多少。

Watcom 的編譯是另一個問題。DOS 下編譯器的開關百百種,Makefile 也是各家不同。Turbo C 和 GNU Make 很不同,Watcom 也有自己的 wmake 格式。此外,32-bit flat mode 可以選的 DOS extender 非常多種,但同樣的 ACPI 程式,用 CauseWay 一樣會 SIGSEGV,但用 DOS4GW 和 PMODE/W 卻非常 OK。幸好,Open Watcom 附上了一個 IDE, 可以幫忙設定幾個旗標,再配上 sample 目錄下的 makefile, 很快就可以做出自己想要的效果了。
Watcom 的 makefile 長這樣:

LNKOPT = option quiet system pmodew
exes = oemid.exe pmbase.exe
all : $(exes) .SYMBOLIC
@%null
oemid.exe : oemid.obj
wlink $(LNKOPT) name oemid file oemid
.c.obj :
$(CC) $^& $(CFLAGS)

天啊! 什麼鬼... 還好有 sample 可以參考。把 LNKOPT 的 pmodew 換成 dos4g, 就可以做成用 DOS4GW 的執行檔了。

選用哪個 extender 也得比較比較。djgpp 預設使用 CSDPMI,沒事帶著幾個 DPMI run-time 挺煩人的。DOS4GW 一叢大大 200 多 K, 一樣讓人心情不佳。DOS/32A 很棒,但 PMODE/W 更棒更小,整個程式做完只要 30K ,不需外掛 run-time. 使用 extender 省下的切進切出保護模式的時間,也實在是讓人夠開心了。

最後講一些 djgpp 和 Watcom 的差異。這困擾了我幾個小時...
makefile 不同是小事,反正我都寫些小工具,大不了寫批次檔。差異都是些討厭的地方,像..

djgpp:

asm { "cli" }
outportl(0xcf8, i & ~3);
x = inportl(0xcfc);
asm { "sti" }

movedata(_dos_ds, RSDP+24, _my_ds(), XSDT, 4); /* 32位元位置 = 4 bytes */

Watcom:

__asm { "cli" }
outpd(0xcf8, i & ~3);
x = inpd(0xcfc);
__asm { "sti" }

#define PTRPTR(x) (char *) *(char **)(x)
XSDT = PTRPTR(RSDP+24); /* 存取指標的指標 */

這點比較起來,Watcom 的似乎比較 ANSI 一點呢! 可是啊,我真是太~~愛 djgpp 的 AT&T 式組語了。真好用。這下要切回 MASM 相容模式,還需要一點點適應的時間...

2008-08-22

DOS 下使用 NetBIOS

有經過 DOS 時代的人應該不陌生,所以只是寫在這裡留個紀錄。程式不知道還受不受版權保護,所以先不放上來...
config.sys:
DEVICEHIGH=\NET\PROTMAN.DOS /i:\NET
DEVICEHIGH=\NET\B57.dos
DEVICEHIGH=\NET\NTSTS.DOS
DEVICEHIGH=\NET\DLSHELP.SYS
DEVICEHIGH=\NET\DIS_PKT.DOS

autoexec.bat:
NETBIND.COM
SET TCPHELP=A:\NET
SET ETCDIR=A:\NET
set wattcp=a:\net\wattcp.cfg
\NET\NET START /YES /COMPUTERNAME:*
\NET\NET.EXE USE X: \\server\dir

2008-08-14

在 Aspire One Linux 安裝 VirtualBox

即使 Linux 桌面已經很好用了,還是難免有需要用到 IE 、網路銀行、電子下單等等功能的時候,所以安裝一套 VirtualBox 再裝個 Windows XP 或 2000 應該是再好不過的選擇了。恰好,宏碁今天早上釋出了 Aspire One Linux 用的 2.6.23.9lw 的 kernel source ,我們正好拿來試試。
先說個題外話。他們剛釋出原始碼不久,我就接到宏碁請託本公司某部門的人來電關切,說大家可以認識認識,有什麼需求當面比較容易談清楚。不過既然原始碼都放出來,也就不用見面了,廠商客戶雙贏,挺好的。

安裝有一些要點: (1)需要 vboxdrv.ko (2)要把 user 加進 vboxusers 群組 (3)之前關掉 swap 的人記得先暫時加回去。以下分項說明。

先去下載VirtualBox,選擇 Fedora 8 (i386) 版,進 terminal 中 rpm -ivh VirtualBox-1.6.4_33808_fedora8-1.rpm 。這時候一定會看到無法編譯 kernel module 的訊息。沒關係,我們下一步就要處理。

編譯 vboxdrv.ko
先講正規的做法。首先,去 Aspire One 的FTP站下載核心原始碼。建議下載到裝在桌機的 Linux 再編譯...
由於他們使用 zip 壓縮,symbole link 被還原了,所以其中有一個目錄得先砍掉,否則不能編譯。假設你下載到另一台 Linux 上的 /usr/src ,解開來,然後輸入以下命令:

# unzip ~/Aspire_One_Linpus_Linux/Aspire_One_Source/linux-2.6.23.9lw.zip
# cd linux-2.6.23.9/
# cp ../config_080627 .config
# cd include
# rm -fr asm
# cd ..
# make oldconfig
# make bzImage modules

編譯完後,把整個目錄 tar 起來 copy 到 Aspire One 上面,或是 rsync 一下... 然後,為了編譯 vboxdrv 需要再安裝一些套件:
yum install make gcc

最後執行
/etc/init.d/vboxdrv setup
就解決了。
我知道這些步驟對一般 user 來說不容易,所以準備好編譯完的檔案,請下載後,輸入
tar zfx vboxdrv.tgz -C /
就裝好 vboxdrv.ko 了。

修改執行環境
打開編輯器,修改 /etc/group ,找到下面這行,然後加上 user:
vboxusers:x:502:user
需要重新開機。

安裝 Guest OS
安裝前,記得進 terminal ,掛進剛剛做好的 module 。如果你按照前幾篇關掉了 swap,這時候最好先加回來... 建議! 如果你在桌機上裝好再 copy vdi 檔過來,就不用加 swap 了。

su -
/etc/init.d/vboxdrv start
/etc/init.d/vboxnet start
# 要加 swap 的話請打下面 4 行. 這樣才不會傷害脆弱的 SSD? (誤)
cd /media/disk
dd if=/dev/zero of=swap.1 bs=1k count=1024k
mkswap swap.1
swapon swap.1

然後在桌面上按右鍵選「系統→Sun xVM VirtualBox」,用 user 的權限開進去。
建議先在桌機上安裝,安裝好後再把 .vdi copy 進來。安裝需要一點時間...

有圖有真相:


切 Virtual Disk 的時候記得指定 /media/disk/xp.vdi ,不然它還是會寫進 SSD 裡。


快照資料夾順便改一下:


要從網路芳鄰 share CD-ROM 再安裝雖然可以,但還是比較建議先在桌機裝好再說:


如果出現這個畫面,表示你忘了 /etc/init.d/vboxdrv start:


裝吧裝吧~~


繼續努力~~


開起來了! 耶~


補充說明
如果要外掛 USB 硬碟,或許你需要 ntfs 驅動程式... 試試
yum install ntfs-3g

如果你在桌機安裝,建議先把 Storage Expansion 裡的 SD 卡拿到桌機再 copy vdi 檔,不然你會覺得 Aspire One 好像當掉一樣,但事實上... 我也不確定當了沒。在桌機 copy 一整個 4GB 的 vdi 檔到 SD 卡,約需要 13 分鐘。

賀! 宏碁釋出 kernel 原始碼

需要的人請到 ftp://Guest@csdftp.acer.com.tw/ 下載。
晚一點來把它 compile 起來... 然後把 VirtualBox 包一包吧~~:D

2008-08-08

調校你的 Aspire One (Linux) #8 - 雙螢幕顯示

因為有 xrandr 的關係,雙螢幕顯示再容易不過了。Aspire One 上的雙螢幕顯示出處在此,我只是翻譯整理一下。
以下設定要改動 /etc/X11/xorg.conf ,請小心使用,以免開不了機。真的改壞了,用任何一張 Linux LiveCD 開起來再改回來就好。

接投影機一般是 1024x768, 接 19" 液晶螢幕一般是 1280x1024, 把掃瞄頻率定在 60Hz. 修改 xorg.conf, 把倒數第 3 行的 Virtual 1024 600 改成 Virtual 2304 1024
上面幾行有一個 Modeline "1024x600", 在那下面加上

Modeline "1024x768" 64.11 1024 1080 1184 1344 768 769 772 795 -HSync +Vsync
Modeline "1280x1024" 108.88 1280 1360 1496 1712 1024 1025 1028 1060 -HSync +Vsync

如果覺得麻煩,請到這裡下載我的 xorg.conf

雖然 Aspire One 手上冊說外接螢幕前必須重開機,可是實驗發現,可以不用重新開機,直接使用下列命令:

xrandr --output VGA --right-of LVDS --mode 1280x1024

把 1280x1024 改成 1024x768 就適用於投影機了。
VGA 指的是外接螢幕,LVDS 指的就是筆電上的 LCD。如果要回到原來的單螢幕,只要下:

xrandr --output VGA --off

更多 xrandr 的使用方法請看這裡
這兩行 Modeline 的產生方法是從這裡看來的,使用以下命令:
gtf 1024 768 60 # 60Hz

Aspire One 不支援 --rorate 命令,算是美中不足之處。

調校你的 Aspire One (Linux) #7 - MSN

官方的 IM 在失效後 3 天終於放出更新了! 不過,我們可以改用其他同樣是開放原始碼的 IM ,才不用等待官方修正的時間。
建議安裝 emesene: 在桌面按右鍵,選「新增/移除軟體」,點「搜尋」並輸入 "emesene",打個勾,就安裝好了。
M$ 在 7/20 左右更改了 MSN protocol (這也是宏碁的IM之前失效的原因吧?),所以我們要修改一下:
sudo sed -i.bak 's/09607671-1C32-421F-A6A6-CBFAA51AB5F4/CFE80F9D-180F-4399-82AB-413F33A1FA11/g' /usr/share/emesene/emesenelib/XmlTemplates.py

想要修改桌面上的捷徑嗎?用編輯器打開 /usr/share/applications/acerim.desktop ,找到 Exec=UIM 改成 Exec=emesene 就可以了。記得重新開機 reload 桌面哦!

調校你的 Aspire One (Linux) #6 - Firefox 3

安裝 Firefox 3 的方法,原出處在 Acer Aspire One User Forum
簡言之,到官網下載 Firefox 3.0.1 (或更新版本),然後 alt-f2 進 terminal 後打指令:

tar jfx firefox-3.0.1.tar.gz -C /opt
cd /usr/bin
mv firefox ff2
ln -s /opt/firefox/firefox
# 不安裝 plugins 的話不用打下面這兩行
cd /opt/firefox/plugins
ln /usr/lib/mozilla/plugins/* .

就搞定了。Firefox 的 Cache 會存在 ~/.mozilla/firefox/... 裡面,這樣有幾個問題 1.可能比較慢 2.沒裝 Storage Expansion (左手邊插的SD卡) 的話,會操到 SSD 。如果你很在意這個問題,並且沒那麼在意浪費一點網路頻寬,那可以做下面的修改...
  1. 打開 Firefox
  2. 在網址列打 about:config, 在空白的地方按右鍵新增機碼。
    新增「字串」 browser.cache.disk.parent_directory 填入 /tmp
    新增「真假」 config.trim_on_minimize 填入 true

剩下調校效能的設定,像 turbo 或 pipeline 請參考來自火星maggie的秘密花園

Firefox 的 plugin ,建議安裝 Adblock Plus 和 Flashblock ,否則一開起來就很吃資源。
Firefox 操作介面的字型大小,在 ~/.mozilla/firefox/*-default/chrome 裡可以修改,可是我有點改不動... 有心得再貼上來。

調校你的 Aspire One (Linux) #5 - GNU parted

注意! 請插上 AC 電源後再操作。
我們把 swap 關掉後,空出來的 1GB 可以不理它,也可以另外切成 partition 掛在某個目錄下。如果你一定想要把原來的 /dev/sda1 擴大到整顆 SSD 的話,就需要使用 GNU parted 。帝國反抗君寫了一篇很實用的文章,照著他的步驟操作,格式化一顆 32MB 的隨身碟,放進 GNU parted,裝上 syslinux ,放到 Aspire One 上開機... 就可以直接擴大分割區了。
擴大約需 30 分鐘(很傷 MLC SSD, 嗚~~) 擴大後,我目前的分割區如下:

[user@localhost ~]$ df -h
檔案系統 容量 已用 可用 已用% 掛載點
/dev/sda1 7.4G 2.7G 4.5G 37% /
none 755M 0 755M 0% /dev/shm
none 755M 184K 755M 1% /var/tmp
none 755M 48K 755M 1% /var/log
none 7.4G 2.7G 4.5G 37% /mnt/home
/dev/mmcblk0p1 7.6G 221M 7.4G 3% /media/disk
posix-overlay(/media/disk)
7.6G 221M 7.4G 3% /tmp/posixdir

2008-08-07

調校你的 Aspire One (Linux) #4 - tmpfs, swap

如果你的 Aspire One 安裝超過 1GB (建議 1.5GB) 的記憶體,才要使用本節的內容。
首先,把一些常用的快取目錄掛上 tmpfs ,tmpfs 相當於 ramdisk ,存取速度很快、又可以保護脆弱的 MLC SSD。
試了很久,可行的做法如下:進 terminal 後 sudo 成 root, 修改 /etc/fstab 檔

none /var/tmp tmpfs defaults,mode=1777 0 0
none /var/log tmpfs defaults 0 0

並在 swap 所在的那行前面打 # 如 # /dev/sda2 swap ...
(註: /var/tmp 不打 mode=1777 也可以,事實上 /etc/rc.d/rc.last 裡每次開機都會重新設定權限。)

如果你看了 Ubuntu 的討論串,就會像我一樣很想把 tmpfs 也掛上 /tmp. 可惜我試了幾次,都沒成功... 直接把 none /tmp tmpfs defaults 0 0 放進 /etc/fstab 是不行的,在 vim /etc/rc.d/rc.last,加上 mount none /tmp -t tmpfs -o mode=1777 ,乍看之下很 OK,可是重開機後卻只能進 X ,看不到桌面啟動。
經過一番 trace, 似乎是因為沒有 /tmp/.x11-unix/X0 的關係,所以桌面沒有啟動 (/home/user/.bash_profile) ,但我們看到在 rc.S 裡,/tmp 早就 mount 成 tmpfs 了,只是我們打 mount 時看不出來而已。測試一下這個說法:

free
dd if=/dev/zero of=/tmp/test bs=1k count=20k
free

很好,這證明了/tmp 本來就是 tmpfs ... 我們不用再辛苦一次

調校你的 Aspire One (Linux) #3 - 右鍵選單、輸入法、livna

建議先使用宏碁提供的還原光碟,將 Aspire One 還原到出廠值。外接 USB 光碟約需20分30秒。
還原後,開機,在桌面上按 alt-f2 打 xfce-setting-show 。桌面→行為→按下右鍵時顯示桌面清單,打勾。這樣以後就可以在桌面上按右鍵直接使用 XFCE 的選單。
做兩次「即時更新」(需重開機兩次),但自從 7/20 MSN 又改 protocol 後,他們的 IM 應該已經不能登入 MSN 了。建議按右鍵→系統→新增移除程式,找到 emesene ,按裝起來後再按 alt-f2 打 terminal ,並剪下貼上這段字:
sudo sed -i.bak 's/09607671-1C32-421F-A6A6-CBFAA51AB5F4/CFE80F9D-180F-4399-82AB-413F33A1FA11/g' /usr/share/emesene/emesenelib/XmlTemplates.py

嘸蝦米輸入法的使用者,請想辦法製作出 liu.bin (或是... 網路上找找做好的?XD) 為了節省資源,請修改 SCIM 的偏好設定,把不要的泛用輸入法表格拿掉。這樣做其實只會移除 /home/user/.scim 裡的備份,所以別擔心,隨時可以再加回去。
我裝的 liu.bin 是按 starjou 的方法,把 uni*.tab 都放了去進。雖然 SCIM 不支援 ,,j ,,c ,,ct 但仍然可以直接打。請參考這篇

Livna 是一個額外的套件包,會讓一些不適合包進 Fedora、不夠自由的軟體也能透過 yum 安裝。下載 livna

wget http://rpm.livna.org/livna-release-8.rpm
rpm -ivh livna-release-8.rpm

裝好後,新增/移除程式就會多一些可選套件了。

調校你的 Aspire One (Linux) #2 - 更新 BIOS

注意! 更新 BIOS 可能造成電腦無法開機,需要送回原廠修理。雖然燒壞 BIOS 應該在保固範圍內,但世事難料,小心比較好。
1. 使用 USB 隨身碟或 USB 軟碟,格式化成開機片。USB 隨身碟可以用 HPUSBFW (使用請參考這篇) 格式化。
2. 做好後,去抓 BIOS 0.3114,解壓縮到隨身碟
3. 打開 Aspire One,按 F12 從 USB 開機,就可以順利更新了。

調校你的 Aspire One (Linux) #1

隨手寫一寫,做做記錄。宏碁採用 Linpus 我認為是個錯誤,但仍然有些優點,讓我在灌完 Ubuntu 後又重新灌回 Linpus Linux Lite 的桌面。
  1. Linpus 桌面開機只要 20 秒,全部 load 完約 40 秒,很快。對我這種一定要關機、每週充放電一次的愛護電池的人來說,快點開機關機很重要。Ubuntu 預設安裝開機要超過一分鐘,全部開完至少 90 秒。看著硬碟燈拼命亮,就一種 MLC 漸漸死掉的感覺...
  2. Linpus 預先調校過省電問題,雖然 Ubuntu 也可以調,但是要改不少地方。既然都要大改特改,那我直接從 Linpus 下手比較快,也順便了解一下它快速的理由
我希望不要講太深,畢竟不是每個人都是 Linux Guru,Guru 也用不上我的文章。如果有有心人願意把我寫的東西,轉寫成更大眾化一點(再花些心思拍圖或寫 install script),十分歡迎,只要你遵守本blog的版權聲明(CC)即可。

給宏碁鼓鼓掌! Kernel 仍未釋出

本來以為爭取原始碼的動作需要更長的努力,結果才 4 天,宏碁就放出原始碼了。我正在下載,晚一點會驗證,並 build 一些 AspireOne 用的套件放上網路。宏碁願意遵守 GPL ,給他們鼓掌!

您好:
有關Aspire one AOA110 Linpus linux source code,可至以下ftp site 下載
ftp://Guest@csdftp.acer.com.tw/
若您有任何問題或建議,歡迎聯絡我們,我們將竭誠為您服務.
宏碁客服中心 敬上


Acer MSN (acerim) 還是不能登入,沒關係,裝 emesene 就好...
Kernel Source 還是沒放出來! 得持續要求宏碁才行。

P.S.為了他們沒放原始碼的事情,我試著寫信聯絡中研院的開放原始碼論壇 (OpenFoundry), 結果 contact 信箱竟然退信...