2008年12月20日 星期六

running 32bit apps on 64bit kernel with nvidia

當記憶體大於 4G 的時候,32bit 的 kernel 雖然可以透過啟動 64G 來 access 所有 memory
但是 PAE 會降低系統效能,此外好像 64bit kernel 的選項比較新 (...好吧,是心理作用...)
非常不准的效能測試:
hdparm -tT /dev/sda
發現 32bit with PAE 大約 36xx MB/Sec 而 64bit 可以跑到 40xx MB/Sec
很爛的測試,知道更好的方法請告訴我...

====== 重點開始 ======

Step 1. 建立 cross compile 環境

# emerge crossdev
# crossdev -s1 -t x86_64

Step 2. 編譯 64bit 的 kernel
編輯 kernel 的 Makefile , 增加下面兩行:
ARCH=x86
CROSS_COMPILE=x86_64-pc-linux-gnu-
接下來如常編譯與安裝即可


Step 3. 編譯 nvidia drivers

到 ftp://download.nvidia.com/XFree86/Linux-x86_64 和 Linux-X86 下載 NVIDIA-Linux-xxxx-pkg1.run

分別以 NVIDIA-Linux-xxxx-pkg1.run -x 解壓縮

複製 X86_64 的 NVIDIA-Linux-x86_64-180.16-pkg1/usr/src/nv/nv-kernel.o 到 X86
( 為什麼知道是這個檔?看 make module 他會說 32bit 無法連結到 64bit 於 nv-kernel.o )

修改 Makefile ,尋找 "make CC="
(可於此執行 make module 就會看到他是這樣呼叫 kernel make 的)

改成 "make CROSS_COMPILE=x86_64-pc-linux-gnu-"
( CC=$(CC) 記得刪掉 )

如常執行 ./nvidia-install 即可

ps. 最好先移除之前安裝的 driver

2008年12月19日 星期五

linux flash 中文亂碼 的解決

安裝了flash播放器,播放正常,但中文全是亂碼,解決方法如下:

打開配置文件:
 cd /etc/fonts/conf.d/
sudo vim 49-sansserif.conf

修改edit節點,將<string>sans-serif</string>
改為 <string>sans</string>

<match target="pattern">
        <test qual="all" name="family" compare="not_eq">
            <string>sans-serif</string>
        </test>
        <test qual="all" name="family" compare="not_eq">
            <string>serif</string>
        </test>
        <test qual="all" name="family" compare="not_eq">
            <string>monospace</string>
        </test>
        <edit name="family" mode="append_last">
            <string>sans-serif</string>     <--- <string>sans</string>
        </edit>
    </match>

2008年12月14日 星期日

Linux 下類似 Windows API Hook 的 LD_PRELOAD 技術

Modifying a Dynamic Library Without Changing the Source Code / 在不更動原始程式碼的前提下,修改動態程式庫


如何得知某個 so 有哪些 function call:
readelf -s /lib/libm.so.6
會列出所有 Symbol table in '.dynsym'

2008年12月12日 星期五

linux 中使用 pptp client 連線到windows vpn server 包含 mppe-128 支援

先說一下 Windows VPN ( PPTP ) Server 連線所需要的通訊協定
* 驗證身份使用 MS-CHAP V2
* 加密使用 MPPE
* 壓縮使用 MPPC

要成功建立連線,至少必須支援 MPPE 才行 ( MPPC 似乎選擇性的?? )

安裝所需軟體:
pptpclient
ppp

kernel 必須支援的選項:
CONFIG_PPP
CONFIG_PPP_ASYNC
CONFIG_PPP_MPPE

在 Gentoo 中 ppp 有一個 mppe-mppc 的 USE,如果需要啟動 MPPC 的話才要使用這個 ( not sure !)

設定 ppp
連線模式與帳號密碼
使用 CHAP 認證,修改 /etc/ppp/chap-secrets 依序輸入 "帳號、*、密碼",例如:
username_ppc52776 * password_ppc52776

peer 雛型可先用 pptp-command 建立 ( /etc/ppp/peers/sinica )
然後加入關鍵的一行設定
pty "pptp 140.109.17.129 --nolaunchpppd"
一定要有這行可以正常連線 !!
再加上給該 tunnel 的額外設定
ipparam sinica

之後可以先用
# pppd call sinica logfd 2 nodetach
看看有沒有辦法正常連線
Using interface ppp1
Connect: ppp1 <--> /dev/pts/7
CHAP authentication succeeded
MPPE 128-bit stateless compression enabled
local IP address 140.109.17.146
remote IP address 140.109.17.141
這樣就表示可以了

測試成功了,往後要連線就可以用
# pon sinica
斷線用
# poff

我的設定檔:
pty "pptp 140.109.17.129 --nolaunchpppd"
lock
refuse-eap (預設會用這個做 auth, 但是現在已經都不能用了)
#require-mschap-v2 (這個要拿掉,不然會變成你要求對方也要跟你認証)
require-mppe-128
name crchang
ipparam sinica

route 設定
編輯 /etc/ppp/ip-up.d/sinica.sh
#!/bin/sh
# $1 = interface name (e.g. ppp0)
# $2 = tty device
# $3 = speed
# $4 = local IP address
# $5 = remote IP address
# $6 = ipparam (user specified parameter, see man pppd)

if [ "$6" == "sinica" ]; then
#vpn server ip 必須還是走本來的 gateway
route add -host 140.109.16.129 gw 192.168.1.10
#屬於中研院網域的 ip 走這個 ppp0 出去而非預設的 eth0
route add -net 140.109.0.0/16 dev $1
fi

ps.
在 Linux NAT 下, 若要用 PPTP 連遠端的 VPN Server,
必需加掛這兩個 pptp module
modprobe ip_nat_pptp (這個似乎不一定要?)
modprobe ip_conntrack_pptp
否則 Windows 在連線時會出現此錯誤:
錯誤 721: 遠端電腦沒有回應。請按 [其他資訊] 或搜尋這個錯
誤碼的說明及支援中心,以取得進一步的協助。
(參考來源:http://pank.org/blog/2008/09/pptp-under-linux-nat.html)

2008年12月3日 星期三

在 firefox 中關聯 ed2k 到 sancho

sancho 是一個連接 mldonkey 下載 p2p 的介面軟體。由於某些原因,firefox 並不能自動把 ed2k 地址關聯到 sancho中.

我們可以手動完成這一工作。 在 firefox 地址欄中輸入 about:config

新建一個Boolean,名字為 network.protocol-handler.external.ed2k,值為 true
新建一個String,名字為 network.protocol-handler.app.ed2k,值為 /opt/bin/sancho
這樣就OK了。這時候點擊一個ed2k鏈接將會出現一個啟動相應應用程序的提示。點擊啟動後, 這個 ed2k 鏈接將會被加入下載隊列。前提是 sancho 必須是已經開啟著的。

如果你想在點一個ed2k鏈接的時候不出現提示,那麼新建一個Boolean,名字為network.protocol-handler.warn-external.ed2k,值為 false

Gentoo Portage 使用小技巧

當使用 Portage 安裝套件時,常常會遇到被 Mask 或是某些 USE 不能使用的窘境
例如 mplayer 的 USE="(-real) 和 realcodecs 整個被 mask
解決方法可以設定 Portage 的行為來強迫使用被 mask 的 package 和 USE

首先說明 /etc/portage 下的設定檔功能:
  • /etc/portage/package.use: 可以設定特定 package 每次安裝時要套用哪些 USE,例如
    app-cdr/k3b -encode -dvdread -mp3 表示安裝 k3b 時都會優先使用後面的 USE 設定
  • /etc/portage/package.mask: 如果你不想安裝某些套件可以在這邊設定
    =media-libs/mesa-7.0.3_rc2 不安裝 mesa-7.0.3_rc2 這個套件
  • /etc/portage/package.unmask: 如果想強迫某個被 mask 的套件來安裝的話再此設定
    =media-video/realplayer-11.0.1.1056-r2 強迫安裝特定版本前面要加 = 的符號
    =media-libs/realcodecs-11.0.1.1056* 後面可以用 *
  • /etc/portage/profile/package.use.mask: 路徑不一樣要注意喔,內容寫法也不一樣!!
    media-video/mplayer -real 這邊 -real 表示要把被 mask 的 real 變成可以安裝
    media-libs/win32codecs -real 這個檔寫法相反請注意
建議要強迫解開被 mask 的套件或 use 的時候最好指定特定版版
因為以後的版本被 mask 的理由可能會變,最好還是 check 一下比較保險

2008年9月29日 星期一

alsa 設定 bluetooth 或是 usb audio 的 dmix

pcm.bluetooth {
type bluetooth
device 00:12:C8:90:AA:3B
}

pcm.bt {
type dmix
ipc_key 1111
ipc_perm 0660
slave {
pcm "bluetooth"
#pcm ""
#period_time 0
#period_size 1024
#buffer_size 4096
}
}

#設定預設的音效裝置,如果不是第一個的話
pcm.!default {
#設定預設播放和錄音的裝置不同
type asym
playback.pcm "usb"
capture.pcm "hw:0,0"
}

pcm.usb {
type dmix
ipc_key 1024
slave {
#pcm "hw:1,0"
pcm {
type hw
card 1
}
period_time 0
period_size 1024
buffer_size 4096
rate 48000
}
}

ctl.usb {
type hw
#card名稱可由 /proc/asound/cards or aplay -l 得知,或是可以寫死 card 1
card "PCM2702"
# card "Intel"
}

#預設會控制的音效裝置
ctl.!default ctl.usb
Related Posts Plugin for WordPress, Blogger...