- 在线时间
- 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 / X5 R/ k( Q Q& t
国庆快到了,送给大家一篇文章作礼物吧,也作为在chinaunix这个大家庭中我曾得到过许多热心朋友的大力支持的回报,下文是我工作中总结的文档,有些核心参数的调节是为安装oracle数据库而使用,无此方面应用的朋友可以跳过。
. J! \7 z6 e; {+ G7 Z3 Z
9 e3 ]5 U& R. Q9 d/ A e* O1 e欢迎转载,但请注明出处。
9 k; T9 v7 q8 r" P! d
y% _5 ~) l# v2 K; G5 U) ~ 一、备份重要文件
& \8 A2 ?, H- t备份以下这些文件可以在系统发生错误或崩溃时,能较快速的恢复系统原来的状态。 ; C* \& I5 B5 x
1、备份内核和启动文件
4 O6 G: S& Y& I# cd /
+ `8 R3 z: a# d q) y# tar cvzf boot.tar.gz boot 3 |4 a. a/ G! x# g0 h
2、备份系统函数头文件
% N# f( g. t% b# cd /usr/include
! Q! n, H# P8 D7 }" B1 R# tar cvzf linux.tar.gz linux 1 p. h, ~8 `+ c8 Y
3、备份模块中的库文件 & } K! |. B" i& Z- B, s
# cd /lib/modules % Z, R+ j( i# X3 ?. g5 b- q n; l* d
# tar cvzf 2.4.7-10.tar.gz 2.4.7-10 6 {: X7 M& Q1 o' j7 Y% H. S3 `* X
# tar cvzf 2.4.7-10debug.tar.gz 2.4.7-10debug 8 c4 X8 k* n+ x$ B
4、备份linux源码 : x% F! B$ l4 f) [! Z/ M) u
# cd /usr/src ! j7 l, U% M# d! m
# tar cvzf linux-2.4.7-10.tar.gz linux-2.4.7-10
0 {9 V1 _( V8 U. P I& f( i# tar cvzf linux-2.4.7-10debug.tar.gz linux-2.4.7-10debug
! I7 w; R9 C5 p4 i) d: F5、备份重要配置目录 # F+ c) y! }% E' N! Q1 f H
# cd /
! x# v5 t- ^ l5 h4 w# tar cvzf etc.tar.gz etc , p9 H/ d' }0 S r3 I! X9 t5 N0 R' v
二、修改核心参数(PGC2000需要)
5 |& d4 a4 ]9 Q' \: F% L) O" b1、修改与共享内存相关的核心参数 ' O1 n3 z: }4 f4 }: a" A6 w
# cd /usr/include/linux
8 J X: W# Y j* B# vi shm.h
5 R4 o6 o. w, d' F把 #define SHMMAX 0X2000000 /*max shared seg size(bytes)*/ * b1 H7 j8 u V; g
改为#define SHMMAX 0Xa0000000 /*max shared seg size(bytes)*/ / ]" z- x4 P# i" t' H$ B7 |
2、修改与信号量相关的核心参数 & e, P% M9 L9 q9 I0 V, n: b
# cd /usr/include/linux : D4 b4 c5 v9 \7 K" U4 d0 H$ x
# vi sem.h ! g* e, H3 E& ] c5 j9 s
把 #define SEMOPM 32 /*<=1 100 max num of ops per semop call*/
, i. X* l# r& `) }( L) c改为#define SEMOPM 900 /*<=1 100 max num of ops per semop call*/
9 T7 l7 I( ?' q$ p3、修改与消息队列有关的核心参数 7 K* n( g/ b9 h. i( H
# cd /usr/include/linux 5 h; M4 Q! s- `+ y0 E
# vi msg.h 0 ~7 \+ \; `& r; j+ n( s
找到以下三行(注释忽略):
* F$ c0 c+ X) }! V6 o#define MSGMNI 16
) l' e: ~' s! C. V#define MSGMAX 8192 % X) r, w2 }5 l8 [! v
#define MSGMNB 16384
# ?: e, l. D C/ G0 B将其修改为: % |" G4 j( u( F$ [% D
#define MSGMNI 128 & ~8 }0 W' }; `8 n6 b- m
#define MSGMAX 131072
; ]& i! n2 ^. y: B#define MSGMNB 20000000
4 Q0 `- e9 \3 D. K4、按上面方法同样修改/usr/src/linux-2.4.7-10/include/linux下的shm.h、sem.h和msg.h文件。
) j" N; O: ?$ j% q J: v- k8 c三、下载释放核心源代码 2 Q S- m3 G4 m4 P- O* }
如果只是修改编译内核,这一步可以省去。当我们从Internet站点上下载了新的内核文件(如linux-2.4.7-12.tar.gz),这步是必须的。
$ b+ l+ F. L. t, ?& }1、用tar命令释放内核源代码
& `# V5 s: W3 J% w# cd /usr/src
1 i2 y" Z9 h" A* w+ q4 h6 P# tar zxvf linux-2.4.7-12.tar.gz
* Z1 L$ j3 W% G# @" G2 c文件释放成功后,在/usr/src目录下会生成一个linux子目录。其中包括了源代码。
/ F6 K! t4 G; I7 a* U3 J2、将/usr/include/asm、/usr/inlude/linux、/usr/include/scsi链接到/usr/src/linux/include目录下的对应目录中。 # s; X( A; q. W+ e, B I
# cd /usr/include
; p' C9 [0 N" e" ]0 X! D5 S # rm -Rf asm linux
; |0 W( D; z9 k # ln -s /usr/src/linux/include/asm-i386 asm 9 ^( W& L% g {8 A
# ln -s /usr/src/linux/include/linux linux ) c N# c% Y$ V# h: `+ [
# ln -s /usr/src/linux/include/scsi scsi
. I3 q! Z/ D. o# W四、配置内核
& E" T5 u0 q# y1 v3 Z1、删除源代码目录中残留的.o文件和其它从属文件。
0 r8 p, S" X A, s # cd /usr/src/linux-2.4 o( u( i" w' I+ i) D) ?. K+ ?' M9 ?
# make mrproper
4 N4 r* L' W: v# s6 t1 J. v% n2、启动内核配置程序 / p) E$ [1 U. y6 I
# cd /usr/src/linux-2.4 6 E0 S, b8 U: q& @5 L) Z+ z$ [; N
# make xconfig
# H$ {4 z& I) p5 \% S$ a3、配置内核
" h$ m3 O( ]2 u0 d; a6 c% c/ X) TLinux的内核配置程序提供了一系列配置选项。对于每一个配置选项,用户可以回答"y"、"m"或"n"。其中"y"表示将相应特性的支持或设备驱动程序编译进内核;"m"表示将相应特性的支持或设备驱动程序编译成可加载模块,在需要时,可由系统或用户自行加入到内核中去;"n"表示内核不提供相应特性或驱动程序的支持。不合理的配置可能造成内核编译失败。
4 Q7 |, e4 Y& |1 z% B五、编译内核 + p' Z4 l$ F4 o8 `# M: t6 i" {. l
1、建立编译时所需的从属文件 2 a7 U* I0 }( M: g' m
# cd /usr/src/linux-2.4
! F A5 e' [* S9 ^5 ?9 s# make dep
8 z }" y! E; y) v: a/ w2 a2、清除内核编译的目标文件
( L6 `. n5 \1 U" v: G# make clean
9 U' l1 u; }& e! i& b3、编译内核 * \+ |: z% m+ @9 l9 |9 }# ?& h% U
# make bzImage (注意大小写)
0 @5 X4 M9 E5 b X) U5 d6 d内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。如果用make zImage编译,内核很大的话,系统会提示你使用make bzImage命令来编译。 % B: V' d4 X1 ]
六、编译可加载模块
; o1 a& p. X7 j( D/ [8 x如果用户在配置内核时设置了可加载模块,则需要对这些模块进行编译,以便将来使用insmod命令进行加载。
5 [, T% G2 W* A" @' b # make modules
, _; n& @! \% v- H/ A8 }# make modules_install ( h& [5 O. d4 F7 _, [' o( Q
编译成功后,系统会在/lib/modules目录下生成一个2.4.7-10custom子目录,里面存放着新内核的所有可加载模块。 * e- k. T! R, Z+ l& j
七、启动新内核 " L, k7 n6 W7 h0 K$ b: ^, C
1、将新内核和System.map文件拷贝到/boot目录下 y; o# C( G) j# d2 T$ E$ s
# cp /usr/src/linux-2.4/arch/i386/boot/bzImage /boot/vmlinuz-2.4.7-10custom 7 O' w6 V& }0 l
# cp /usr/src/linux-2.4/System.map /boot/System.map-2.4.7-10custom ' f6 W, l6 j. i' W6 q$ W. Y
# cd /boot ' |- g0 G) @* B' `9 w' t" |
# rm -f System.map (删除原来的连接)
% S8 T6 d9 M" ^% N1 I# ln -s System.map-2.4.7-10custom System.map (重新建立连接)
+ l, F1 U7 ?) d3 }2、配置/etc/lilo.conf文件,在该文件中加入下面几行: % n3 @- _4 }' r' k0 W; h: T4 F
image=/boot/vmlinuz-2.4.7-10custom
- F- Z3 F# K+ R4 Ilabel=linux-custom
P, |6 e0 j9 a: Ainitrd=/boot/initrd-2.4.7-10.img
1 m; H7 D0 {) E2 Z. ]9 Rread-only 3 T$ X; f! _1 _8 y
root=/dev/hda3 (参考lilo.conf文件中现有的配置) ; @2 s& y9 d; K+ N/ {2 E
并把default=linux改为default=linux-custom
4 }7 X) O3 K! L" J, m3、使新配置生效 ( ?; W- d( y$ d" z5 Z( u
# /sbin/lilo
6 d8 K! d3 O9 H/ b: {/ d6 J; C, M4、重新启动系统
0 s' a' i( h6 r* W% O" Y # /sbin/reboot
% q' }7 m# c2 P. }新内核如果不能正常启动,可以在LIL提示符下启动旧内核。然后查出故障原因,重新编译新内核即可。 |
zan
|