文章目录
前言
在看韦东山老师的视频的时候(12期衔接视频,u-boot分析之编译体验),看到给内核打补丁这一块,老师讲的并不是特别的详细
。于是自己百度了一下下,大致总结一点点
“补丁”是一种能够将旧的文件(原始linux内核)修改成新的文件(修改后的内核)的一种不知道什么东西,就像衣服打上补丁,变成新的衣服一样。
一、patch补丁的文件格式
两个文件
旧文件 hello.c
int main()
{
printf("yes\n");
printf("hello");
//这是注释
//这也是注释
}
retuen 0;
修改后的新文件 hello_world.c
int main()
{
printf("hello world");
//这是注释
//这也是注释
}
retuen 0;
生成补丁文件
命令:
diff -urN hello.c hello_world.c > diff.patch
生成的文件内容:
--- hello.c 1970-01-01 08:00:00.000000000 +0800
+++ hello_world.c 2017-11-03 14:19:59.249590991 +0800
@@ -3,5 +3,4 @@
- printf("yes\n");
- printf("hello");
+ printf("hello world");
//这是注释
//这也是注释
}
解释格式
--- hello.c 1970-01-01 08:00:00.000000000 +0800
+++ hello_world.c 2017-11-03 14:19:59.249590991 +0800
- - - 表示被修改的文件名 后面是时间等信息
+++ 表示修改后的文件名 后面是时间等信息
@@ -3,5 +3,4 @@
-3,5 表示: 原文件的第3行开始,一共5行有差异
+3,4 表示: 修改后的文件第3行开始,一共4行有差异
@@ @@表示一个块的开始
- printf("yes\n");
- printf("hello");
+ printf("hello world");
//这是注释
//这也是注释
}
- 表示:修改后的文件删除这一行
+表示:修改后的文件增加这一行
空格 表示:原文件和修改后的文件都有这一行
注意:一般保留三行未修改行,便于观察。
二、patch补丁的使用
1.diff参数
-r 是一个递归选项,设置了这个选项,diff会将两个不同版本源代码目录中的所有对应文件全部都进行一次比较,包括子目录文件。
-N 选项确保补丁文件将正确地处理已经创建或删除文件的情况。
-u 选项以统一格式创建补丁文件,这种格式比缺省格式更紧凑些。
2.patch 使用方法
使用方法自行百度,下面介绍视频中介绍的比较简单的方法:
1、cd到解压的内核文件夹中
2、使用patch p1 < …/u-boot-1.1.6_jz2440.patch
-p<剥离层级>或–strip=<剥离层级> 设置欲剥离几层路径名称
p1表示去掉第一层目录
例如u-boot-1.1.6_jz2440.patch 这个补丁中
- - - u-boot-1.1.6/board/100ask24x0/100ask24x0.c
+++ u-boot-1.1.6_jz2440_2017/board/100ask24x0/100ask24x0.c
因为已经在u-boot-1.1.6这个文件夹中,所以使用p1忽略掉上面的粗体部分的目录
总结
此文只是在自己学习过程中的小笔记,第一次这么做笔记,表达不清还请见谅,
如有错误,欢迎指出,非常感谢!