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 一份到我這裡, 呵呵~ 以後要查才查的到 ^^*

沒有留言: