㈠ linux內核源碼詳解
Linux的內核源代碼可以從很多途徑得到。一般來講,在安裝的linux系統下,/usr/src/linux目錄下的東西就是內核源代碼。
對於源代碼的閱讀,要想比較順利,事先最好對源代碼的知識背景有一定的了解。對於linux內核源代碼來講,我認為,基本要求是:1、操作系統的基本知識; 2、對C語言比較熟悉,最好要有匯編語言的知識和GNU C對標准C的擴展的知識的了解。
另外在閱讀之前,還應該知道Linux內核源代碼的整體分布情況。我們知道現代的操作系統一般由進程管理、內存管理、文件系統、驅動程序、網路等組成。看一下Linux內核源代碼就可看出,各個目錄大致對應了這些方面。Linux內核源代碼的組成如下(假設相對於linux目錄):
arch 這個子目錄包含了此核心源代碼所支持的硬體體系結構相關的核心代碼。如對於X86平台就是i386。
include 這個目錄包括了核心的大多數include文件。另外對於每種支持的體系結構分別有一個子目錄。
init 此目錄包含核心啟動代碼。
mm 此目錄包含了所有的內存管理代碼。與具體硬體體系結構相關的內存管理代碼位於arch/-/mm目錄下,如對應於X86的就是arch/i386/mm/fault.c 。
drivers 系統中所有的設備驅動都位於此目錄中。它又進一步劃分成幾類設備驅動,每一種也有對應的子目錄,如音效卡的驅動對應於drivers/sound。
ipc 此目錄包含了核心的進程間通訊代碼。
moles 此目錄包含已建好可動態載入的模塊。
fs Linux支持的文件系統代碼。不同的文件系統有不同的子目錄對應,如ext2文件系統對應的就是ext2子目錄。
kernel 主要核心代碼。同時與處理器結構相關代碼都放在arch/-/kernel目錄下。
net 核心的網路部分代碼。裡面的每個子目錄對應於網路的一個方面。
lib 此目錄包含了核心的庫代碼。與處理器結構相關庫代碼被放在arch/-/lib/目錄下。
scripts 此目錄包含用於配置核心的腳本文件。
Documentation 此目錄是一些文檔,起參考作用。
㈡ Linux系統一般由哪4個部分組成
linux系統由硬體系統、系統核心、用戶環境、應用程序組成。Linux全稱GNU/Linux,是一種回免費使用和自由答傳播的類UNIX操作系統。
其內核由林納斯·本納第克特·托瓦茲於1991年10月5日首次發布,它主要受到Minix和Unix思想的啟發,是一個基於POSIX和Unix的多用戶、多任務、支持多線程和多CPU的操作系統。
優點
1、Linux由眾多微內核組成,其源代碼完全開源;
2、Linux繼承了Unix的特性,具有非常強大的網路功能,其支持所有的網際網路協議,包括TCP/IPv4、TCP/IPv6和鏈路層拓撲程序等,且可以利用Unix的網路特性開發出新的協議棧。
3、Linux系統工具鏈完整,簡單操作就可以配置出合適的開發環境,可以簡化開發過程,減少開發中模擬工具的障礙,使系統具有較強的移植性;
㈢ vmware中linux怎麼設置網路
如果你的XXX卡沒被內核支持,又怕自己編譯的內核會造成系統損壞就可以試試這個方法嘍 ^_^
vmware三種網路連接上網設置:
1.bridge :
默認使用vmnet0
將虛擬機的ip設置與主機同網段未使用ip,其餘與主機相同:
例如主機ip是10.70.54.31,設置虛擬機ip為10.70.54.22。netmask,broadcast,gateway,dns都與主機相同即可實現虛擬機<--->主機 虛擬機<---->互聯網 通信。
2.nat :
默認使用vmnet8
將虛擬機設置成使用dhcp方式上網,windows下選擇"自動獲取ip",linux下開啟dhcp服務即可
也可以手動設置:
ip設置與vmnet8同網段,gateway設置成vmnet8的gateway(/etc/vmware/vmnet8/nat/nat.conf)中可以查到vmnet8的gateway,通常是xxx.xxx.xxx.2。
netmask,broadcast設置與vmnet8相同,dns設置與主機相同。
例如 vmnet8 ip:172.16.249.1 gw :172.16.249.2
虛擬機設置: ip :172.16.249.100 gw: 172.16.249.2
3.host-only :
默認使用vmnet1
將虛擬機ip設置與vmnet1同網段,gateway設置成vmnet1的ip,其餘設置與vmnet1相同,dns設置與主機相同
例如 vmnet1 ip :172.16.245.1
虛擬機設置: ip :172.16.245.100 gateway :172.16.245.1
這樣就實現了虛擬機<--->主機 通信,但是 虛擬機<--->互聯網 仍無法通信
虛擬機與互聯網通信:
1.開啟主機路由功能
2.設定iptables,使主機成為一台nat server
1. echo 1 >/proc/sys/net/ipv4/ip_forward 這樣就主機就具有了路由功能
2. iptables -t nat -A POSTROUTING -o eth0 -s 172.16.245.0/24 -j MASQUERADE
這條規則意思是將來自172.16.245.0/24封包的來源ip偽裝成eth0的ip,實現虛擬機與互聯網通信
如果網路介面是ppp+或pppoe則需要修改成-o pppoe
當然-s 172.16.245.0/24 也要根據實際情況修改
qemu兩種上網方式:
user mode network :
這種方式實現虛擬機上網很簡單,類似vmware里的nat,qemu啟動時加入-user-net參數,虛擬機里使用dhcp方式,即可與互聯網通信,但是這種方式虛擬機與主機的通信不方便。
tap/tun network :
這種方式要比user mode復雜一些,但是設置好後 虛擬機<-->互聯網 虛擬機<-->主機 通信都很容易
這種方式設置上類似vmware的host-only,qemu使用tun/tap設備在主機上增加一塊虛擬網路設備(tun0),然後就可以象真實網卡一樣配置它.
首先內核中支持tap/tuns設備:
Device Drivers --->
Networking support --->
[M] Universal TUN/TAP device driver support
如果當前內核沒有支持,可以重新只編譯相應模塊加入,方法很簡單:
將當前內核配置文件cp到內核源碼目錄下:
[root@LFS ~]#cp /boot/config-[kernel-version] /usr/src/linux
[root@LFS ~]#cd /usr/src/linux
配置內核,將TUN/TAP選擇模塊(M),如上所示:
[root@LFS ~]#make menuconfig
重新只編譯模塊(M),不編譯核心(*)支持的東東:
[root@LFS ~]#make moles
編譯好後在/usr/src/linux/drivers/net下可以找到tun.ko:
[root@LFS net]#ls -l /usr/src/linux/drivers/net/tun.ko
-rw-r--r-- 1 root root 11116 Mar 23 20:29 /usr/src/linux/drivers/net/tun.ko
[root@LFS net]#
將它cp到當前內核的模塊目錄的相應位置:
[root@LFS net]#cp /usr/src/linux/drivers/net/tun.ko /lib/moles/`uname -r`/kernel/drivers/net
重新建立模塊依賴關系:
[root@LFS net]#depmod
現在就可以載入它了 :
[root@LFS net]#modprobe tun
檢查一下:
[root@LFS net]#lsmod |grep tun
tun 8704 0
[root@LFS net]#
OK. 成功不重新編譯整個內核加入特殊模塊支持
如果你的xx卡不被內核支持,又可以編譯成模塊,自己怕重新編譯內核後出問題就可以用這個辦法只編譯自己需要的模塊,然後手動安裝到相應位置,再載入它。
這樣編譯速度要也比編譯整個內核快,不會對系統有任何損害,就可以使用上XX卡嘍。^_^
要注意三點:
1.內核源碼必須與當前內核版本完全一致,否則編譯出的模塊是不能用的。
2.注意只make moles(編譯模塊),沒有make moles_install(自動安裝模塊到/lib/moles下)
3.載入新編譯的模塊前必須先運行depmod,否則modprobe找不到它
其實使用當前內核配置文件(/boot/config-[kernel-version]),只加入自己需要的模塊,不做任何其他改,make moles_install應該也不會有問題的。
不過最穩妥的辦法還是手動安裝它,控制權在自己手裡更踏實嘛 :-)
OK,轉回qemu上網問題
如果使用udev管理設備(通常2.6.x內核的發行版都已經使用udev),當modprobe tun後就會自動建立/dev/net目錄,並創建出tun設備,做好相關鏈接:
[root@LFS net]#ls -l /dev/net/tun
lrwxrwxrwx 1 root root 6 Mar 25 15:35 /dev/net/tun -> ../tun
[root@LFS net]#
如果很不幸,你沒看到它,就需要自己手動做這些工作了
[root@LFS ~]#mkdir /dev/net
[root@LFS ~]#mknod /dev/net/tun c 10 200
OK,相關設備已經准備好了,還需要一個tun/tap的初始化腳本 :
/etc/qemu-ifup :
#!/bin/sh
/sbin/ifconfig $1 172.20.0.1
再給予qemu-ifup x執行許可權放在/etc下就可以了。
這個腳本只能root用戶執行,如果需要普通用戶使用qemu,就需要改成sudo /sbin/ifconfig .....再設置sudo相關許可權。
啟動qemu後,它會在主機上增加一塊虛擬網路設備(tun0):
[root@LFS ~]#ifconfig tun0
tun0 Link encap:Ethernet HWaddr 0A3:8A:5D:97:CD
inet addr:172.20.0.1 Bcast:172.20.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
[root@LFS ~]#
現在就可以啟動qemu配置虛擬機網路參數了,和vmware host-only一樣:
ip與tun0相同網段,gateway為tun0 ip 其餘參數與tun0相同,dns與主機相同:
tun0 : ip :172.20.0.1 broadcast:172.20.255.255 netmask :255.255.0.0
qemu : ip :172.20.0.100 broadcast:172.20.255.255 netmask :255.255.0.0 gateway:172.20.0.1
與host-only一樣,這樣只實現了虛擬機<---->主機間通信,還需要設置router,nat才可以連上互聯網
[root@LFS ~]#echo 1 > /proc/sys/net/ipv4/ip_forward
[root@LFS ~]#iptables -t nat -A POSTROUTING -o eth0 -s 172.20.0.0/24 -j MASQUERADE
[root@LFS ~]#
OK,虛擬機<--->主機 虛擬機<---->互聯網通信 都完成啦