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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
linux最吸引我的地方之一就是它拥有一个高手云集的社区, 还有就是如果能=为linux内核中贡献代码, 一定是一件令人自豪的事情.
# W2 @. n. ]3 h2 y! d/ Y
) J- c# i' A( h1 A/ F" }下面主要总结一些和贡献代码相关的主要内容.: s9 v$ Z9 k1 y, |! N
! I  ?% o, P  J- A
  • 加入社区
  • 编码风格
  • 提交补丁
  • 总结
    4 F5 m4 ]- i" c0 L$ p
, D- g2 s' I6 Q' ~+ O
$ {: F+ d8 s7 N
1. 加入社区- W; P7 j* O( \" L( C
如果想为linux贡献代码, 那么加入linux社区是必须的, 加入了社区, 不仅可以及时内核的最新消息, 而且可以及时和社区内有经验的内核开发者交流经验.& G; K2 `- a- G& v; v

0 s( q. J9 t( w( A9 C3 _- J- `同时也是提交代码和讨论代码的地方, 了解社区的规则, 融入社区环境之中, 才能更好的学习内核, 体会内核开发的乐趣和成就感.5 u  e  d4 n5 q# R7 P# G' y7 D

1 }' x/ Y9 T1 z4 n5 \3 O- |
2 O* K* v: c, s. D0 ~2. 编码风格) s! L  J  U& C! g6 @
社区给我们提供了学习和贡献内核的地方, 但是为了避免不必要的麻烦(被别人指责或者无人理睬), 首先得好好了解一些内核代码的编码风格.! C) \: {5 Q- z: c( |' }" |
/ G1 n5 C+ _3 A* }
linux的编码风格都记录在 Documentation/CodingStyle 内核开发前要好好研读以下, 之后有时间我会整理到博客中.
0 c, b3 n* |1 ?5 L! G9 r/ M$ y- O- ]( c$ F7 G. r

5 S. o# c$ r- {( |; h& S
' v3 O# M: \: i1 b  k0 w3. 提交补丁$ p" j/ {2 S# r0 W
准备工作都完成之后, 就可以开始内核开发之旅了
9 j' t$ h: N! k6 z7 {9 r2 ?
3 q/ ]5 I4 K/ G; I2 v6 ~9 ~只要坚持不断的学习和尝试, 总有一天会为了内核贡献自己的代码, 这时候, 就需要了解如何提交代码, 也就是内核补丁." s, R  r( {! L& _) F( [) L
' g- B  L+ I, |6 E! V/ j

% J% K1 m, S& M* j7 U' e; j9 I9 _4 B9 _! J8 T+ q
如果是发现了BUG或者有改善, 可以将BUG的描述或者改善代码发送给对应的维护者.(内核各个子系统的维护者信息在内核代码根目录下的 MAINTAINERS 文件中): H) I% f6 a0 h! s( T7 _& L1 @
% M; l8 u2 m  Q5 [7 o& G
生成BUG或者改善代码的补丁有2种方法:: Y. O: w8 l7 I# _% w' C

" A: L8 Z* A5 @1. 用diff命令创建补丁
: D3 Q3 y7 J" y- q6 n
! ~( U; j4 t  t复制代码* o5 r5 L6 w7 m2 _1 p6 f8 N0 R
# 生成patch5 N6 `, G: ^0 g& N7 `- t: u6 |* N
diff -urN linux-old/ linux-new/ > my-patch  # 比对整个内核代码文件夹: o1 l6 |! z! ~6 s& e
OR
& Q# |$ n3 m2 d( m0 ndiff -u linux-old/some/file linux-new/some/file > my-patch  # 比对某个文件
0 k" H9 X# e3 c+ y& n: K* V8 p4 ~* A: ~( A. y# {
# 应用patch, 应用了patch之后, linux-old 和 linux-new 中的代码就一样了6 F, }; [( y+ }) g" s9 i4 I
cd linux-old9 c. `$ ~) [. u, O: T; H
patch -p1 < ../my-patch   # 这个命令是进入linux内核代码根目录内执行的
" C4 d$ e% w# \8 B' g
# a+ ^& H& S+ \( }- s# PS. 还有个很有用的工具 diffstat! T: a: H0 \) n4 c) }! A- O
diffstat -p1 my-patch  # 列出补丁所引起的变更的统计(加入或移去的代码行)
% ~8 l! N' B6 _" L6 b5 a. @复制代码
  F  c) `" w1 l5 E5 w" @ 3 [5 _9 y. Q- P9 {- s1 v

3 ^( r! R7 Y! u8 M0 H7 o8 X2. 用git命令创建补丁
- W& v. [8 j6 D& X( _
: m' R& }2 ^1 ~" S& e复制代码. p$ d& j7 [5 q% u
# 提交修改的或新增的代码
" P9 A9 A5 s1 P- _: agit commit -a   # 提交所有修改的代码
' p: Y- o: `* Q# s5 ROR1 r  [, A: R% b
git commit linux-src/some/file.c  # 提交某个修改的代码
/ p- b4 p6 |' D) KOR: k$ a& |- ~9 N1 P& L
git add linux-src/some/new-file.c   # 把新增的文件加入版本库6 l: J7 P5 ^" R
git commit -a       # 提交新增的文件
/ t4 b) J4 z9 f6 L: N* w4 A: w* a5 d/ [* o1 a2 R
# 生成patch$ T. a- ?  v, q
git format-patch -N  # N 是正整数, 这条命令生成最后N次提交产生的补丁# x, K. o0 R* ?) W
OR
6 o, g5 k! z; H( Z4 ggit format-patch -1  # 最后1次提交产生的补丁
' G$ L4 ~8 ]5 s' z$ \$ f/ o% |* d: v4 x& n1 U
# 应用patch: 和第一种方法一样- Q/ y6 v5 u. o
复制代码
3 O3 I2 `$ I% q2 R; N
. B6 j, e; e1 t& }, w& p0 ?* A9 \& e6 C8 r) p7 C
4. 总结
9 \% s: y0 f/ Q3 p( v1 ~5 v7 R本章的内容都是和提交内核patch有关, 我还是内核的入门者, 没有社区的经验, 更别说提交内核patch的经验了.
9 O% \' Q8 c4 l# ~: j3 h3 w) Y3 x# c1 {# o
这篇笔记只是简单记录一些对入门者有用的信息, 便于以后查看.

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 16:19 , Processed in 0.187500 second(s), 24 queries , Gzip On.

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

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

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