linux内核怎么打补丁_linux内核打补丁 - CSDN
  • Linux内核安装补丁

    千次阅读 2017-04-10 17:29:42
    本文通过自身实践,介绍了在Linux下为内核打补丁的简单实例。 Linux下安装高版本补丁到低版本的步骤大体分为以下几步: 1、选取补丁 2、构建补丁 3、编译并处理编译错误 4、安装并验证补丁 环境 ...

    本文通过自身实践,介绍了在Linux下为内核打补丁的简单实例。



    Linux下安装高版本补丁到低版本的步骤大体分为以下几步:

    1、选取补丁

    2、构建补丁

    3、编译并处理编译错误

    4、安装并验证补丁


    环境

    本文为Ubuntu 14.04版本,64位系统。

    内核版本4.1.38。


    内核安装补丁过程

    1、选取补丁

    补丁出处:

           理论上讲,各大开源网站(如githubgoogleandroid源码目录)的每次commit记录都可以作为补丁添加到我们的内核中,但是由于开源网站上分支众多、每个分支的代码更改次数也相当多,工作量巨大,所以我们需要针对性的寻找我们感兴趣并且比较重要的补丁。

           

    选取原则:

    一般来说,打补丁的困难程度取决于以下因素:

    -补丁提交时间是否与我们的内核版本相近程度

    -改动的文件数量

    -改动的文件是否跨越了较多的模块

    -涉及的模块改动是否频繁

    -代码更改行数


    本文选取补丁名称:“ipc/mqueue: Implement lockless pipelined wakeups”和“sched: Implement lockless wake-queues”

    这两个补丁都是Linux4.2的重大补丁,涉及到了进程的唤醒切换,以提高系统的性能。


    补丁“ipc/mqueue: Implement lockless pipelined wakeups”如下:


    补丁“sched: Implement lockless wake-queues”如下:



    2、构建补丁

    选取好补丁之后,需要根据两个patch对补丁的代码进行分析,找出其他补丁中与之相关的代码。

    手动挑选出相关代码之后,将相关代码复制到源码相关处,因为版本和分支不同的原因,多数情况下文件的行数是无

    法对应的,所以需要手工查找对应代码,对Linux的源码进行更改,完成系统的升级。


    根据补丁“ipc/mqueue: Implement lockless pipelined wakeups”完成对mqueue.c源代码的更改。



    根据补丁“sched: Implement lockless wake-queues”完成对sched.h源代码的更改



    根据补丁“sched: Implement lockless wake-queues”完成对core.c源代码的更改



    3、编译并处理编译错误

    生成新的内核源码后对新的内核源码进行编译


    使用#make modules和#make modules_install,对模块进行编译,并安装到标准的模块目录中。


    对新的内核源码进行编译后的安装


    4、安装并验证补丁

    完成新内核源码的编译后,安装好新的内核之后进入对补丁的验证阶段。


    验证补丁确实生效之后开始进行性能测试:我们选用sysbench对cpu性能进行压力测试。

    Sysbench简介:

         sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试SysBench运行指定数目的线程并行处理请求。测试CPU性能时,是SysBench中最简单的测试模式。测试内容为素数计算-test=cpu,参数指定测试内容为cpu--cpu-max-primes=20000 run指定计算到的最大素数。每个线程并发执行直到有一个线程达到最大素数或超过指定的总时间


    安装补丁之前,CPU性能测试结果如下:


    安装补丁之后,CPU性能测试结果如下:


    对比安装补丁前后的对比可以发现明显的性能提升。


    展开全文
  • 内核开发指南 如何为内核打补丁

    千次阅读 2010-12-29 18:52:00
    教你如何为自己的内核打补丁。这是内核开发中最基本的工作。 patch(补丁)就是存放着不同版本之间差异的文件。通过打补丁的方法升级源代码,可以不用下载整个源代码 详细的打补丁的方法可以查看内核/...

    目的
    本文是个简单的指导文件。教你如何为自己的内核打补丁。这是内核开发中最基本的工作。
    patch(补丁)就是存放着不同版本之间差异的文件。通过打补丁的方法升级源代码,可以不用下载整个源代码
    详细的打补丁的方法可以查看内核/Document/applying-patchs。txt
    要求
    你应该已经有了一个可以编译的内核。如果没有。可以到www.kernel.org 下载。本文不是教你如何编译内核
    内核应该是从kernelorg 下载的。第三方的内核(比如redhat)可能打补丁的时候会出问题。请参考特别发行版自己的打补丁文章。
    原文地址:http://blog.csdn.net/hide1713/archive/2007/12/16/1941614.aspx

    场景1
    现在我的/usr/src/liunx-2.6.22.9 中存放了内核的源代码。我到了www.kernel.org上,看到最新的stable版本是
    2.6.23.11。 那么我如何升级呢?

    首先,2.6.x.x这类版本号叫stable版。是经过测试证明稳定的。一般用户只都是用这个版本。其他还有rc,mm版本。这里先不讨论。2.6.x这个种3个数的叫base stable版。4位数的版本都是在base stable上面打补丁得来的。

    所以总得步骤是  2.6.22.9先要降级到2.6.22 然后升级到2.6.23.再升级到2.6.23.9
    具体做法如下。

    1.下载patch-2.6.22.9.bz2。把它放到/usr/src/目录里面
    接下来
    cd  liunx-2.6.22.9
    bzcat ../patch-2.6.22.9.bz2|patch -p1 -R #使用R命令意思是取消补丁。这样我们就把22.9 降到 22

    2.下载patch-2.6.23.gz。把它放到/usr/src/目录里面
    cd  liunx-2.6.22.9
    zcat ../patch-2.6.23.gz|patch -p1 #这样就升级到了2.6.23

    3.下载patch-2.6.23.11.bz2。把它放到/usr/src/目录里面
    接下来
    cd  liunx-2.6.22.9
    bzcat ../patch-2.6.23.11.bz2|patch -p1 # 这样就升级到了2.6.23.11 这是现在stable的最新版。
    最后
    cd..
    mv linux-2.6.22.9 linux-2.6.23.11#改为正确目录名
    ln -s linux-2.6.23.11 linux #重新建立链接


    场景2

    如果我现在要使2.6.23.11升级到2.6.23.12. 我应该先把2.6.23.11 回退成2.6.23 然后再打 2.6.23.12的补丁
    假设我已经在内核的目录中。补丁放在上层目录。
    bzcat ../patch-2.6.23.11.bz2|patch -p1 -R #回退到2.6.23
    bzcat ../patch-2.6.23.12.bz2|patch -p1    #打到2.6.23.12

    总的来说就是这样。正确的输出应该全都像下面这样
    patching file include/net/sock.h
    patching file include/net/tcp.h
    patching file include/scsi/scsi_device.h
    patching file include/xen/interface/vcpu.h
    patching file ipc/mqueue.c
    patching file kernel/exit.c
    patching file kernel/fork.c
    patching file kernel/futex.c
    patching file kernel/futex_compat.c
    patching file kernel/hrtimer.c
    patching file kernel/irq/manage.c
    patching file kernel/lockdep.c
    patching file kernel/params.c



    如果出现rej文件。说明有的文件打补丁失败。请查看那个rej文件。看看是为什么导致失败。一般来说。可能是你的目录树有问题。如果还有问题。参考内核/Docmuent目录下面的补丁教程。


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hide1713/archive/2007/12/16/1941614.aspx

    展开全文
  • 在Linux内核邮件列表中一个经常被问到的问题就是怎样为Linux内核打一个补丁,或者更具体一点说,存在这么多的主干/分支,一个补丁到底要打在哪个版本的基础内核上。希望这篇文档能够为你解释明白这一点。除了解释...
          
    在Linux内核邮件列表中一个经常被问到的问题就是怎样为Linux内核打一个补丁,或者更具体一点说,存在这么多的主干/分支,一个补丁到底要打在哪个版本的基础内核上。希望这篇文档能够为你解释明白这一点。除了解释怎样应用以及卸载补丁以外,在这里还提供了一个不同内核树(以及如何为它们打上特定补丁)的简要介绍。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

    linux内核版本号的含义是什么?

    ------

    所有的Linux核心包含由点隔开的三个数字。第一个数是核心的版本。我们现在是第三版(2.),一些人可能使用版本号为1的核心,可能还有少数人版本为0核心。第二个号码是核心的主号,主号也是数字(包括0)表示稳定性。一般上偶数表示稳定的版本;奇数表示不稳定的版本。最后一个号码是次号它因每一次改动而增加。如果你看到核心版本<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2.0.8,你知道它是核心2.0,稳定的核心,它已经是第九次发表了(我们从零开始记数)。

    什么是补丁?

    ----------

    一个补丁就是一个文本文档,这个文档包含了在两个不同版本的源代码树之间的变化。

    补丁是通过diff应用程序来创建的。为了正确地打上一个补丁,你需要知道这个补丁是从哪个基础版本产生出来的以及这个补丁将要把目前的源代码树变化到什么新的版本。这些信息或者会出现在补丁文件的原数据中,或者可能从文件名中推断出来。

    怎样打补丁和卸载补丁

    -------------------

    可以使用patch程序来打一个补丁。patch程序读取一个diff(或者patch)文件,然后把文件中描述的变化内容应用到代码树上。

    Linux内核中的补丁是相对于保存内核源代码目录的父目录而生成的。

    这就意味着:patch文件中的文件路径包含了它所基于的内核源文件目录的名字(或者像是"a/"和"b/"

    之类的其它名字)。由于这很可能和你本地机器上的内核源代码目录的名字不匹配(但是对于查看一个没有标签的补丁所基于的内核版本是非常有用的)。你应该切换到你的内核源代码目录,并且在打补丁的时候去掉patch中文件名字路径的第一个分量(patch命令的-p1参数可以完成这个任务)。为了卸载掉一个以前已经打上的补丁,使用-R参数来打补丁。

    于是,如果你使用如下的命令来打补丁:

     patch -p1 < ../patch-x.y.z

    那么你可以像下面这样来卸载掉这个补丁:

     patch -R -p1 < ../patch-x.y.z

    我怎样把一个patch/diff文件加到一个patch中去?

    -------------------------------------------

    这个可以通过很多种不同的方法来办到(像是Linux以及其它的类Unix操作系统一样)。

    在下面所有的例子中,我把这个文件(未压缩)以下面的语法通过标准输入加入到patch中:

     patch -p1 < path/to/patch-x.y.z如果你只是想能够照着下面的例子而并不想知道其它的打补丁的方法的话,那么你就可以不阅读这一节余下的内容了。

    也可以通过patch的-i参数来获得文件的名字,就像下面这样:

     patch -p1 -i path/to/patch-x.y.z

    如果你的patch文件是使用gzip或者bzip2来压缩的,那么你在使用之前就不必解压缩了,你可以像下面这样把它加入到patch文件中:

     zcat path/to/patch-x.y.z.gz | patch -p1

     bzcat path/to/patch-x.y.z.bz2 | patch -p1

    如果你想在打补丁之前,手动解压缩这个patch文件,那么你就可以对这个文件进行gunzip

    或者bunzip2操作---就像下面这样:

     gunzip patch-x.y.z.gz

     bunzip2 patch-x.y.z.bz2

    这个将会给你一个无格式的文本patch-x.y.z文件,这时候你就可以把这个东西以你喜欢的方式通过标准输入或者是-i参数来加入到patch中。

    一些其它的比较好的参数是-s,这个参数使patch保持无输出而不是输出错误,这将阻止错误在屏幕上滚动的速度太快。--dry-run参数使得patch命令仅仅打印出来一个将要打的patch的列表,没有真正的做任何变动。最后,-verbose告诉patch命令打印出正在进行的工作的更多信息。打补丁时候的常见错误

    -------------------

    当用patch命令来打一个补丁的时候,它试图以不同的方法来验证这个文件的完整性。

    检查这个文件是一个有效的patch文件并且检查这些被改变周围的代码是不是和提供的

    上下文相匹配。这些仅仅是patch所作的两个最基本的完整性检查。如果patch遇到了一些看起来不正确的事情,那么它有两种选择。它可以拒绝应用这些改变并且异常中断或者它试图找到一个方法来使patch命令仅仅做一些比较小的改变。

    一个patch试图修正错误的例子就是:如果所有的上下文都匹配,被改变的行匹配,但是这些行的行号不匹配。这是可能发生的,例如,如果patch在一个文件的中间做了一些改变,但是出于一些原因在文件的开头处一些行被添加了进来或者被删除了。在这种情况下,一切看起来都很好,它只是简单地上下移动一点,这时候patch通常会修正这些行号并且打上这个补丁。任何时候,只要patch在打补丁的时候需要改动文件的一些内容,它就会告诉你说:

    这个补丁打得有点儿混乱。你应该对这些改变保持一些警惕,因为即使补丁很可能被正确

    地打上了,但是情况并不总是这样,有些情况下结果会是错误的。当patch命令遇到一个变化而不能进行使用一种模糊的方法进行弥补的时候,它就会彻底地放弃这个动作,并且留下来一个以.rej为扩展名的文件。你可以阅读这个文件来查看到底是什么改变不能进行下去,从而在你愿意的情况下来手动修补它。

    如果你的内核源代码上没有应用任何第三方的补丁,只是一些来自kernel.org的补丁,并且你打这些补丁的顺序是正确的,而且你自己没有对这些源文件进行改动过,那么你应该就不会看到一个补丁对这个文件的模糊的改变或者是一些拒绝消息。如果你确实看到了这些消息的话,那么将有非常高的危险性,这说明或者是你的本地的源代码书或者是补丁文件在某些方面被玷污了。在这种情况下,你很可能是应该重新下载这个补丁文件,如果事情仍然还是保持原样的话,那么我建议你去尝试从kernel.org上下载一个完整的新的源代码树。让我们来看一下补丁可能产生的更多信息。

    如果patch命令停下来并且显示一个File to patch的提示符,那么这个时候patch命令找不到要打补丁的文件。很可能的情况是你忘记指定-p1参数或者你处于一个错误的目录中了。更加不常见的一种情况是,你会发现一些补丁需要使用-p0参数而不是-p1参数来打补丁(阅读这个补丁文件应该能揭示出这些信息--如果是这样的话,这是一种创建补丁文件的人所犯的错误,但是不致命)如果你得到信息Hunk #2 succeeded at 1887 with fuzz 2 (offset 7 lines),或者是一个类似的消息,那就意味着patch命令必须调整改变的位置(在这个例子中,它需要在它想打补丁的地方移动7行来适应这个补丁)。结果得到的文件可能正确也可能不正确,这决定于这个文件与所期望的文件不相同的原因。

    这常常发生于你所要打的patch产生于一个另外一个内核版本,这个内核版本和你要打的patch所基于的内核版本不同。

    如果你得到一个类似于Hunk #3 FAILED at 2387之类的消息,那么这就意味着不能正确地打上这个补丁,并且patch程序也不能模糊地通过。这将产生一个导致patch失败的.rej文件并且产生一个.orig

    文件把一些不能改变的原始内容显示给你。

    如果你得到的信息是:Reversed (or previously applied) patch detected!  Assume -R? [n],那么patch检测到了这个补丁文件中包含的改变已经应用在了目标文件上。如果你确实已经在此之前打了这个补丁并且重新打补丁遇到了错误,那么你可以简单地选择[n]o并且终止这次补丁动作。如果你之前打了补丁并且想得到打补丁以前的版本,但是忘记了指定-R参数,那么你在这里可以回答[y]es来使用patch为你恢复它。这也可能发生在补丁文件的创建者在创建补丁文件的时候倒置了源文件和目标目录的位置,在这种情况下从patch中revert实际上是打上了这个补丁。

    一个类似于patch: **** unexpected end of file in patch或者patch

    unexpectedly ends in middle of line的消息意味着patch命令对你加入到它之中的

    文件觉得没有意义。或者是你的下载被打断了,你试图打上一个没有压缩的patch文件,而事前并没有解压缩它,或者是你使用的补丁文件在传输的某个地方被一个邮件客户端或者一个邮件传输代理给损坏了。例如,通过把一个长行分成两行。通常情况下这些警告可以通过把这两个被分开的行合并起来来解决。

    就像我上面提到的那样,如果你打的是从kernel.org得来的补丁到一个正确的版本,

    并且你没有修改过源代码树,这些错误将从来不会发生。因此如果你从kernel.org来的

    补丁上得来了这些错误,那么你应该很可能认为或者是你的补丁文件或者是源代码树

    损坏掉了。我建议你重新开始下载一个完整的内核树以及你想要打的补丁。

    有patch的替代品么?

    -----------------

    是的,有一些替代品。

    你可以使用interdiff程序([url]http://cyberelk.net/tim/patchutils/[/url])来产生一个文件来表示两个补丁文件之间之间的不同,然后打上这个文件。这可以使你从一个像2.6.12.2的版本一步就可以到达版本2.6.12.3。-z标志甚至可以使你送给interdiff一些使用gzip或者bzip2压缩的格式文件而不用使用zcat或者bzcat或者手动解压缩。

    下面展示了你可以怎样一步就可以从2.6.12.2到达2.6.12.3

     interdiff -z ../patch-2.6.12.2.bz2 ../patch-2.6.12.3.gz | patch -p1

    尽管interdiff可以节省一到两步,但是我还是建议你通常情况下应该做这些附加的步骤,

    这是由于在某些情况下interdiff会把事情弄糟。

    另外的一个替代品是ketchup,是一个使用python写的脚本,这个脚本可以自动下载和

    打上一些补丁([url]http://www.selenic.com/ketchup/[/url]).

    另外一些比较好的工具是diffstat,可以显示patch所作的所有改变的总结;lsdiff,可以显示在一个patch文件中受影响的文件的简短列表,以及(可选)每一个补丁的行号码;grepdiff,可以显示在补丁包含给定的正则表达式的时候显示一个被补丁文件修改的文件的列表。我可以从哪儿下载这些补丁?

    -----------------------

    补丁文件可以从[url]http://kernel.org/[/url]来获得

    最近的补丁文件可以从首页的链接中得到,但是他们也有自己的特定的主页。

     2.6.x.y(-稳定)以及2.6.x补丁位于:

      [url]ftp://ftp.kernel.org/pub/linux/kernel/v2.6/[/url]

     -rc补丁位于:

      [url]ftp://ftp.kernel.org/pub/linux/kernel/v2.6/testing/[/url]

     -git补丁位于:

     [url]ftp://ftp.kernel.org/pub/linux/kernel/v2.6/snapshots/[/url]

     -mm内核补丁位于:

      [url]ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/[/url]

    在ftp.kernel.org中,你可以使用ftp.cc.kernel.org,这里cc是一个国家的代码。这样你就可以从一个在地理上离你比较近的位置的镜像站点下载,从而使你获得较快的下载速度,全局上更少的带宽以及对于kernel.org主服务器的更小的压力---这是比较好的事情,所以你还是在可能的时候使用这些镜像站点。

    2.6.x内核

    ---------

    这是Linus发布的基础稳定版本.发布的最高版本是最新的。如果发现了冲突或者严重的瑕疵,那么在这个基础上,一个-stable的修正补丁就会被发布出来(参见下面)。一旦一个新的2.6.x的基础内核发布出来,就可以得到一个测试版本的补丁,这个补丁基于先前的2.6.x版本内核和这个新的内核。为了应用一个从2.6.11到2.6.12的补丁,你最好按照下面来做(注意这些补丁不能应用于2.6.x.y的内核,而是应用在2.6.x的基础内核---如果你需要从2.6.x.y到2.6.x+1,那么你首先需要卸载掉2.6.x.y的补丁)

    下面是一些例子:

    #从2.6.11到2.6.12

    $ cd ~/linux-2.6.11   # 切换到内核源代码目录

    $ patch -p1 < ../patch-2.6.12  # 应用2.6.12补丁

    $ cd ..

    $ mv linux-2.6.11 linux-2.6.12  # 重命名源代码目录

    # moving from 2.6.11.1 to 2.6.12

    $ cd ~/linux-2.6.11.1   # 切换到内核源代码目录

    $ patch -p1 -R < ../patch-2.6.11.1 # 恢复出来2.6.11.1

         # 源代码目录现在是2.6.11

    $ patch -p1 < ../patch-2.6.12  # 应用新的2.6.12补丁

    $ cd ..

    $ mv linux-2.6.11.1 linux-2.6.12 # 重命名源代码目录

    2.6.x.y内核

    -----------

    带有四位数字版本号的内核是-stable的内核。他们包含了对一个给定的2.6.x内核的一些安全

    问题以及发现的重要的退化的修复。对于那些想要最近的稳定内核并且对于测试开发中的试验性的版本没有兴趣的

    用户来说,我们推荐这个分支。如果没有可用的2.6.x.y内核,那么最高数字的2.6.x内核是目前的稳定内核。

    注意:维护稳定内核的团队通常会做一些增量的补丁,就像是基于最近的主流版本发布

    的补丁一样。但是在下面我仅仅说明了非增量的情况。那些增量式的版本可以在下面的ftp

    处找到: [url]ftp://ftp.kernel.org/pub/linux/kernel/v2.6/incr/.[/url]

    这些补丁不是增量式的,意味着例如对于2.6.12.3补丁不能应用于2.6.12.2的内核源代码

    上去,但是可以应用在2.6.12内核代码上。

    因此,为了为了把2.6.12.3的补丁应用到你使用的2.6.12.2的内核源代码上,你不得不卸载掉

    2.5.12.2补丁(因此你可以得到一个基础的2.6.12的内核源代码),并且应用新的2.6.12.3补丁。

    下面是一个小例子:

    $ cd ~/linux-2.6.12.2   # 切换到内核源代码目录

    $ patch -p1 -R < ../patch-2.6.12.2 # 回归2.6.12.2补丁

    $ patch -p1 < ../patch-2.6.12.3  # 应用新的2.6.12.3补丁

    $ cd ..

    $ mv linux-2.6.12.2 linux-2.6.12.3 # 重新命名内核源代码目录

    -rc内核

    -------

    这些是候选的发布内核。当Linus认为目前的git(内核的源代码管理工具)内核树处于一个

    健全的稳定状态足以用来测试的时候,而发布的开发内核。

    这些内核是不稳定的,如果你试着运行他们应该会想到可能会不时地有问题出现。

    但是这是主开发分支上的最稳定的内核,并且最终会变成下一个稳定的内核。因此

    让尽可能多的人来测试它就显得格外重要。

    对于那些想帮忙测试开发中的内核但是又不想跑那些试验性的东西的人来说,这将是

    一个非常好的分支。(这样的人应该参照下面的关于-git和-mm内核的部分)

    -rc补丁是非增量式的,他们应用于2.6.x内核上,就像上面描述的2.6.x.y内核一样。在-rcN

    后缀之前的内核版本号代表了这个-rc的内核最终会变成的内核版本。

    因此,2.6.13-rc5意思是这是2.6.13内核的第五个候选的发布版本,并且这个补丁应该打在

    2.6.12的内核源代码上。

    下面是3个关于怎样打这些补丁的例子:

    # 首先是一个从2.6.12到2.6.13-rc3的例子

    $ cd ~/linux-2.6.12   # 切换到2.6.12的源代码目录

    $ patch -p1 < ../patch-2.6.13-rc3 # 打上2.6.13-rc3的补丁

    $ cd ..

    $ mv linux-2.6.12 linux-2.6.13-rc3 # 重新命名源代码目录

    # 现在从2.6.13-rc3迁移到2.6.13-rc5

    $ cd ~/linux-2.6.13-rc3   # 切换到2.6.12的源代码目录

    $ patch -p1 -R < ../patch-2.6.13-rc3 # 卸载掉2.6.13-rc3补丁

    $ patch -p1 < ../patch-2.6.13-rc5 # 应用新的2.6.13-rc5补丁

    $ cd ..

    $ mv linux-2.6.13-rc3 linux-2.6.13-rc5 # 重新命名源代码目录

    # 最后让我们试着从2.6.12.3到2.6.13-rc5

    $ cd ~/linux-2.6.12.3   # 切换到内核源代码目录

    $ patch -p1 -R < ../patch-2.6.12.3 # 回返2.6.12.3补丁

    $ patch -p1 < ../patch-2.6.13-rc5 # 应用新的2.6.13-rc5补丁

    $ cd ..

    $ mv linux-2.6.12.3 linux-2.6.13-rc5 # 重新命名源代码目录

    -git内核

    --------

    这些是每天Linus的内核树的快照(在一个git仓库中管理着,因此得名)。

    这些补丁通常每天都发布而且代表了的Linus的内核树的当前状态,由于它们是自动产生的

    甚至没有任何一个光标的骚动来看它们是不是健全的,所以它们比-rc内核更具有试验性。

    -git补丁不是增量的,它们或者是应用在2.6.x内核上或者是应用在一个基础的

    2.6.x-rc内核上---这一点你可以从他们的名字上看出来。一个名字是2.6.12-git1的

    补丁应用在2.6.12内核源代码上,一个名字为2.6.13-rc3-git2的补丁应用在2.6.13-rc3

    的内核源代码上。

    这里是一些怎样打这些补丁的例子:

    # 从2.6.12迁移到2.6.12-git1

    $ cd ~/linux-2.6.12   # 切换到内核源代码目录

    $ patch -p1 < ../patch-2.6.12-git1 # 应用2.6.12-git1补丁

    $ cd ..

    $ mv linux-2.6.12 linux-2.6.12-git1 # 重新命名内核源代码目录

    # 从2.6.12-git1迁移到2.6.13-rc2-git3

    $ cd ~/linux-2.6.12-git1  # 切换到内核源代码目录

    $ patch -p1 -R < ../patch-2.6.12-git1 # 回返2.6.12-git1补丁

         # 我们现在有了一个2.6.12内核

    $ patch -p1 < ../patch-2.6.13-rc2 # 打上2.6.13-rc2补丁

         # 内核现在是2.6.13-rc2

    $ patch -p1 < ../patch-2.6.13-rc2-git3 # 打上2.6.13-rc2-git3补丁

         # 内核现在是2.6.13-rc2-git3

    $ cd ..

    $ mv linux-2.6.12-git1 linux-2.6.13-rc2-git3 # 重新命名内核源代码目录

    -mm内核

    -------

    这是Andrew Morton发布的实验性的内核

    -mm树作为一个新特性和实验性的补丁的实验场。一旦一个补丁在-mm中经过一段时间被证明

    有价值,为了使它能包含在主流内核中,Andrew就会把它推给Linus。

    尽管鼓励的方法是通过-mm树把补丁推给Linus,这个步骤并不是总被实行。子系统的维护者

    (或者个人)有些时候直接把补丁推给Linus,尽管(或者之后)它们已经被它并到了-mm中并得到了测试(或者有些时候并没有事前在-mm中得到测试)。

    通常情况下你应该尽力使你的补丁通过-mm中最大程度测试后再到达主流内核中。

    这个分支是一个持续的变化并且包含了一些实验性的特征,很多正在debug的补丁并不适合于主流的内核等等。这个分支是这个文档中描述的最具有试验性的分支。

    这些内核内核不适合于应用在要求稳定的系统上面,并且在运行中比其他任何的分支都可能承担更大的风险(确信你有最新的备份---这适用于任何试验性的内核,但是对于-mm内核更要求这样)。这些内核除了包含所有的试验性的补丁以外,它们还包含了在主流-git内核发布的时候任何可用的改变。

    对-mm内核测试会得到极大的赏识,因为这个分支的总的目的就是为了在改变被加到更加稳定的主流的Linus内核树之前,消除退化、死机、数据失败bug、build失败(以及任何通常意义上的bug)。但是-mm的测试者应该清醒地认识到这个源代码树中的失败会比其他任何树中的都要普遍。-mm内核并不会以一个固定的时间发布,但是通常一些-mm内核会在每一个-rc内核(通常1到3个)发布的中间。-mm内核或者是应用于一个基础的2.6.x内核(当还没有-rc内核发布的时候)或者应用于一个Linus -rc的内核。

    这里有一个打-mm补丁的例子

    # 从2.6.12到2.6.12-mm1

    $ cd ~/linux-2.6.12   # 切换到2.6.12的源文件目录

    $ patch -p1 < ../2.6.12-mm1  # 打一个2.6.12-mm1的补丁

    $ cd ..

    $ mv linux-2.6.12 linux-2.6.12-mm1 # 重新正确命名这个源文件

    # 从2.6.12-mm1到2.6.13-rc3-mm3

    $ cd ~/linux-2.6.12-mm1

    $ patch -p1 -R < ../2.6.12-mm1  # 卸载掉2.6.12-mm1补丁

         # 现在我们得到了一个2.6.12的源文件

    $ patch -p1 < ../patch-2.6.13-rc3 # 打一个2.6.13-rc3的补丁

         # 我们现在得到一个2.6.13-rc3的源文件

    $ patch -p1 < ../2.6.13-rc3-mm3  # 打一个2.6.13-rc3-mm3的补丁

    $ cd ..

    $ mv linux-2.6.12-mm1 linux-2.6.13-rc3-mm3 # 重新命名源文件目录

    上面总结了不同内核树的一些解释。我希望你已经明白了怎样打不同的补丁并且对你测

    试内核有所帮助。

    致谢列表:

    Randy Dunlap, Rolf Eike Beer, Linus Torvalds, Bodo Eggert,

    Johannes Stezenbach, Grant Coady, Pavel Machek,还有一些人我可能忘记了他们的名字,

    但是他们对这篇文档进行了评论或者贡献。

     

    展开全文
  • linux内核打补丁步骤

    千次阅读 2016-05-28 10:02:42
    1, 打补丁之前需要准备好原始文件和补丁文件,例如给linux系统打补丁需要准备好linux-2.6.22.6.tar.bz2(原始文件)和linux-2.6.22.6_jz2440.patch(补丁文件), 2, 将这两个文件放到linux系统的一个文件夹下如/...

    1, 打补丁之前需要准备好原始文件和补丁文件,例如给linux系统打补丁需要准备好linux-2.6.22.6.tar.bz2(原始文件)和linux-2.6.22.6_jz2440.patch(补丁文件),

    2, 将这两个文件放到linux系统的一个文件夹下如/work/system目录下

    3, 解压原文件  tar xjf linux-2.6.22.6.tar.bz2

    4, 进入解压后的源文件文件夹   cd linux-2.6.22.6

    5, 打补丁  patch -p1 < ../linux-2.6.22.6_jz2440.patch

    6, 将打好补丁的文件压缩后再移动到Windows下 tar cjf linux-2.6.22.6_jz2440.tar.bz2

    linux-2.6.22.6

    7, 再进入源文件的解压目录 cdlinux-2.6.22.6

    8, 配置 cp  config_ok .config

    9, 编译创建uImage      make uImage

    展开全文
  • linux 内核打补丁

    2018-08-01 03:35:07
    使用内核补丁: patch -p1 &lt; ../linux-3.4.2_100ask.patch cp config_ok .config make uImage
  • Linux内核打补丁

    2020-07-24 23:33:43
    在Linux内核邮件列表中一个经常被问到的问题就是怎样为Linux内核打一个补丁,或者更具体一点说, 存在这么多的主干/分支,一个补丁到底要打在哪个版本的基础内核上。希望这篇文档能够为你解释明白这 一点。 除了解释...
  • 怎样为linux内核打补丁(转)[@more@]在Linux内核邮件列表中一个经常被问到的问题就是怎样为Linux内核打一个补丁,或者更具体一点说,存在这么多的主干/分支,一个补丁到底要打在哪个版本的基础内核上。希望这篇文档...
  • linux内核打补丁

    2019-06-13 08:44:40
    linux内核该怎样打补丁呢,那么看下面的介绍吧 转载于:https://blog.51cto.com/bhjsj04516/224698
  • 怎样为Linux内核打补丁  --------------------  作者 :Jesper Juhl,2005年8月  最后更新日期 :2006-01-05  
  • 如何为linux内核打补丁

    千次阅读 2008-01-27 11:55:00
    内核开发指南 如何为内核打补丁目的本文是个简单的指导文件。教你如何为自己的内核打补丁。这是内核开发中最基本的工作。patch(补丁)就是存放着不同版本之间差异的文件。通过打补丁的方法升级源代码,可以不用下载...
  • 内核打补丁

    千次阅读 2018-10-10 15:37:31
    内核打补丁 如果需要的某些特性并没有被现有内核支持,则需要去获取相关的补丁。比如,为了使内核支持图形化的启动界面,我们可能要用到bootsplash工具。!bootsplash项目 http://www.bootsplash.org/ 上提供了针对很...
  • JZ2440配套的Linux内核(第一期)在使用之前需要打补丁,要使用光盘里的补丁文件,因为虚拟机中的补丁文件太老了1、解压内核tar -xjvf linux-2.6.22.6.tar.bz2 2、打补丁首先进入Linux内核根目录,然后使用以下命令...
  • linux下给内核打补丁

    千次阅读 2017-08-21 17:11:54
    更改完成后用diff命令比较两文件之间的差异,得到补丁文件,用patch命令使补丁生效,则源文件就会更改成副本的样子,俗称打补丁,也可以把补丁去掉,变成原来的样子。这样的更改方式,很方便,并且改完之后不满意还...
  • 1.copy内核代码到一个干净的linux系统目录下,比如系统压缩文件为:thd_linux_3.12.17.tar.gz 2.解压系统thd_linux_3.12.17.tar.gz,tar -zxvfthd_linux_3.12.17.tar.gz;解压系统后将系统文件夹重新命名为thd_linux...
  • linux 内核源码 patch

    千次阅读 2018-12-14 14:32:07
    一、下载当前Linux内核对应的增量包 ...   我的内核当前版本是 4.9.135 最新的版本是4.9.145,中间有10个增量版本,需要全部下载,增量包不支持跨版本,只能从...三、对内核打上全部补丁 工具使用方法: 第一个参...
  • linux内核生成补丁和打补丁的方法

    千次阅读 2017-04-16 02:02:00
    linux内核源码较多,在修改完内核并发布新内核的时候,一般采用补丁的方式进行发布,而不是整个内核打包发布的。  采用补丁的方式发布有很多好处,1.首先体积很小,通常内核修改很小,生成补丁可能不到1k的大小,...
1 2 3 4 5 ... 20
收藏数 20,090
精华内容 8,036
关键字:

linux内核怎么打补丁