iOSOpenDev的补丁~

之前写过为iOSOpenDev增加指定设备端口功能 (English ver. is here),今天在看LPI的时候,书中提到了Linux的内核升级,其中就用了patch来给内核文件打补丁。

这样的方式比起我当时给出的“自己对应目录层级”覆盖文件好多了,于是就当是学习diff和patch的使用方法,做了一个iOSOpenDev的补丁,不过我是按照1.6-2版本的iOSOpenDev做的,其他版本的没有测试。

文件在这: iOSOpenDev.patch

Usage: sudo gzip -cd iOSOpenDev.patch.gz | patch -p0

diff -uNr /opt/iOSOpenDev /opt/iOSOpenDev+Port > /opt/iOSOpenDev.patch

这个命令的参数里面,

u是“合并格式”,unified。既然说到了“合并格式”,那就是说diff的输出还有其他的格式。实际上,diff一共有三种格式,它们分别是:

  • 正常格式
  • 上下文格式
  • 合并格式

先来说说正常格式吧,要使用输出正常格式,直接diff origin modification即可,比如:

origin文件,

n
i
c
o
n
i
c
o
n
i

modification文件,(在第四行下面插入了字符'~')

n
i
c
o
~
n
i
c
o
n
i

那么此时diff的输出是这样子的:

4a5
> ~

4代表在origin里的行数,a代表addition,5代表在modification里的行数
>提示增加 后面跟着需要增加的内容
(那么同理,<即是提示删除;如果既有<又有>的话,在他们中间还有三个连字符/减号, ---)

那么总的来讲,正常格式为:(为了方便阅读,各部分用[]围住)

[Row in orinal][Action][Row in modification]
[<] [Content]
[---]
[>] [Content]

其中Action可以是:

c, 内容改变
a, 增加
d, 删除

接下来是第二种,也就是上下文格式的diff。

伯克利在推出BSD时觉得还需要加入上下文,更易于了解具体的改动。

使用上下文格式,只需要diff -c origin modification

*** origin      	2015-03-06 21:33:01.000000000 +0800
--- modification	2015-03-06 21:33:13.000000000 +0800
***************
*** 2,7 ****
--- 2,8 ----
  i
  c
  o
+ ~
  n
  i
  c

前两行就是文件名和时间,之后的一行是15个*用于分割
*** 代表origin
--- 代表modification

[***|---] m,n [***|---]
代表[origin|modification]第m行开始,连续n行的变动

每一行前面有个标志位,+则是增加,-是删去,!是变动

最后就是混合格式了!

diff -u origin modification

--- orig	2015-03-06 21:33:01.000000000 +0800
+++ repl	2015-03-06 21:33:13.000000000 +0800
@@ -2,6 +2,7 @@
 i
 c
 o
+~
 n
 i
 c

前两行依旧是文件信息,第三行是两个@@开始,两个@@结束,其实就是上下文格式中两次
[***|---] m,n [***|---]的“简写”形式,其余部分和上下文格式差不多。不过由于不用分别列出两个文件的上下文变动,所以更省空间。

One thought on “iOSOpenDev的补丁~”

  1. 准备考LPI了吗?!!!
    对这些一无所知,哎,I'm too young to simple...

Leave a Reply

Your email address will not be published. Required fields are marked *

two × 2 =