科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道如何给类unix操作系统打补丁

如何给类unix操作系统打补丁

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

如果你现在还不懂得如何给类unix操作系统打补丁,那没有关系,我们就一起来试试,因为在刚开始写这篇文章的时候,我也不会给自己的程序打补丁。

作者:51CTO.COM 2007年10月18日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共3页)

  让我们解释一下diff用来指明这三种情况时使用的符号:

  *****************************************************************************

  添加(ADDITION):

  看补丁文件中如下的行: (相对于arch/i386/kernel/signal.c文件的新旧两个版本)

  *** 419,431 ****

  --- 419,437 ----

  ? current->exec_domain->signal_invmap[sig]

  : sig),

  &frame->sig);

  + if (err)

  + goto give_sigsegv;

  使用+号指明在“&frame->sig);”这一行后面要加两个新行。这两个新行就是用+符号开头的两行。

  *** 419,431 ****向读者指明可以从旧文件的419行到431行来查阅这些变化;同样的,--- 419,437 ----向读者指明可以从新文件的419到437行来查阅这些变化。这样一来,新旧一比较,就可以知道哪些地方发生了什么变化。

  不过在新版本的diff中,似乎并不是用这种方法来表明新旧文件对应的行号的,而使用@这个符号,对应于上例中的:

  *** 419,431 ****

  --- 419,437 ----

  我们看到的新的标识可能是:

  @@ -419,431 +419,437 @@

  对于这种表示方法,我还不是很懂,如果有哪位朋友比较懂的话,非常欢迎你将这部分内容加进来。

  不过,有一点需要说明一下,就是这个行号并不是完全必需的,其实这个行号在给源代码打补丁的时候是没有用的,这里提示出来主要是给开发人员比较分析时使用的。

  置换(REPLACEMENT):

  看补丁文件中如下的行: (相对于arch/i386/kernel/signal.c文件的新旧两个版本)

  ***************

  *** 367,377 ****

  printk("I/O APIC #%d Version %d at 0x%lX.\n",

  m->mpc_apicid,m->mpc_apicver,

  m->mpc_apicaddr);

  ! /*

  ! * we use the first one only currently

  ! */

  ! if (ioapics == 1)

  ! mp_ioapic_addr = m->mpc_apicaddr;

  }

  mpt+=sizeof(*m);

  count+=sizeof(*m);

  然后后面又紧跟着如下的行:

  --- 368,376 ----

  printk("I/O APIC #%d Version %d at 0x%lX.\n",

  m->mpc_apicid,m->mpc_apicver,

  m->mpc_apicaddr);

  ! mp_apics [mp_apic_entries] = *m;

  ! if (++mp_apic_entries >MAX_IO_APICS)

  ! --mp_apic_entries;

  }

  mpt+=sizeof(*m);

  count+=sizeof(*m);

  这里就指明了在旧版本文件中用!符号标识的5行被在新版本文件中用!标识的3行替换了。

  由此可见,符号!就意味着替换。但是为什么会有替换,而不是先删除再添加,这里我就不清楚了。还是得请知道的朋友指点一下了。

  删除(DELETION):

  看补丁文件中如下的行: (相对于drivers/net/Config.in文件的新旧两个版本)

  ***************

  *** 93,100 ****

  fi

  if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then

  tristate 'RealTek 8129/8139 (not 8019/8029!) support' CONFIG_RTL8139

  - tristate 'SiS 900 PCI Fast Ethernet Adapter support' CONFIG_SIS900

  - tristate 'Packet Engines Yellowfin Gigabit-NIC support' CONFIG_YELLOWFIN

  fi

  bool 'Other ISA cards' CONFIG_NET_ISA

  if [ "$CONFIG_NET_ISA" = "y" ]; then

  --- 94,99 ----

  ***************

  在旧版本文件中用-符号标识的两行说明这两行在新版本的文件中不会再出现了,也就是说,在新版本的文件中,这两行被删除了。

  建立一个自己的补丁

  你现在修改并测试了一个新的Linux版本,就称它为Linux-2.4.5kh3,这个版本和你当前使用的称作Linux-2.4.5kh2的“老”版本有一些些不同。

  现在你想制作一个可以将Linux-2.4.5kh2升级到Linux-2.4.5kh3的补丁程序。顺便多说句废话,理所当然的这个补丁程序要比Linux内核的源代码小的多。

  这个补丁文件一般使用一张软盘就可以装下来,因此这对于升级另一台计算机上的旧的操作系统内核是非常有用的。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章