- 在线时间
- 63 小时
- 最后登录
- 2019-5-3
- 注册时间
- 2004-5-10
- 听众数
- 443
- 收听数
- 0
- 能力
- -250 分
- 体力
- 10122 点
- 威望
- -12 点
- 阅读权限
- 150
- 积分
- -516
- 相册
- 6
- 日志
- 10
- 记录
- 10
- 帖子
- 2003
- 主题
- 1253
- 精华
- 43
- 分享
- 8
- 好友
- 1292

复兴中华数学头子
TA的每日心情 | 开心 2011-9-26 17:31 |
|---|
签到天数: 3 天 [LV.2]偶尔看看I
- 自我介绍
- 数学中国网站(www.madio.cn)是目前中国最大的数学建模交流社区
 群组: 越狱吧 群组: 湖南工业大学数学建模同盟会 群组: 四川农业大学数学建模协会 群组: 重庆交通大学数学建模协会 群组: 中国矿业大学数学建模协会 |
<B>实战linux内核编译</B>http://www.chinaunix.net 作者:zhaosi
6 s' v$ \1 N" J' }国庆快到了,送给大家一篇文章作礼物吧,也作为在chinaunix这个大家庭中我曾得到过许多热心朋友的大力支持的回报,下文是我工作中总结的文档,有些核心参数的调节是为安装oracle数据库而使用,无此方面应用的朋友可以跳过。
+ v8 E- p9 D/ p: v
% a3 R" n: z" ]; f: p7 Q欢迎转载,但请注明出处。 $ n; Y/ o1 k, h% _
; e8 q3 @% O4 |, F. A, U
一、备份重要文件 $ A5 i1 G2 V+ w8 T( f8 g1 x; P! I
备份以下这些文件可以在系统发生错误或崩溃时,能较快速的恢复系统原来的状态。
! J" A3 y. x. \/ g l3 U$ h) x1、备份内核和启动文件
3 e: R# H3 D1 r' A% p# cd / ) m1 s. q$ }( X8 \7 W0 l+ J# j
# tar cvzf boot.tar.gz boot
$ V' z6 P% R O$ P3 e' t2、备份系统函数头文件 1 C# S3 ], e v- J, D' U H
# cd /usr/include ' S3 b! y3 p2 n: _0 b" y
# tar cvzf linux.tar.gz linux * O: }, m$ L2 ]2 _
3、备份模块中的库文件
% S, g1 F( P; w# cd /lib/modules & i* m, D* Y. o0 @
# tar cvzf 2.4.7-10.tar.gz 2.4.7-10 4 c9 {' z8 t; i. e Y0 t! K3 B g* M
# tar cvzf 2.4.7-10debug.tar.gz 2.4.7-10debug
' e1 h3 l6 V% E V0 S4、备份linux源码 2 c( t! o) E; ?6 o6 n( ~
# cd /usr/src
/ _4 a9 N9 R$ n7 e; ~# tar cvzf linux-2.4.7-10.tar.gz linux-2.4.7-10
/ @# M0 Y9 T0 P7 ]) w! ^* s4 G' s9 ~# tar cvzf linux-2.4.7-10debug.tar.gz linux-2.4.7-10debug
% s4 e; D, S6 Z0 C5、备份重要配置目录 ! D& R' x! o% N9 s% X4 h
# cd /
4 d5 ]' h" k9 `' z, A# j1 m j# tar cvzf etc.tar.gz etc
7 B' @8 m' v$ N2 u4 y5 }: U* w7 O: E二、修改核心参数(PGC2000需要) . f+ h a" a$ S, e9 w
1、修改与共享内存相关的核心参数
2 m- g. W2 g8 M6 m3 M7 P7 u) z# cd /usr/include/linux ( Y Q- J. ?/ L+ X5 I$ O6 R
# vi shm.h . c5 _3 @/ s, }+ E' G
把 #define SHMMAX 0X2000000 /*max shared seg size(bytes)*/ % J# j0 o# Z. b& u) A* X
改为#define SHMMAX 0Xa0000000 /*max shared seg size(bytes)*/
& a `* k' E' S. G2、修改与信号量相关的核心参数 8 X5 O4 ]& e6 s8 |# y' f
# cd /usr/include/linux 9 `1 S% D# m8 L2 e$ p/ f7 j0 Q
# vi sem.h
' L% F5 I$ Z$ A' ?& {" M把 #define SEMOPM 32 /*<=1 100 max num of ops per semop call*/ & Y$ D! E/ n& z E
改为#define SEMOPM 900 /*<=1 100 max num of ops per semop call*/ ( K5 _2 z9 ?% z$ D2 q2 Q1 J! E: F
3、修改与消息队列有关的核心参数 3 Z: o$ `+ V& b, p0 c
# cd /usr/include/linux
9 e, [3 f0 e0 K. N. K5 G8 u3 Q# vi msg.h
6 m+ y" x1 w0 W( Q% c# E( l找到以下三行(注释忽略):
& ^# F8 w4 w+ n" x; g7 l2 B#define MSGMNI 16
: J* \ i0 d1 f; |#define MSGMAX 8192
$ G+ x" ~8 `3 u! b#define MSGMNB 16384 : e) i8 A. g+ r9 z4 s o" W" G- U
将其修改为:
+ Z+ y0 A* z( S6 D, N#define MSGMNI 128 " H- z" a* W$ Q6 H
#define MSGMAX 131072 % F% {7 F4 n* K" }. m
#define MSGMNB 20000000 2 R$ m5 ?% L5 X7 o
4、按上面方法同样修改/usr/src/linux-2.4.7-10/include/linux下的shm.h、sem.h和msg.h文件。
8 _: O1 j5 v: v Y8 W三、下载释放核心源代码 % k; V4 g3 n1 D5 I* ` s, b
如果只是修改编译内核,这一步可以省去。当我们从Internet站点上下载了新的内核文件(如linux-2.4.7-12.tar.gz),这步是必须的。
6 d1 [! ]; R4 T5 }1、用tar命令释放内核源代码 9 b1 F5 Q T' m5 y, P- z# C
# cd /usr/src
# Y7 P' x" c5 r& j5 }# tar zxvf linux-2.4.7-12.tar.gz
% \* [, g* z- T4 k3 n7 H: ^8 @3 |文件释放成功后,在/usr/src目录下会生成一个linux子目录。其中包括了源代码。
8 i5 D, V0 _! J& \2、将/usr/include/asm、/usr/inlude/linux、/usr/include/scsi链接到/usr/src/linux/include目录下的对应目录中。
: s% g: o8 t- q' _8 i# cd /usr/include
, ^( N- ^. ?4 ^4 ]! i# d2 n # rm -Rf asm linux
* m0 u/ K8 Y- t9 q0 K' ?/ E # ln -s /usr/src/linux/include/asm-i386 asm / o9 K0 {$ u0 u7 j# A
# ln -s /usr/src/linux/include/linux linux
7 H! \$ S' ~% ]: ]! n" e# ln -s /usr/src/linux/include/scsi scsi ~, u0 C4 D/ S8 m O
四、配置内核
V- j( @" S2 [1 ^7 ~* n1、删除源代码目录中残留的.o文件和其它从属文件。
% q; r: ?8 a8 a' X # cd /usr/src/linux-2.4 7 U+ k( c( `$ ]6 [4 u& ^1 |5 L
# make mrproper / v& `7 J) A+ O) U& f
2、启动内核配置程序 , I2 f1 Q- l2 ?6 I- G
# cd /usr/src/linux-2.4 $ W: U" }* V: P* G W T: W& [5 p
# make xconfig 1 E) d" v8 C: k' k$ x; r1 f
3、配置内核
" S! |( B; \( U9 b7 GLinux的内核配置程序提供了一系列配置选项。对于每一个配置选项,用户可以回答"y"、"m"或"n"。其中"y"表示将相应特性的支持或设备驱动程序编译进内核;"m"表示将相应特性的支持或设备驱动程序编译成可加载模块,在需要时,可由系统或用户自行加入到内核中去;"n"表示内核不提供相应特性或驱动程序的支持。不合理的配置可能造成内核编译失败。 0 d( U1 M# M: f2 z3 V: M
五、编译内核 D& h$ g2 U5 A) V. q; S
1、建立编译时所需的从属文件 . z2 E: H9 E7 r0 S) o P
# cd /usr/src/linux-2.4
7 _: K# G8 w( w' Q% r# make dep $ L' ?5 `: K7 u$ i1 N f
2、清除内核编译的目标文件 9 P2 j" D; j' |1 ^
# make clean * P; @$ o; q1 j$ v& ]
3、编译内核
; t; l- ]8 L1 r" J# O# make bzImage (注意大小写) , c( d# F8 b. \; `& \
内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。如果用make zImage编译,内核很大的话,系统会提示你使用make bzImage命令来编译。 " i' o$ l0 x0 D4 k
六、编译可加载模块
8 r$ y9 I2 l8 v' Q+ O9 j$ R- `5 e如果用户在配置内核时设置了可加载模块,则需要对这些模块进行编译,以便将来使用insmod命令进行加载。
, \8 f9 f5 r1 q$ P: u- k # make modules 5 t7 |: }! P9 d9 v
# make modules_install ' V- E# p4 m. F6 l O/ _2 n9 }
编译成功后,系统会在/lib/modules目录下生成一个2.4.7-10custom子目录,里面存放着新内核的所有可加载模块。 1 r, T e J1 ~
七、启动新内核
6 Y1 H9 C8 D! ` y" ?+ F- q, }1、将新内核和System.map文件拷贝到/boot目录下 ( f8 S& {- X/ L
# cp /usr/src/linux-2.4/arch/i386/boot/bzImage /boot/vmlinuz-2.4.7-10custom g$ `' N r* t6 Q# Y4 r4 `
# cp /usr/src/linux-2.4/System.map /boot/System.map-2.4.7-10custom
& p2 |8 O) b2 W/ x, u. |# cd /boot ! x% p5 A3 N3 T) F
# rm -f System.map (删除原来的连接) 9 t3 ~1 ?6 s/ \
# ln -s System.map-2.4.7-10custom System.map (重新建立连接) ) N' P6 e, [; Q6 v" Y
2、配置/etc/lilo.conf文件,在该文件中加入下面几行:
( K8 d9 T3 t; ~1 W% _image=/boot/vmlinuz-2.4.7-10custom ( H3 F+ T+ y9 T9 a# b
label=linux-custom
- F4 s7 |3 p# U1 s: pinitrd=/boot/initrd-2.4.7-10.img
& P7 s; V. p9 h5 A8 v; Qread-only 2 @5 T2 f( O# w- B
root=/dev/hda3 (参考lilo.conf文件中现有的配置)
& K" P9 ?; }) T* c* j# D; e并把default=linux改为default=linux-custom 9 k0 [8 P/ |( L% p
3、使新配置生效
+ a5 v! X. [! M% s7 ^. H # /sbin/lilo
7 _5 R' Y* d( h( F4 a1 ?7 R4、重新启动系统
% L+ u- _+ g2 @9 A* w5 J$ i9 `7 S" F # /sbin/reboot
: U& t: I: S) @4 R: T新内核如果不能正常启动,可以在LIL提示符下启动旧内核。然后查出故障原因,重新编译新内核即可。 |
zan
|