首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>系统管理>内核技术>正文

升级Linux内核奋斗记

http://www.oklinux.cn  2006-07-26  来源: oklinux收集整理  bear10214      会员收藏  游客收藏  【 】 
升级Linux内核奋斗记

我的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
成功了。

上一篇:Linux内核ARP的设计实现概述 ZT   下一篇:最新Linux内核:更好的Wi-Fi和文件系统


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·最新Linux内核:更好的Wi-Fi和文件系统
·Linux内核ARP的设计实现概述 ZT
·Linux 内核解读入门
·KGDB源码级的内核调试
·linux 内核版本号
·linux内核源码目录结构
·Linux 2.6 内核的嵌入式系统应用
·求教
·在 iSeries 和 pSeries 上将 Linux 内核从 2.4 迁移到
·linux内核防synflood
·小鸟学飞
·Linux环境进程间通信:信号灯
·Linux环境进程间通信: 管道及有名管道
·Linux 2.6内核中新的锁机制--RCU
·FC4 下编译Linux内核+perfctr
·Linux 内核中的 Device Mapper 机制
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Linux系统下内核定时器的用法
·学习园地:Linux系统内核中判断大小的
·系统编译:如何给Make命令来传递参数
·Linux 2.6内核中sysfs文件系统简单概述
·Fedora 8 Linux系统的内核配置注意事项
·升级Linux内核的一般步骤方法
·Linux发行版知识普及:三个版本的CPUID
·编译安装Virtualbox驱动模块
· Linux系统的内核解读入门
·新手学堂 Linux系统的内核解读入门
·Linux系统内核中网络参数的意义及其应
·走向Linux系统高手之路 内核编译过程解
  阅读排行
· 深入理解LINUX内核中文版下载地址
·基于S3C44B0微处理器的uClinux内核引导
·Kernel command using Linux system ca
·Linux 2.6内核如何武装Fedora Core 2
·Process priority and control on AIX
·Linux操作系统的内核编译内幕详解
·推荐:Linux用户态与内核态的交互
·通过振动向Linux ThinkPad传输信息
·Linux操作系统源代码详细分析(二)
·Linux系统内核接收以太帧的处理程序
·Linux and symmetric multiprocessing
·主流嵌入式Linux系统下GUI解决方案
·揭秘Linux内核调试器之内幕
·用命令行加挂Linux的文件系统简介
·Linux内核和核心OS组件的测试与分析
网摘收藏: