第三章、Linux網路作業平台的架設與安裝
第一節、Linux的架設。
Linux於1991年四月, 由芬蘭人Linus Benedict Torvalds(torvalds@kruuna.helsinki.fi) 所獨立草創,之後, 歷經無數版本演進, 才漸漸變成一個完整的作業系統,這發展過程吸引了全球的玩家以及部份商業組織的參予。就一個簡便的角度來看,我們可以把Linux視為架在80x86相容PC上執行的UNIX系統。而關於Linux作業系統架設的方法,因為很多地方都有詳細的說明,所以請直接參考各大BBS站Linux版的精華區。
第二節、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 all;make bzImage;請參考 /usr/src/linux/README的說明。
mv /vmlinuz /vmlinuz.2.0.0
cp /usr/scr/linux/arch/i386/bzImage /vmlinuz; lilo
reboot後,螢幕出現
eth0:WaveLAN at 0x300,08: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 結構的陣列,而bdevsw是bdevsw結構的陣列,至於核心如何知道使用者對那一個設備有興趣,完全取決於設備檔案的類別,主要設備識別碼和次要設備識別碼。裝置檔的open和close系統呼叫需經過兩轉換表的其中一個,mount和umount系統呼叫也需要用區塊裝置的裝置open和close。字元特別檔的read、write和ioctl系統呼叫經過cdevsw的相對應程式。
n 關於open裝置的演算法:
Algorithm open
Input: pathname
openmode
output:file 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;
}