QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3595|回复: 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  
    / ]% {  F) P- A5 Y国庆快到了,送给大家一篇文章作礼物吧,也作为在chinaunix这个大家庭中我曾得到过许多热心朋友的大力支持的回报,下文是我工作中总结的文档,有些核心参数的调节是为安装oracle数据库而使用,无此方面应用的朋友可以跳过。
    ; ^' x, i- u4 b2 C% a
    ! J0 q+ a) F+ c0 t- k' @% \欢迎转载,但请注明出处。   w$ T, [, d& c# H7 p

    $ x0 e& K+ W( l5 {; P     一、备份重要文件 " _9 I  Z6 \7 L$ f5 P( j) @/ T/ s
    备份以下这些文件可以在系统发生错误或崩溃时,能较快速的恢复系统原来的状态。
    $ f/ Q; t  s; R1、备份内核和启动文件 % f' x. v  F- x( M+ a' t' s
    # cd  / - F  U  U' n% A* J
    # tar cvzf  boot.tar.gz  boot , k, q6 J$ X) B
    2、备份系统函数头文件 4 F, N3 m- f" l0 i
    # cd  /usr/include , p: _; B- ^" Q% h8 D
    # tar cvzf  linux.tar.gz  linux  ) w  l6 ~2 x& p: N/ r
    3、备份模块中的库文件 ! ]- q4 L$ _* P% `3 O. @
    # cd /lib/modules
      g6 R; F& n0 Y# tar cvzf  2.4.7-10.tar.gz  2.4.7-10 " F' Y6 x. K* T3 |; ^# p3 s% r' k" Z
    # tar cvzf  2.4.7-10debug.tar.gz  2.4.7-10debug
    # j/ E2 g! V7 l) t% U' ?4、备份linux源码 9 X2 ~3 o( m5 Y" j
    # cd  /usr/src ' a# J$ r) G* L3 l$ v% L4 i" Z) `
    # tar cvzf  linux-2.4.7-10.tar.gz  linux-2.4.7-10 5 p6 O. q; J0 g  W  g* A2 K  y( V; \
    # tar cvzf  linux-2.4.7-10debug.tar.gz  linux-2.4.7-10debug 0 ~& A$ X- @$ J# O$ q) O* |
    5、备份重要配置目录 ! V- E- C7 W5 w% w" V
    # cd  /
    % l* j* k1 \* |# tar cvzf  etc.tar.gz  etc # {0 B2 U6 ]2 @, D4 R4 f2 L
    二、修改核心参数(PGC2000需要) 2 q) ^# B9 E# P. N! ]" `0 x8 V) T: |
    1、修改与共享内存相关的核心参数 ! r6 G( ~0 |& t0 k  h
    # cd  /usr/include/linux
    : J; f/ d, e; n6 p7 x# vi  shm.h
    0 R7 [' j- R" d$ g" N把 #define SHMMAX  0X2000000   /*max shared seg size(bytes)*/ 9 t6 `) s- v$ j4 \  i- ~
    改为#define SHMMAX  0Xa0000000  /*max shared seg size(bytes)*/
    / h" s: {! F( m6 c5 ^6 t& m2 F1 M. p4 l2、修改与信号量相关的核心参数
    0 g2 A" d. o9 @$ }- r2 z0 ]2 |# cd /usr/include/linux
    : |, D# h, _3 C6 Y( I2 g' l+ ^) @# vi sem.h
    9 J; |+ T' ?$ s  y把 #define SEMOPM  32 /*&lt;=1 100 max num of ops per semop call*/
    7 A! W6 C2 A) k: [& P8 g5 m改为#define SEMOPM 900 /*&lt;=1 100 max num of ops per semop call*/
    + P1 A3 l% s6 P+ N3、修改与消息队列有关的核心参数
    / h4 Z3 p; c% [& U  X# I# cd /usr/include/linux * ]  ~$ r. x; m8 y0 b( N
    # vi  msg.h
    % L& A# `) C8 T9 R% U找到以下三行(注释忽略): # o5 `0 i* n: e& |# [: p+ p
    #define  MSGMNI  16 9 d7 d) `4 ^7 D' P  B0 \0 T
    #define  MSGMAX  8192
    8 Y" `) }  q6 z+ i( s1 N#define  MSGMNB  16384 6 A3 |1 c9 j, Y7 X. o9 D  {
    将其修改为: : |) H* u4 j/ A
    #define  MSGMNI  128
    ' q( u, J/ l: o  Y#define  MSGMAX  131072 ) `, _9 T$ N5 z6 I+ y2 b
    #define  MSGMNB  20000000
    8 a/ A2 {3 S# F' z# |0 r9 R4、按上面方法同样修改/usr/src/linux-2.4.7-10/include/linux下的shm.h、sem.h和msg.h文件。
    # d2 V; Q5 O  j8 H' I# ~( p; e. T  i三、下载释放核心源代码
    9 K8 S& p$ m' g1 `) {0 X" N& i7 z如果只是修改编译内核,这一步可以省去。当我们从Internet站点上下载了新的内核文件(如linux-2.4.7-12.tar.gz),这步是必须的。 : C7 ]+ x" l. I& T: z
    1、用tar命令释放内核源代码 4 c# a6 M1 u, M" u/ R* e
    # cd  /usr/src ( G; ^7 H! K9 o  E0 ?$ g( {
    # tar zxvf  linux-2.4.7-12.tar.gz 2 h0 q# d1 C( Q! h  X' j
    文件释放成功后,在/usr/src目录下会生成一个linux子目录。其中包括了源代码。
    3 Y* }* b/ l$ X% {) S! F2、将/usr/include/asm、/usr/inlude/linux、/usr/include/scsi链接到/usr/src/linux/include目录下的对应目录中。
    . \& c' j# z" T' |3 N! k; d# cd /usr/include 0 H- Y6 z, p1 A* B% {
      # rm -Rf asm linux 8 H2 G1 W& d- b5 ]
      # ln -s /usr/src/linux/include/asm-i386 asm  
    ) `3 s- m3 m+ Q* }7 D3 X; \# ln -s /usr/src/linux/include/linux linux  
      }) \, _0 D# u/ ?" F# ln -s /usr/src/linux/include/scsi scsi : o, m' y, K( w
    四、配置内核 / g* w# g+ z$ o$ x6 C
    1、删除源代码目录中残留的.o文件和其它从属文件。  ' f1 D% T* S" a3 P* n! g
      # cd /usr/src/linux-2.4  5 h  m+ H- m$ o6 m
    # make mrproper  ; A) h9 U8 r, `$ O' w' }4 d
    2、启动内核配置程序 ) e1 R5 @$ F  h0 ]8 @* }' u
    # cd /usr/src/linux-2.4
    & a( N- C% C3 I9 \. U7 A, n: v8 D9 V1 A# make  xconfig   g: p9 u* J( O' {4 Y( c
    3、配置内核
    ; X/ k2 G& E. D/ q1 P# _6 z* B" MLinux的内核配置程序提供了一系列配置选项。对于每一个配置选项,用户可以回答"y"、"m"或"n"。其中"y"表示将相应特性的支持或设备驱动程序编译进内核;"m"表示将相应特性的支持或设备驱动程序编译成可加载模块,在需要时,可由系统或用户自行加入到内核中去;"n"表示内核不提供相应特性或驱动程序的支持。不合理的配置可能造成内核编译失败。 $ ~! w( V9 x( o0 {2 L/ @
    五、编译内核
    ! [/ e# X0 p: I) A. W  B1 \1、建立编译时所需的从属文件
    6 m; g- e3 D/ r  D( r6 v# cd  /usr/src/linux-2.4
    0 I( |9 w2 L, Z5 h# q# make  dep 4 H- A3 @# @4 q
    2、清除内核编译的目标文件
    - \9 C0 m6 i' Q2 d! \# H# make  clean : P& M3 }" J) f  n4 k. M, D
    3、编译内核 . i, g. I& d) |/ y) l' |
    # make bzImage   (注意大小写) , j3 F- A9 W# S, [* K6 H# d
    内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。如果用make zImage编译,内核很大的话,系统会提示你使用make bzImage命令来编译。
    $ P; x* R1 h) S; [六、编译可加载模块  
    : Y9 J4 h; ^" E9 n4 V1 r如果用户在配置内核时设置了可加载模块,则需要对这些模块进行编译,以便将来使用insmod命令进行加载。  
    7 }- O: {7 r! g+ M0 X  c- {0 B  # make modules
    % V4 e# a7 I8 _. W/ U# make modules_install  
    , G9 d4 D2 f5 M/ w编译成功后,系统会在/lib/modules目录下生成一个2.4.7-10custom子目录,里面存放着新内核的所有可加载模块。
      E4 R1 i  }" F- Z0 v七、启动新内核
    6 ~# f+ |  ^$ @+ W' T+ u/ M1、将新内核和System.map文件拷贝到/boot目录下  
    + a/ ~! }6 J7 k/ H# cp /usr/src/linux-2.4/arch/i386/boot/bzImage  /boot/vmlinuz-2.4.7-10custom
    4 ^4 _) ?/ [4 m1 _5 V% A: x' S, x# cp /usr/src/linux-2.4/System.map  /boot/System.map-2.4.7-10custom 0 `/ m# Q! y4 p6 E: \
    # cd /boot  7 C& j6 @: J$ o
    # rm -f System.map   (删除原来的连接) 3 h) @% Y8 q; h% Q! R" B
    # ln -s System.map-2.4.7-10custom  System.map  (重新建立连接)  ( B. V1 l6 Q4 Q
    2、配置/etc/lilo.conf文件,在该文件中加入下面几行: 3 X: U$ q' r- u
    image=/boot/vmlinuz-2.4.7-10custom  
      C0 e1 J3 i: Klabel=linux-custom
    ; z3 z0 g0 h6 Z2 Z6 ~( x! {; xinitrd=/boot/initrd-2.4.7-10.img
      e. M$ I! x$ h2 u6 C! C+ R" D! ^read-only : B2 j8 [4 i* k& I& _! c* x
    root=/dev/hda3            (参考lilo.conf文件中现有的配置)
      w( M( ~/ ^$ ]6 z8 X# Y: b. J$ j4 m并把default=linux改为default=linux-custom   X3 A$ N8 N+ i# z
    3、使新配置生效 & g8 `5 C; `, J0 U( M: {/ C
     # /sbin/lilo
    : G- C1 d+ r! I9 j  x4、重新启动系统  - h5 v" c6 R& `  n: [+ v
     # /sbin/reboot 9 ~* P% j8 }9 {& ~& I
    新内核如果不能正常启动,可以在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-9-1 22:17 , Processed in 0.292271 second(s), 52 queries .

    回顶部