EDA365电子论坛网

标题: Linux内核设计与实现之补丁, 开发和社区 [打印本页]

作者: pulbieup    时间: 2021-4-2 09:34
标题: Linux内核设计与实现之补丁, 开发和社区
linux最吸引我的地方之一就是它拥有一个高手云集的社区, 还有就是如果能=为linux内核中贡献代码, 一定是一件令人自豪的事情.
# W  N' N9 y$ a9 q! j' K8 ]0 T. h& l. ~  W+ e* e
下面主要总结一些和贡献代码相关的主要内容.
! {# }/ n$ s0 R! U& f
' {0 c* ?* p6 f2 [' o , ?3 \2 o0 {8 l- J

5 |( V8 a7 d: h# ?: b/ b: R& O9 h1. 加入社区  X$ D6 u+ |) w- m  C
如果想为linux贡献代码, 那么加入linux社区是必须的, 加入了社区, 不仅可以及时内核的最新消息, 而且可以及时和社区内有经验的内核开发者交流经验.. c2 }0 |% |; I
0 R2 _: _& E; Y- E/ ], D- Z4 g  N
同时也是提交代码和讨论代码的地方, 了解社区的规则, 融入社区环境之中, 才能更好的学习内核, 体会内核开发的乐趣和成就感.  j& w  O# y# j1 L' v+ k% G$ f9 U/ d

8 s* s$ B, D) @- c2 Y% R& l" s1 ~1 A' Q9 L; @# b% B
2. 编码风格- f+ y' O2 H# s3 B2 G/ {
社区给我们提供了学习和贡献内核的地方, 但是为了避免不必要的麻烦(被别人指责或者无人理睬), 首先得好好了解一些内核代码的编码风格.
8 Q/ ]0 K3 p* ^# S* m5 a2 t
! ?4 W4 p8 v3 M, D; a+ S) rlinux的编码风格都记录在 Documentation/CodingStyle 内核开发前要好好研读以下, 之后有时间我会整理到博客中.+ u& \: b8 s4 f0 q, n

2 _$ G/ U- r  L4 u5 U 3 {9 x6 R/ }1 h! b

' w" d4 f$ k7 i% `6 O3. 提交补丁
% \* W$ O2 r: v' m# v$ l准备工作都完成之后, 就可以开始内核开发之旅了 , x1 s" |# s) X' t4 i/ B

3 h6 B. ^* B+ j5 O' B只要坚持不断的学习和尝试, 总有一天会为了内核贡献自己的代码, 这时候, 就需要了解如何提交代码, 也就是内核补丁.  z. u; u& E  Z
# ]0 f1 |  D' |
! T8 n- O, V3 b, P/ r* i1 W: A# P

/ b; P+ C4 l) d1 ?# Z! s如果是发现了BUG或者有改善, 可以将BUG的描述或者改善代码发送给对应的维护者.(内核各个子系统的维护者信息在内核代码根目录下的 MAINTAINERS 文件中)9 o! x) E+ P* ?, j  X* s) n& O( _7 J. O

, r8 P5 Y7 z5 I6 }. D( y6 S; e2 n生成BUG或者改善代码的补丁有2种方法:
+ i' s* Y1 h$ F9 F4 J; q+ e
0 E0 e, W, ]) \0 y+ O. u* p( Y1. 用diff命令创建补丁- o0 W+ s7 Y$ k% [6 z0 B4 b
0 o2 w+ T. X; o% j& M
复制代码
/ h7 d1 b3 U) o  x2 \; a# 生成patch
' Q5 E2 D$ O* e- L' t1 g; u- W' k9 ^, mdiff -urN linux-old/ linux-new/ > my-patch  # 比对整个内核代码文件夹
$ W- P. U6 r1 P4 o0 m" t0 f* Q, v$ FOR( |, x$ W6 x4 F$ x4 g: I
diff -u linux-old/some/file linux-new/some/file > my-patch  # 比对某个文件
% n0 P/ M( D; a7 L1 D- I" v/ \- u% _6 ^4 b+ \
# 应用patch, 应用了patch之后, linux-old 和 linux-new 中的代码就一样了) }7 N" l8 W: J1 U& g/ g$ f
cd linux-old: ]4 r* c( v, @9 X; D9 @2 s
patch -p1 < ../my-patch   # 这个命令是进入linux内核代码根目录内执行的
, @4 p5 P0 |: `0 @
' |& ^% {3 ~) h3 Y- D8 F* G' v7 K# PS. 还有个很有用的工具 diffstat
/ _8 B8 v- t! `  F% A. Ldiffstat -p1 my-patch  # 列出补丁所引起的变更的统计(加入或移去的代码行)0 a9 a- h6 q2 ]% W
复制代码
+ {: k  l# x- }; v1 M" n$ ]. j- x: P
. E# Y6 i  O6 e; y  a% H
& z& n$ u0 u( I: `& x4 P* I5 r2. 用git命令创建补丁; z9 U$ H" |, a% I8 C- s

5 ~1 m7 _* y7 `0 S0 o复制代码! R1 f# P  C8 j7 o7 ~" ~
# 提交修改的或新增的代码
+ d; d0 J) H; }0 {git commit -a   # 提交所有修改的代码  E- L! d( s8 t  ^+ K' |. O
OR
5 k: r$ @6 E) L! h* Kgit commit linux-src/some/file.c  # 提交某个修改的代码
+ O& M* Z/ ]& ]) KOR1 {7 m+ c: s0 B% U
git add linux-src/some/new-file.c   # 把新增的文件加入版本库
/ z6 W3 y! [' @  w% v# i: J7 Kgit commit -a       # 提交新增的文件
) B! Y7 f7 ^7 H$ C& g* X4 {* O
* _6 N) ]6 \* C2 M- m" x# 生成patch0 L  I5 C' @. S. I0 o3 g+ L. F( x
git format-patch -N  # N 是正整数, 这条命令生成最后N次提交产生的补丁
8 i) u& e' _. c4 F+ MOR9 o7 u9 G+ w7 |2 }
git format-patch -1  # 最后1次提交产生的补丁" S9 Z8 a) c5 o- e6 m
9 A/ k- ~2 F, T, r; L1 u: b2 s
# 应用patch: 和第一种方法一样
2 F7 n' `/ y% I复制代码
: v- _0 v3 f5 I( b$ W) s0 i0 C
+ }* K  k5 t3 z. ?. r6 W: `1 J/ I7 W
4. 总结1 c% S) w$ R* I, s
本章的内容都是和提交内核patch有关, 我还是内核的入门者, 没有社区的经验, 更别说提交内核patch的经验了.% ?/ e, ^3 A3 ]- S8 X3 @5 z

( K, Y5 f" P/ F* Y& t这篇笔记只是简单记录一些对入门者有用的信息, 便于以后查看.
作者: NingW    时间: 2021-4-2 10:37
Linux内核设计与实现之补丁, 开发和社区




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2