修改完Linux内核后,如何发布自己的补丁文件【图解】

来源:互联网 发布:轻淘客cms网站 编辑:程序博客网 时间:2024/05/21 06:14

作者:chenjieb520


      笔者最近闲来无事,就学习了一下Linux内核的补丁制作,通过网上查找了一些资料,现在就将这些资料整理如下,供大家参考。


在补丁制作的过程中,需要使用到如下两个命令,现在就这两个命令进行简单地介绍一下:

(1)、使用diff和pathch的命令,简单介绍如下:

1.diff的使用 

diff可以完成比较功能,生成补丁文件 

格式::diff[option] oldfile newfile 

常用的option选项有: 

-r 对目录进行递归处理 

-u 输出统一格式,diff有"传统"和"统一"两种格式,现在一般使用"统一"格式,比较而言,统一格式生成的文件大,但包含了更多的信息,有利于阅读与定位 

-N 补丁中包含整个新文件 

-a 补丁中包含二进制文件 

缺省时,diff向标准输出打印,所以一般都重定向到文件并以patch为后缀,也就是所谓的补丁文件 

2.patch的使用 

把补丁运用到原代码上的命令为patch 

patch [-b] suffix <patchfile 

(2)、制作补丁文件

首先修改源文件,主要是这三处:

1、添加一个声明int ctx



2、ctx在进程一诞生就等于0


3、每次调用schedule时,就ctx加1



以上就是我们修改的内核文件的内容。现在就这些内容制作成补丁文件

生成补丁文件:

chenjieb@ubuntu:~/linux/sch$diff -uNr linux-2.6.28.6 linux-2.6.28.7 >linux-            2.6.28.7.patch


下面我们查看一下补丁文件的内容:

diff -uNr linux-2.6.28.6/include/linux/sched.h linux-2.6.28.7/include/linux/sched.h --- linux-2.6.28.6/include/linux/sched.h2009-04-30 15:36:39.000000000 +0800 +++ linux-2.6.28.7/include/linux/sched.h2011-04-05 22:50:04.969475947 +0800 @@ -1072,6 +1072,7 @@  };  struct task_struct { +int ctx;  //process count add by chen jiebin  volatile long state;/* -1 unrunnable, 0 runnable, >0 stopped */  void *stack;  atomic_t usage; diff -uNr linux-2.6.28.6/kernel/fork.c linux-2.6.28.7/kernel/fork.c --- linux-2.6.28.6/kernel/fork.c2009-04-30 15:36:40.000000000 +0800 +++ linux-2.6.28.7/kernel/fork.c2011-04-05 22:53:14.465478510 +0800 @@ -1435,6 +1435,7 @@  } else {  nr = PTR_ERR(p);  } +p->ctx=0; //set count=0  return nr;  }diff -uNr linux-2.6.28.6/kernel/sched.c linux-2.6.28.7/kernel/sched.c --- linux-2.6.28.6/kernel/sched.c2009-04-30 15:36:40.000000000 +0800 +++ linux-2.6.28.7/kernel/sched.c2011-04-05 22:55:33.697473421 +0800 @@ -4489,7 +4489,7 @@  rq->nr_switches++;  rq->curr = next;  ++*switch_count; - +next->ctx++;  context_switch(rq, prev, next); /* unlocks the rq */  /* 


至此补丁文件制作完毕,希望这个教程能够对大家有用,感谢大家的支持!