找回密码
 注册
关于网站域名变更的通知
查看: 377|回复: 1
打印 上一主题 下一主题

Linux内核设计与实现之补丁, 开发和社区

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-4-2 09:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
linux最吸引我的地方之一就是它拥有一个高手云集的社区, 还有就是如果能=为linux内核中贡献代码, 一定是一件令人自豪的事情.
$ o1 S0 o9 G! G; u5 z; |* |  {: o% _4 K3 H
下面主要总结一些和贡献代码相关的主要内容., }* e7 q# F# y0 s" }
) S! e. G# o' @; ~; G
  • 加入社区
  • 编码风格
  • 提交补丁
  • 总结7 y  G9 H- P7 `5 g7 L2 ^, D

' q4 o- j% {! o$ p+ j. w1 z, V1 ?& A' M% t9 Y5 Q6 G( u
1. 加入社区, N* \4 _% ~# N" X4 {+ f" e
如果想为linux贡献代码, 那么加入linux社区是必须的, 加入了社区, 不仅可以及时内核的最新消息, 而且可以及时和社区内有经验的内核开发者交流经验.2 e7 r+ p. v" h5 @- D& E- Y

; C; [2 z( H  Q. a2 a同时也是提交代码和讨论代码的地方, 了解社区的规则, 融入社区环境之中, 才能更好的学习内核, 体会内核开发的乐趣和成就感.* E  Z. v$ A/ G  X+ J

& u- G6 k' |! ~* X5 ~, i/ G
3 d  D/ F6 i3 {! L6 A4 w2. 编码风格
/ S/ s' U: p3 o9 A* L社区给我们提供了学习和贡献内核的地方, 但是为了避免不必要的麻烦(被别人指责或者无人理睬), 首先得好好了解一些内核代码的编码风格.+ f7 e$ D0 d" U+ O5 H. T4 r
7 {1 M# y" I9 U9 i: }2 F; ]; G
linux的编码风格都记录在 Documentation/CodingStyle 内核开发前要好好研读以下, 之后有时间我会整理到博客中., ^7 s! X" H9 a1 _
1 N# \( V8 u! f3 M% x  o4 {
+ k5 c; g- t4 V7 ]& g5 Y8 W8 s* t

0 ?& b1 N3 }3 C% E* d. N3. 提交补丁' w, L& A, a9 z
准备工作都完成之后, 就可以开始内核开发之旅了 7 J* W% X. f6 {: B

7 ^, {  ~  g1 x$ ]" V: |只要坚持不断的学习和尝试, 总有一天会为了内核贡献自己的代码, 这时候, 就需要了解如何提交代码, 也就是内核补丁.+ i' a& E; f( J$ D) f& F
" B& D+ v# V3 W: A/ H# d
: k/ B/ e# S0 _& R

6 K, i) B; G( r. y" h# n) m如果是发现了BUG或者有改善, 可以将BUG的描述或者改善代码发送给对应的维护者.(内核各个子系统的维护者信息在内核代码根目录下的 MAINTAINERS 文件中)+ N9 K1 T; h0 s3 k2 c

" m6 Z% v  R1 x0 n6 ?3 m/ U生成BUG或者改善代码的补丁有2种方法:
/ D6 Y+ Z, f" I7 F" ]) A) o$ ]6 u1 q; K. t: R
1. 用diff命令创建补丁
4 j+ G& E' c, [  [+ {% a" H1 C- B* |9 B( {) T
复制代码
) D9 x2 ^2 @, G# 生成patch3 ]3 a2 H; ^% i9 Y7 ]8 D: e: C
diff -urN linux-old/ linux-new/ > my-patch  # 比对整个内核代码文件夹$ K9 I4 X$ i' N9 K
OR4 q3 N) R  n5 B# u/ o% ]) p$ @6 _
diff -u linux-old/some/file linux-new/some/file > my-patch  # 比对某个文件
3 z4 F. f5 g$ {6 L$ x( g* Q+ t* k# Z# Z2 x+ n" y' x& c1 M
# 应用patch, 应用了patch之后, linux-old 和 linux-new 中的代码就一样了
4 ^+ U) D% _6 Z7 G: S3 g4 qcd linux-old
, ]) S* k0 M" Q/ w5 Kpatch -p1 < ../my-patch   # 这个命令是进入linux内核代码根目录内执行的, K* U/ H/ r1 {, w$ f4 i4 |
# m/ T1 J) B# Y( {: K
# PS. 还有个很有用的工具 diffstat
) J, o  `% \1 ^' Ediffstat -p1 my-patch  # 列出补丁所引起的变更的统计(加入或移去的代码行)
0 P4 P# B! a! ?% z( i复制代码
% m5 X4 T. w6 ?7 h( c
  V/ Q8 D# j" k2 z& w/ H/ i" g
" \6 F6 K' h% M4 w1 H% w2. 用git命令创建补丁
7 [; A8 r9 U5 p. I8 s$ J! ]% M# E4 I
复制代码( [+ Z) U/ z# S$ G" Q/ y" }
# 提交修改的或新增的代码
2 ~1 a5 ^0 X( K8 r( v, q8 qgit commit -a   # 提交所有修改的代码
4 {$ E* m0 a! E& QOR
5 L8 [" o/ ]) Ygit commit linux-src/some/file.c  # 提交某个修改的代码$ Y) d8 ^# a; i) x# T7 ?) @+ E
OR
: e) }+ O3 F6 T$ _/ |" @git add linux-src/some/new-file.c   # 把新增的文件加入版本库
2 n7 i; A5 J& H9 B/ u- Bgit commit -a       # 提交新增的文件
' v0 b* O) a- q* |" a" G" |; }! q: ?0 G: C  J
# 生成patch7 s* E9 g' v- l  M$ l. g3 l2 Z
git format-patch -N  # N 是正整数, 这条命令生成最后N次提交产生的补丁
1 `8 [: x( W9 }2 w; w% _4 }& [OR
$ A! Q7 Y2 P3 y7 O7 Bgit format-patch -1  # 最后1次提交产生的补丁
/ P( m( ~0 r' z& }
. ]2 o5 j1 a' Q( m& V# 应用patch: 和第一种方法一样
' m9 @! i7 n" Q/ a$ [+ `  n! o# i复制代码" \6 u* h3 s  {6 R, @' U4 i

  k8 d6 U8 U- c3 J% B+ j2 B7 X, s& E! O! Q9 y7 T" u
4. 总结6 ~& c; s) G9 B9 a* k. @4 S; Q, o
本章的内容都是和提交内核patch有关, 我还是内核的入门者, 没有社区的经验, 更别说提交内核patch的经验了." r: g9 g- f& ?; t  K- w
3 D# [: F( E) H+ o/ a$ D- Q
这篇笔记只是简单记录一些对入门者有用的信息, 便于以后查看.

该用户从未签到

2#
发表于 2021-4-2 10:37 | 只看该作者
Linux内核设计与实现之补丁, 开发和社区
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 11:03 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表