如何制作内核补丁及一些技巧

如何制作内核补丁及一些技巧

最近阅读内核邮件列表faq时候。发现一个非常有趣的办法。可以大大节约diff的时间。而且可以节约一个内核大小的空间。具体方法如下。

例如我们的内核代码放在/usr/src/linux-2.6.24 中,接下来
# cd /usr/src
# cp -al linux-2.6.24 linux-2.6.24.orig
这样为每个文件建立一个硬连接,就可以节约480M的空间.你可以在linux-2.6.24目录上面打补丁或者是作任何修改.patch程序并不改动原来文件内容.只是把原来的文件存为 文件名.orig. 并新建一个修改后的文件. 这个技巧的巧妙之处就是利用了硬连接. 硬连接可以让多个文件名指向同一个文件而不真正复制这个文件.cp 的l参数建立硬连接.所以看起来有两个目录.其实只有一个目录的文件.另外一个巧妙之处就是利用了patch 和编辑器自动备份的功能.比如emacs编辑器.第一次修改文件时候会把这个文件另存为 文件名~ 这样的格式.这样就保证了原始的文件的内容始终不被改动.

如果你的编辑器不支持自动备份.当你需要修改某个文件的时候就需要作
cp xx.c temp  //真正创建一个新文件
mv temp xx.c. //把原来的硬连接覆盖掉
你可以把文件的读属性去掉.来提醒你不要忘记作上面的工作.
chmod -w *.c

这样做的好处很多.因为实际修改内核代码的文件是很少的.节约了大量的空间和diff时间.

下面讲讲如何作patch和要求
1.patch 中不能有control-M字符.一般windows文件会带这种标记.要切记去除
2.无论多大,把patch放在邮件正文中.不要用附件或者其他形式
3.不要使用会吃掉空格的邮件客户端

diff要求.
1.永远从内核根目录做diff,最好的方法就是对两个内核目录树做diff,按照上面的方法很快
2.使用diff -up 或者是diff -uprN 格式
3.避免移动或者改文件变格式,使diff文件无谓的增大.
4.使用尽量新的内核作diff.否则会被大家乎略
5.每个patch针对一个问题.不要把所有的修改放到一个patch里面,如果你只有一个文件改动过
可以用下面的命令
cd /usr/src
diff -up linux-2.6.24.orig/drivers/net/driver_xyz.c /
linux-2.6.24/drivers/net/driver_xyz.c > my_patch
注意.diff的第一个参数是源(也就是未更改的文件)第二个文件是修改后的文件. 切记切记

通常做法
单个文件可以这样
SRCTREE= linux-2.6
MYFILE= drivers/net/mydriver.c

cd $SRCTREE
cp $MYFILE $MYFILE.orig
vi $MYFILE # make your change
cd ..
diff -up $SRCTREE/$MYFILE{.orig,} > /tmp/patch

多个文件. 干净的目录是linux-2.6.12-vanilla,修改过的目录是linux-2.6

MYSRC= /devel/linux-2.6

tar xvfz linux-2.6.12.tar.gz
mv linux-2.6.12 linux-2.6.12-vanilla
diff -uprN -X linux-2.6.12-vanilla/Documentation/dontdiff /
linux-2.6.12-vanilla $MYSRC > /tmp/patch

dontdiff是内核中不需要diff的文件.


如果发现内容有误.欢迎联系我.
我的邮件是 echo 'aGlkZTE3MTNAZ21haWwuY29tCg=='| python -m base64 -d -



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值