升級Linux核心奮鬥記(轉)
升級Linux核心奮鬥記(轉)[@more@]我的PIII Dell機執行著核心2.4.的RedHat,自從Linux核心2.6釋出以來一直想把該系統升級到核心2.6。經過一番艱辛萬苦,終於成功了。為了體驗一下在Linux下編寫多執行緒程式的步驟,又更新GCC和C語言庫。在此願和各位朋友共享這段經歷,共享這段成果。
(可能有記錄錯誤,僅供參考)。
具體步驟包括以下內容:
1,升級核心的具體步驟
2,更新GCC
3,使用glibc2.3.5
4,使用NPTL執行緒進行程式設計
在此之前,先簡要地介紹一下Linux核心2.6所做的改進及新增功能
Linux2.6主要在以下的10個方面作了很大的改進,簡單概括如下,有關詳細情況,請參閱相關資料。
1)透過改善並行處理能力和採用POSIX執行緒等,提高了系統的處理能力,從而Linux真正具備大型資訊系統所要求效能。
2)透過改善檔案系統的輸出/輸入能力和提高對大容量記憶體的利用效率,使得Linux能夠更勝任大型資訊系統中的資料處理。
3)加強了對資料庫應用程式的支援。
4)提高了抗系統高負荷時能力。
5)提高了系統的可用性,包括對不停機時備份和不停機時更換硬體功能的支援。
6)強化了對網路的支援,增加了對Ipv6, SCTP, IPSec,等的支援。
7)透過增加訪問控制和核心暗號化技術,提高了系統的安全性。
8)強化了對電源的管理。
9)強化了對嵌入式CPU和系統的支援。
10)新增了更多的硬體驅動程式。
一.升級核心
1, 下載linux-2.6.3.tar.bz2(可以是更新的版本)到/usr/src
bzcat linux-2.6.3.tar.bz2 | tar xvf –
cd linux-2.6.3
閱讀README及Changes 檔案,確認必須的工具軟體。因為不是膝上型電腦和膝上型電腦有關的軟體可以忽略。
發現module-init-tools需要更新。
2,下載module-init-tools-0.9.13.tar.bz2
bzcat module-init-tools-0.9.13.tar.bz2 | tar xvf –
cd module-init-tools-0.9.13
./configure --prefix=/usr/local/module-init
make
make moveold
make install
/usr/local/module-init/sbin/generate-modpobe.conf > /etc/modprobe.conf
成功。
3, 編譯Linux核心
cd /usr/src/linux-2.6.3
make menuconfig
一看太麻煩了,而且許多選項不知所云。退出該程式。
執行make oldconfig,對kernel2.6新增的不熟悉的選項作不選或為預設。
make bzImage
make modules modules_install
pwd
/usr/src/linux-2.6.3
mv arch/i386/boot/bzImage /boot/bzImage2.6.3
mv System.map /boot/System.map-2.6.3
cd /boot
mv System.map oldSystem.map
ln –s System.map-2.6.3 System.map
4,建立sys目錄
mkdir /sys
5, 修改相關檔案,增加對sys的支援
在/etc/rc.d/rc.sysinit檔案增加對sys的支援。
1) 找到mount –f /proc的行,在其下面,增加 mount –f /sys
2) 找到 action $ “Mounting proc filesystem:” mount –n –t proc /proc /proc 在其下面,增加
action $ “Mounting sysfs filesystem:” mount –n –t sysfs /sys /sys
3) 把檔案中的 ksyms 改成 kallsyms
在/etc/fstab檔案中,增加一行
none /sys sysfs defaults 0 0
在/etc/rc.d/init.d/halt中,增加對sys的支援
把 awk ‘$2 ~/^/$ | ^/proc | ^/dev / {next} 變為
awk ‘$2 ~/^/$ | ^/proc | ^/sys | ^/dev / {next}
6,啟動
修改/etc/lilo.conf, 增加下面的設定
…
image=/boot/bzImange2.6.3
label=Linux2.6.3
read-only
root=/dev/hda3(由自己的PC設定決定)
成功。
二,更新GCC (因為gcc2.95.3無法編譯glibc-2.3.5)
下載gcc-3.4.4.tar.bz2
bzcat gcc-3.4.4.tar.bz2 | tar xvf –
cd gcc-3.4.4
./configure –prefix=/usr/local/gcc344 –enable-shared –enable-threads –enable-threads=posix –enable-languages=c,c++,f77
make bootstrap (因為使用CFLAGS選項時,出錯了,所以省略)
make install
ln –s /usr/local/gcc344/bin/gcc /usr/bin/gcc
三,使用glibc-2.3.5
1)、透過調查發現要編譯glibc-2.3.5,要求binutils在2.13以上。所以必須安裝binutils-2.14
下載binutils-2.14.tar.gz
tar zxpvf binutils-2.14.tar.gz
mkdir binutils-build
cd binutils-build
../binutils-2.14/configure –prefix=/usr –enable-shared
make tooldir=/usr
make check
make tooldir=/usr install
cp ../binutils-2.14/include/libiberty.h /usr/include
2) 安裝glibc-2.3.5
下載 glibc-2.3.5.tar.gz 和 glibc-2.3.5-fix_test-1.patch
tar zxpvf glibc-2.3.5.tar.gz
patch –Np1 –i ../glibc-2.3.5-fix_test-1.path
mkdir glibc-build
cd glibc-build
../glibc-2.3.5/configure –prefix=/usr/local/glibc235 –enable-add-ons=linuxthreads –enable-kernel=2.6.0 (若安裝在/usr目錄下,很危險,可能會損壞你的系統)
make
make check (必須執行的一步)
make localedata /install-locales (對應各國文字)
mkdir /usr/man/man3(man的安裝路徑)
make –C ../glibc-2.3.5/linuxthreads/man install
上面的安裝完成以後,最好把/usr/local/glibc235/lib和/usr/local/glibc235/include加入到系統的路徑中,這樣在編譯程式時,就不必指定庫和header檔案的路徑了。
四、使用NPTL進行執行緒程式設計
#include
#include
#include
#include
void thread_fun(void * arg);
char message[] = “I am created thread”;
int main() {
int rnt;
pthread_t new_thread;
void *thread_result;
rnt=pthread_create(&new_thread,NULL, thread_fun, (void*) message);
if (rnt != 0) {
perrer (“thread creation failed”);
exit(EXIT_FAILURE);
}
printf(“Waiting for other thread to finish…
”);
rnt = pthread_join(new_thread, &thread_result);
if (rnt != 0) {
perrer (“thread join failed”);
exit(EXIT_FAILURE);
}
printf(“Thread join, it returned %s
”, (char*) thread_result);
printf(“message now %s
”, message);
exit(EXIT_SUCCESS);
}
void *thread_fun (void * arg) {
printf(“the new thread is running. Argument was %s
”,(char*)arg);
sleep(3);
strcpy(message, “Bye”);
pthread_exit(“Thank you for the test”);
}
編譯
gcc -D_REENTRANT test_thread.c -o test_thread -lpthread
./test_thread
成功了。
(可能有記錄錯誤,僅供參考)。
具體步驟包括以下內容:
1,升級核心的具體步驟
2,更新GCC
3,使用glibc2.3.5
4,使用NPTL執行緒進行程式設計
在此之前,先簡要地介紹一下Linux核心2.6所做的改進及新增功能
Linux2.6主要在以下的10個方面作了很大的改進,簡單概括如下,有關詳細情況,請參閱相關資料。
1)透過改善並行處理能力和採用POSIX執行緒等,提高了系統的處理能力,從而Linux真正具備大型資訊系統所要求效能。
2)透過改善檔案系統的輸出/輸入能力和提高對大容量記憶體的利用效率,使得Linux能夠更勝任大型資訊系統中的資料處理。
3)加強了對資料庫應用程式的支援。
4)提高了抗系統高負荷時能力。
5)提高了系統的可用性,包括對不停機時備份和不停機時更換硬體功能的支援。
6)強化了對網路的支援,增加了對Ipv6, SCTP, IPSec,等的支援。
7)透過增加訪問控制和核心暗號化技術,提高了系統的安全性。
8)強化了對電源的管理。
9)強化了對嵌入式CPU和系統的支援。
10)新增了更多的硬體驅動程式。
一.升級核心
1, 下載linux-2.6.3.tar.bz2(可以是更新的版本)到/usr/src
bzcat linux-2.6.3.tar.bz2 | tar xvf –
cd linux-2.6.3
閱讀README及Changes 檔案,確認必須的工具軟體。因為不是膝上型電腦和膝上型電腦有關的軟體可以忽略。
發現module-init-tools需要更新。
2,下載module-init-tools-0.9.13.tar.bz2
bzcat module-init-tools-0.9.13.tar.bz2 | tar xvf –
cd module-init-tools-0.9.13
./configure --prefix=/usr/local/module-init
make
make moveold
make install
/usr/local/module-init/sbin/generate-modpobe.conf > /etc/modprobe.conf
成功。
3, 編譯Linux核心
cd /usr/src/linux-2.6.3
make menuconfig
一看太麻煩了,而且許多選項不知所云。退出該程式。
執行make oldconfig,對kernel2.6新增的不熟悉的選項作不選或為預設。
make bzImage
make modules modules_install
pwd
/usr/src/linux-2.6.3
mv arch/i386/boot/bzImage /boot/bzImage2.6.3
mv System.map /boot/System.map-2.6.3
cd /boot
mv System.map oldSystem.map
ln –s System.map-2.6.3 System.map
4,建立sys目錄
mkdir /sys
5, 修改相關檔案,增加對sys的支援
在/etc/rc.d/rc.sysinit檔案增加對sys的支援。
1) 找到mount –f /proc的行,在其下面,增加 mount –f /sys
2) 找到 action $ “Mounting proc filesystem:” mount –n –t proc /proc /proc 在其下面,增加
action $ “Mounting sysfs filesystem:” mount –n –t sysfs /sys /sys
3) 把檔案中的 ksyms 改成 kallsyms
在/etc/fstab檔案中,增加一行
none /sys sysfs defaults 0 0
在/etc/rc.d/init.d/halt中,增加對sys的支援
把 awk ‘$2 ~/^/$ | ^/proc | ^/dev / {next} 變為
awk ‘$2 ~/^/$ | ^/proc | ^/sys | ^/dev / {next}
6,啟動
修改/etc/lilo.conf, 增加下面的設定
…
image=/boot/bzImange2.6.3
label=Linux2.6.3
read-only
root=/dev/hda3(由自己的PC設定決定)
成功。
二,更新GCC (因為gcc2.95.3無法編譯glibc-2.3.5)
下載gcc-3.4.4.tar.bz2
bzcat gcc-3.4.4.tar.bz2 | tar xvf –
cd gcc-3.4.4
./configure –prefix=/usr/local/gcc344 –enable-shared –enable-threads –enable-threads=posix –enable-languages=c,c++,f77
make bootstrap (因為使用CFLAGS選項時,出錯了,所以省略)
make install
ln –s /usr/local/gcc344/bin/gcc /usr/bin/gcc
三,使用glibc-2.3.5
1)、透過調查發現要編譯glibc-2.3.5,要求binutils在2.13以上。所以必須安裝binutils-2.14
下載binutils-2.14.tar.gz
tar zxpvf binutils-2.14.tar.gz
mkdir binutils-build
cd binutils-build
../binutils-2.14/configure –prefix=/usr –enable-shared
make tooldir=/usr
make check
make tooldir=/usr install
cp ../binutils-2.14/include/libiberty.h /usr/include
2) 安裝glibc-2.3.5
下載 glibc-2.3.5.tar.gz 和 glibc-2.3.5-fix_test-1.patch
tar zxpvf glibc-2.3.5.tar.gz
patch –Np1 –i ../glibc-2.3.5-fix_test-1.path
mkdir glibc-build
cd glibc-build
../glibc-2.3.5/configure –prefix=/usr/local/glibc235 –enable-add-ons=linuxthreads –enable-kernel=2.6.0 (若安裝在/usr目錄下,很危險,可能會損壞你的系統)
make
make check (必須執行的一步)
make localedata /install-locales (對應各國文字)
mkdir /usr/man/man3(man的安裝路徑)
make –C ../glibc-2.3.5/linuxthreads/man install
上面的安裝完成以後,最好把/usr/local/glibc235/lib和/usr/local/glibc235/include加入到系統的路徑中,這樣在編譯程式時,就不必指定庫和header檔案的路徑了。
四、使用NPTL進行執行緒程式設計
#include
#include
#include
#include
void thread_fun(void * arg);
char message[] = “I am created thread”;
int main() {
int rnt;
pthread_t new_thread;
void *thread_result;
rnt=pthread_create(&new_thread,NULL, thread_fun, (void*) message);
if (rnt != 0) {
perrer (“thread creation failed”);
exit(EXIT_FAILURE);
}
printf(“Waiting for other thread to finish…
”);
rnt = pthread_join(new_thread, &thread_result);
if (rnt != 0) {
perrer (“thread join failed”);
exit(EXIT_FAILURE);
}
printf(“Thread join, it returned %s
”, (char*) thread_result);
printf(“message now %s
”, message);
exit(EXIT_SUCCESS);
}
void *thread_fun (void * arg) {
printf(“the new thread is running. Argument was %s
”,(char*)arg);
sleep(3);
strcpy(message, “Bye”);
pthread_exit(“Thank you for the test”);
}
編譯
gcc -D_REENTRANT test_thread.c -o test_thread -lpthread
./test_thread
成功了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-947606/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux核心升級Linux
- kali linux升級記Linux
- Ubuntu 16.04 升級Linux 系統核心UbuntuLinux
- Linux核心C語言將升級LinuxC語言
- Linux 核心準備升級到 Rust 1.77LinuxRust
- [轉載]Linux/Mac go版本升級LinuxMacGo
- 麒麟核心升級
- CentOS 8 升級核心CentOS
- CentOS 7核心升級教程。CentOS
- centos7 核心升級CentOS
- Linux升級GCCLinuxGC
- CentOS6.X 升級核心CentOS
- 寶付談小白IT職場奮鬥之路
- 在阿里,40歲的奮鬥姿勢阿里
- 寒門學子的奮鬥史(二)
- Linux openssh升級8.0Linux
- CentOS 7 停服後(2024-06-30)升級最新的Linux 核心CentOSLinux
- centos7-kernel-upgrade-核心升級CentOS
- 健康的身體是奮鬥的基礎
- 我的奮鬥:我在外企那些年(二)
- 核心升級,資料先行 —— SNP中國賦能企業破解資訊化升級轉型後顧之憂
- nginx 版本升級 轉載Nginx
- Linux 核心配置筆記Linux筆記
- CentOS 7升級核心簡明說明CentOS
- “Java跌落向下,Python奮鬥向前”,網友:看哭了...JavaPython
- 致還在測試崗位奮鬥的你
- 安全建議:將系統升級到Linux 5.4穩定版核心,很重要!Linux
- 終於!“30 歲”的 Linux 核心 C 語言將升級到 C11Linux
- 重大升級!英特爾 CPU 內購功能 (SDSI)已新增至 Linux 5.18 核心中Linux
- linux核心級同步機制--futexLinux
- Excel轉Json升級版-PythonExcelJSONPython
- 安裝升級Linux GCC版本LinuxGC
- Linux CentOS升級安裝gitLinuxCentOSGit
- Linux核心筆記004 - 從記憶體管理開始,認識Linux核心Linux筆記記憶體
- Linus終於被勸動:用了30年的Linux核心C語言將升級LinuxC語言
- Apache ShardingSphere 5.0.0 核心優化及升級指南Apache優化
- 《第九所》:再現國家科研奮鬥史
- 如何升級 Linux Mint 19.1 為 Linux Mint 19.2Linux
- Linux核心筆記005 - 越界訪問記憶體,Linux核心處理過程Linux筆記記憶體