Linux Kernel 2.6 核心執行緒嚐鮮(轉)

post0發表於2007-08-10
Linux Kernel 2.6 核心執行緒嚐鮮(轉)[@more@]

(1)安裝redhat9.0,如果你能夠把glibc更新到2.3,其他老版本的rh也可以.

(2)到kernel.org下載最新的kernel 2.6.0-test4

(3)編譯核心,2.6核心編譯命令變化不大,只是不用make dep了,而且螢幕顯示也簡捷了好多:

# make menuconfig

# make

# make modules_install

# make install

這樣就可以了

然後執行lilo

(4)2.6核心的module改變很大,所以要安裝更新過的modutils,否則lsmod/modprobe都不能用了

地址: ftp://ftp.kernel.org/pub/linux/kernel/peo.../rusty/modules/

我是拉了個src rpm,

#rpmbuild --rebuild modutils-xxx-.src.rpm

然後到/usr/src/redhat/RPMS/i386下面去找哪個rpm檔案升級就可以.

(5)重新起動~~,選擇新的核心 開始祈禱~~念 "剝落菠蘿密" 100遍就夠了.

(6)看看起動的時候有什麼錯誤,因地制宜的解決之~~~一般多是模組問題,我為了偷懶,重要的模組都編譯到核心了.

(7)現在你的rpm可能用不來了,沒關係,在執行rpm之前

export LD_ASSUME_KERNEL=2.2.5

就可以了.也可以加入/etc/profile,一勞永逸.

(8)接下來轉換/etc/modules.conf檔案了

generate-modprobe.conf /etc/modprobe.conf (基本沒用,如果你都編譯到核心了的話)

(9)建立Sysfs,抄襲自老外的,基本也是可有可無,因為偶還不知道Sysfs是什麼di幹活~~~.

Sysfs file system

Step 1:

Create directory /sys.

Step 2:

Where it says:

mount -f /proc

in /etc/rc.sysinit, add:

mount -f /sys

on the next line.

Step 3:

Where it says:

action $"Mounting proc filesystem: " mount -n -t proc /proc /proc

in /etc/rc.sysinit, add:

action $"Mounting sysfs filesystem: " mount -n -t sysfs /sys /sys

on the next line.

Step 4:

Add:

none /sys sysfs defaults 0 0

to /etc/fstab.

Step 5:

In function halt_get_remaining in file /etc/init.d/halt, change

awk '$2 ~ /^/$|^/proc|^/dev/{next}

into

awk '$2 ~ /^/$|^/proc|^/sys|^/dev/{next}

(10)tmd辛辛苦苦做這麼多幹什麼?用kernel2.6的核心執行緒支援功能!!

趕快寫個程式測試一把~~

[myphp]

#include

#include

void task(void* p){

// ?while(true){

int i;

for(i = 0;i <100;i ++){

?sleep(2);

?printf("Thread running! ");

?}

}

int main(){

#define THREAD_COUNT 100

?pthread_t thread[THREAD_COUNT];

?int i;

?for(i = 0;i < THREAD_COUNT;i++){

? ?if(pthread_create(&thread[i],NULL,task,NULL) != 0){

? ? ?fprintf(stderr,"Thread[%d] create failed! ",i);

? ?}

?}

?for(i=0;i? ?if(pthread_join(thread[i],NULL)!=0)

? ? ?fprintf(stderr,"Thread[%d] Join Error ", i);

? ?else{

? ? ?fprintf(stdout,"Thread[%d] exited ok! ",i);

? ?}

?}

?return 0;

}

[/myphp]

編譯: gcc testThread.c -lpthread -Wall -o testThread

執行: ./testThread

測試: ps aux |grep testThread 應該只有一個process

ps -Am 應該顯示一大堆thread!!!!

現在總算可疑用上真正的核心執行緒嘍~~~~

趕快編譯apache,用worker模組好爽啊~~~~

(10.5) 如果你要編譯其他的程式,記得改動/usr/include/linux

# cd /usr/include

# mv linux linux.orig

# ln -s /usr/src/linux/include/linux linux

否則apache什麼的編譯了,執行會出錯

(11)順便說一下,用2.6核心跑xwindow順暢多了,為什麼??kernel2.6支援競爭式的程式排程規則了!!就是說,有點象windows了.

這個功能可以在編譯核心的時候選擇的.

(12) 等其他人來補充~~~

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-941515/,如需轉載,請註明出處,否則將追究法律責任。

相關文章