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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
linux最吸引我的地方之一就是它拥有一个高手云集的社区, 还有就是如果能=为linux内核中贡献代码, 一定是一件令人自豪的事情.
5 t7 d/ O! F  Z/ _! G- I' C
! L6 \6 }' \. s4 n下面主要总结一些和贡献代码相关的主要内容.: s& _  v# J4 |

  J1 _/ [9 R6 X. U
  • 加入社区
  • 编码风格
  • 提交补丁
  • 总结# w. A8 x: R) \# j% Z

; m- k; L5 k( P+ e: r6 p( ]8 S. ?5 @& d
1. 加入社区
- r8 I* J8 X3 u, G* `- l6 t如果想为linux贡献代码, 那么加入linux社区是必须的, 加入了社区, 不仅可以及时内核的最新消息, 而且可以及时和社区内有经验的内核开发者交流经验.
* N' c9 d4 K( o  n6 {
! M. n- L+ ~7 w6 h* d! F, l: V同时也是提交代码和讨论代码的地方, 了解社区的规则, 融入社区环境之中, 才能更好的学习内核, 体会内核开发的乐趣和成就感.# _+ u4 o4 Z1 S. F
8 U0 K) Q; k) r8 @3 h

  K0 _% v: j3 }8 B' ~  ?' j( Z2. 编码风格
. e6 F) m7 G+ ]' k; E社区给我们提供了学习和贡献内核的地方, 但是为了避免不必要的麻烦(被别人指责或者无人理睬), 首先得好好了解一些内核代码的编码风格.
5 x. H2 a0 X# P9 ~3 l9 A
) C& Z: G# V. t1 F, v  ?$ O7 zlinux的编码风格都记录在 Documentation/CodingStyle 内核开发前要好好研读以下, 之后有时间我会整理到博客中.' s. [' [* T8 F9 V% f' {( G1 |8 @
& R! t; ^$ Y6 u0 R& p& ~

, U9 m- f& i! [  p' R  u( [5 [5 v" _
3. 提交补丁7 `) F; U& n; X6 ~- I* c
准备工作都完成之后, 就可以开始内核开发之旅了 8 m# F  i9 {/ ~6 Z: l8 w. |
& p, r" h) b2 D$ A# x6 R
只要坚持不断的学习和尝试, 总有一天会为了内核贡献自己的代码, 这时候, 就需要了解如何提交代码, 也就是内核补丁.
# R& L! u# ]* K7 `
- ]( Q; W* ]0 a' \3 O; b $ Z4 j, w, x/ D$ l
% h! D- N9 I5 V5 E  i
如果是发现了BUG或者有改善, 可以将BUG的描述或者改善代码发送给对应的维护者.(内核各个子系统的维护者信息在内核代码根目录下的 MAINTAINERS 文件中)
/ H: @* L! C' V% |$ S4 L
* Z; L4 c/ J/ }, m! ~' J生成BUG或者改善代码的补丁有2种方法:& e( `0 u8 M; M

' A5 e4 P, R4 H. M* h  \1. 用diff命令创建补丁
: [& K- s  x  Y8 C: y; w! ~$ b7 H+ z5 T; ]6 ]
复制代码& N" t  r( q0 @6 D5 Y
# 生成patch+ E% O- R" L  t2 K7 J; d
diff -urN linux-old/ linux-new/ > my-patch  # 比对整个内核代码文件夹
, n6 l% o- c6 I* e+ Q5 J$ N: {OR1 _+ e4 `+ A4 Y( Z7 Q& }
diff -u linux-old/some/file linux-new/some/file > my-patch  # 比对某个文件1 m# c8 U7 l* b; L8 t. M

- s# z+ k  ^- ]3 [$ J/ X$ O# 应用patch, 应用了patch之后, linux-old 和 linux-new 中的代码就一样了' _5 S/ B$ F: P2 a, j  [$ H
cd linux-old
: m, @& G3 z1 T, V& w! o% }patch -p1 < ../my-patch   # 这个命令是进入linux内核代码根目录内执行的# A& J7 k) p# [! G( y0 u( G5 z

3 I' H2 z0 D% L% C, n5 Z, }2 p# PS. 还有个很有用的工具 diffstat& }+ d$ p: C7 h- t+ E# b+ _
diffstat -p1 my-patch  # 列出补丁所引起的变更的统计(加入或移去的代码行)
, U  r6 x3 ~- }% c, q' z( d复制代码* G% a9 Z2 b# K7 E
, w' [: P' ^4 s% J9 F: ?% H

* W  ^# G2 V: q; `5 I; }6 {% K2. 用git命令创建补丁
* I7 B- _# z2 S9 x5 G% q
4 W3 a% {9 ?/ D+ |% O复制代码. G  t4 R/ I* ~) `9 _1 I4 x8 q" }
# 提交修改的或新增的代码
' u4 @. b5 J! l; Z4 S. s" rgit commit -a   # 提交所有修改的代码
8 {! K6 u( R: gOR3 E+ a' s/ I' B: I$ I
git commit linux-src/some/file.c  # 提交某个修改的代码) e# I% n, g/ k( }2 t
OR
# b2 U; F8 H7 g1 Qgit add linux-src/some/new-file.c   # 把新增的文件加入版本库
6 X9 V# i" x% k% Z5 l. ^7 a8 lgit commit -a       # 提交新增的文件
4 S$ }8 I0 l0 @* i0 _- F% x, B7 [9 i9 s, M" {- o. T' \. t$ E8 Z
# 生成patch
( h& E# M7 [) y& @3 `6 Fgit format-patch -N  # N 是正整数, 这条命令生成最后N次提交产生的补丁4 D) k. ]. i1 B- O. s0 g
OR. {* z3 t0 q% w7 V" x" V: E, {
git format-patch -1  # 最后1次提交产生的补丁# |5 a) h# I& J5 ~8 i/ L4 E1 J

% W* U4 A) i$ l# 应用patch: 和第一种方法一样0 }3 b8 [) m4 U3 E) J
复制代码
; a4 F) I# k5 k6 X ! ^8 ?- J% S9 ^  K2 @5 `0 F' e
8 l9 d! t) J8 I' L
4. 总结. |# t9 F+ D, s5 f# K6 ?7 ]
本章的内容都是和提交内核patch有关, 我还是内核的入门者, 没有社区的经验, 更别说提交内核patch的经验了.
1 k1 S, V: I& x3 ^
; e4 L6 S! q/ ]3 ]这篇笔记只是简单记录一些对入门者有用的信息, 便于以后查看.

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-24 18:39 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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