2008年8月18日 星期一

加入 driver 到 Linux Install CD ~

作者: Baron. Wan


如何將新的 Driver 擺到 Linux 安裝光碟裡, 沒錯, 就是這個囉. 以下就是跟大家分享的內容啦!

在 Linux Install CD 內的 isolinux folder 中, 找到一個名叫 initrd.img 檔案,
# file initrd.img
(initrd.img: gzip compressed data, from Unix, last modified: Tue Nov 20 00:11:12 2007, max compression) 它目前是採用 gzip 壓縮方式.
所以我們必須先將 initrd.img 解壓縮.
# mv initrd.img initrd.img.gz
# gunzip initrd.img.gz
之後再用 file 指令查看目前 initrd.img 屬性為何?
# file initrd.img
(initrd.img: Linux rev 1.0 ext2 filesystem data) 它現在的格式為 ext2 filesystem data
所以我們可以直接 mount 它, 開始感到興奮了吧 !!
# mount -o loop initrd.img /mnt/
上例中, 我將它 mount 到 /mnt 目錄裡.
我們到 /mnt 內看看, 呵呵, 它真的就是我們在 Install 時的安裝環境內容:
bin dev etc linuxrc lost+found modules proc sbin selinux sys tmp var

以上的環境我都是在 CentOS 4 的環境下 try 的, 是不是其他環境也一樣我就沒去考究了, 哈.
有沒有看到 modules 這個 folder ? 進去裡面看看吧... 怎樣, 是不是跟 /lib/modules/`uname -r` 的內容非常像 ?! 根本就是一樣嘛. 到這裡許多有些 Linux 基礎的應該可以想到要如何實做它了. 或許你有這個疑問 ? 怎麼看不到有 .ko 的 module 檔案呢 ? ....

注意這個 folder 裡有個 modules.cgz , 這個檔名怎麼看起來怪怪的, 好像是用 gzip 壓縮的, 沒錯, 它真的是, 嘿嘿.
# file modules.cgz
(modules.cgz: gzip compressed data, from Unix, last modified: Tue Nov 20 00:11:03 2007, max compression)
沒錯吧. 方法一樣...
# mv modules.cgz modules.cgz.gz
# gunzip modules.cgz.gz

現在, 我們再用 file 查詢一下目前這個檔案是甚麼屬性 ?
# file modules.cgz
modules.cgz: ASCII cpio archive (SVR4 with CRC)
OH~ cpio 原來它用 cpio 封裝的.

cpio 指令我是不太熟, 如果有熟悉它這個指令的, 也可以發表一下, 至於我, 是用網站上東拼西湊 ....我不得不說這個指令還真是感到奇怪, 或許是我沒用習慣吧 !
# cpio -idv 接下來把這個 modules.cgz 解壓出來之後, 裡面就是存放 .ko 的 module 檔囉.

上述的指令, 我在 Linux driver to disk 的網站上看到了一個方法:
zcat modules.cgz |cpio -idm
這個方式可以將 modules.cgz 直接解開, 很是方便.

http://hon0612.blogspot.com/2007/09/linuxdriver-disk.html
在上面這個網址, 所發表的內容當中, 讓我對 modules/ 內的那五個檔案, 終於知道是在做啥, 同時也知道應該要怎麼將 driver 正確的加諸到這幾個檔案內容當中:
有興趣的讀者可以到上面的這個網站來去研究一番.

PS. 有時候我會擔心這個網站的資料無故被刪除或消失了?! OH~ 上天知道我是多麼渴望留著這些重要資料, 所以有些時候會將重要的資訊 copy 一份到我這裡, 呵呵~ 以後要查才查的到 ^^*

2008年8月6日 星期三

身陷 JavaScript 的迷瘴

撰文者: PJ. Wan

由於我們公司的 spam mail filter system 在 firefox 使用, 才發現原來當初撰寫許多的語法都只適用在 IE中, 而我又偏偏愛用 Linux (連我公司家裏的電腦都只有Linux系統), 所以狠下心來研究如何將 裡面的 JavaScript 改寫為 firefox 適用. 以下是查看多個網站, 再加上自己實際上得測試, 獲得的一些心得.

document.all 網站上都會說這個語法在 firefox 不受支援, 但或許我用的是 firefox 3版, 我發現並非所有的 document.all 都不能執行, 有些還是需要保留, 像是:
document.all.showDataForm.submit();

當 然, 許多網站上也說明最好是用 document.getElementById 來取代 document.all; document.all 是微軟提供給程式設計者, 針對 IE 的一個好用的函式, 而 document.getElementById 則是符合 W3C 的規格, 這個函式可以看成 get-Element-By-Id , 也就是取得 ID 值; 修改的方式是, 比如: document.all.iPage.value , 對 document.all 來說, iPage 是一個 Name or Id ,iPage.value 就是 iPage 這個 Name or Id 的值.,如果要改為 getElementById , 則必須將 iPage 這個 Id Name 包在裡面, 形成這樣: document.getElementById("iPage").value , 以此類推.

另外, document.all.length 看網站上是說它在 firefox 不受支援, 就在查了許多的網站, 猶如在黑暗中看到一絲光線般的, 終於看到了解決方案 ; getElementsByTagName ; 另外, window.frames("framesname") 則必須改為 window.frames["framesname"] 才能在 firefox 使用, 好, 回到上述 document.all.length 解決方式, 先用 var 產生一個具有 getElementsByTagName('Tag-Name') 的變數, 由於我碰到的狀況是連同 window.frames[] 這個函式, 而我解決的方式是:
var UC = window.frames["FramesName"].document.getElementsByTagName('*');
爾後在程式中可以如下使用:
UC[i].id.indexOF(...)

這樣就可以了.
---------------------------------------------
關於 window.close();
---------------------------------------------

在 Mozilla 底下是正常的
不過如果這個動作必須在最上層的 window 發出
在底層的 frame 會沒有作用

試試 top.window.close();