QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3574|回复: 0
打印 上一主题 下一主题

实战linux内核编译

[复制链接]
字体大小: 正常 放大

1253

主题

443

听众

-516

积分

复兴中华数学头子

  • TA的每日心情
    开心
    2011-9-26 17:31
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    自我介绍
    数学中国网站(www.madio.cn)是目前中国最大的数学建模交流社区

    邮箱绑定达人 优秀斑竹奖 发帖功臣 元老勋章 新人进步奖 原创写作奖 最具活力勋章 风雨历程奖

    群组越狱吧

    群组湖南工业大学数学建模同盟会

    群组四川农业大学数学建模协会

    群组重庆交通大学数学建模协会

    群组中国矿业大学数学建模协会

    跳转到指定楼层
    1#
    发表于 2004-9-27 14:20 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta |邮箱已经成功绑定
    <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 /*&lt;=1 100 max num of ops per semop call*/
    , i. X* l# r& `) }( L) c改为#define SEMOPM 900 /*&lt;=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
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    数学中国网站是以数学中国社区为主体的综合性学术社区,下分建模、编程、学术理论、工程应用等版块。从2003年11月建站以来一直致力于数学建模的普及和推广工作,目前已经发展成国内会员最多,资源最丰富,流量最大的数学建模网络平台。我们始终秉承服务大众的理念,坚持资源共享、共同进步的原则,努力营造出严肃、认真、务实、合作的学术氛围,为中国数学的发展做出应有的贡献。
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-6-14 17:20 , Processed in 0.403501 second(s), 52 queries .

    回顶部