2011/10/15

ch3 Linux網路作業平台的架設與安裝 wireless lan 802.11

第三章、Linux網路作業平台的架設與安裝

第一節、Linux的架設。

Linux1991年四月, 由芬蘭人Linus Benedict Torvalds(torvalds@kruuna.helsinki.fi) 所獨立草創,之後, 歷經無數版本演進, 才漸漸變成一個完整的作業系統,這發展過程吸引了全球的玩家以及部份商業組織的參予。就一個簡便的角度來看,我們可以把Linux視為架在80x86相容PC上執行的UNIX系統。而關於Linux作業系統架設的方法,因為很多地方都有詳細的說明,所以請直接參考各大BBSLinux版的精華區。

第二節、Wavelan Wireless LAN Card的安裝:

無線網路的網路卡,目前還不能算是普及,故一般Linux附的Kernel Image (/vmlinuz)並沒有support這種裝置。因此,若要使用Wavelan Wireless LAN Card就要重新Compile Kernel,且要是較新版本的Kernel才行。就Slackware 3.1.0 Kernel Source來說,其算是 2.0.0舊版的。

 到果茶小站 ftp henry.dorm10.nctu.edu.tw,抓新的linux-2.1.36 kernel source

get /linux/slackware/Kernel/v2.1/linux.2.1.36

mv linux2.1.36.tar.gz /usr/src

cd /usr/scr

將舊版的2.0.0 Kernel Source 備份: mv linux linux.2.0.0

ƒ 解開新的kernle source

gzip -d linux2.1.36.tar.gz

tar xvf linux2.1.36.tar tar zxvf linux2.1.36.tar.gz

因為driver I/O Address是寫死的,要改的話要去改 Source,詳細說明請見(/usr/src/linux/drivers/net/README.wavelan

n [ wavelan.p.h 原來程式片斷]

static unsigned shortiobase[]=

{

#if 0

/* Leave out 0x3C0 for now -- seems to clash with some video controllers. Leave out the others too -- we will always use 0x390 and leave 0x300 for the Ethernet device. Jean II : 0x3E0 is really fine as well... */

0x300 0x390 0x3E0 0x3C0

#endif /* 0 */

}

n [ wavelan.p.h 修改後的程式片斷]

static unsigned shortiobase[]=

{

#if 0

/* Leave out 0x3C0 for now -- seems to clash with some video controllers. Leave out the others too -- we will always use 0x390 and leave 0x300 for the Ethernet device. Jean II : 0x3E0 is really fine as well...*/

0x300 0x390 0x3E0 0x3C0

#endif /* 0 */

0x300 0x3E0

}

make config

make all

make bzImage

這裡必須要特別注意,一般我們只需要make all make zImage就可以了不過實際上這樣make出來的kernel太大,所以會造成失敗的,因此一定要make allmake bzImage;請參考 /usr/src/linux/README的說明

mv /vmlinuz /vmlinuz.2.0.0

ˆ cp /usr/scr/linux/arch/i386/bzImage /vmlinuz lilo

reboot後,螢幕出現

eth0WaveLAN at 0x30008:00:6A:2A:BE:47 IRQ 10

nwid 0x82-96 2.00 2422 MHz

這就表示抓到wireless網路卡。

第三節、linux Device Driver

Device Driver 是在核心中專門管理週邊設備用的,一般使用者的程式,必須經過系統呼叫才可透過核心應用週邊驅動程式來達成任務。核心中的設備表大致上可以分為兩種:

 字元設備轉換表 (Character device switch table)又簡稱cdevsw

區塊設備轉換表 (block character device table) 又簡稱bdevsw

cdevsw表示cdevsw 結構的陣列,而bdevswbdevsw結構的陣列,至於核心如何知道使用者對那一個設備有興趣,完全取決於設備檔案的類別,主要設備識別碼和次要設備識別碼。裝置檔的openclose系統呼叫需經過兩轉換表的其中一個,mountumount系統呼叫也需要用區塊裝置的裝置openclose。字元特別檔的readwriteioctl系統呼叫經過cdevsw的相對應程式。

n 關於open裝置的演算法:

Algorithm open

Input pathname

openmode

outputfile descriptor

{

convert pathname to inode,

increment inode reference count,

allocate entry in file table, user file descriptor,

as in open of regular file

get major, minor number from inode

save context ( algorithm setjmp) in case of long jump from driver

if (block device)

{

use major number as index to block device switch table

call driver open procedure for index:

pass minor number, open modes

}

else

{

use major number as index to character device switch table

call driver open procedure for index:

pass minor number, open modes

}

if( open fails in driver)

decrement file table, inode counts

}

沒有留言:

張貼留言