作者介绍:
梁金荣:南京邮电学院陈莉君院长2022年结业硕士研究生,熟悉Linux内核原理,主要研究kvm、eBPF、Linux网路子系统,目前就职腾讯后台开发。热爱开源,弘扬开放、自由和分享。
内核小白参与Linux社区贡献是哪些样的体验呢?本文通过分享修补内核小bug社区讨论的过程,分享社区贡献的体验。
近来在编译Linux内核文件时,出现了这样的编译错误:
经过剖析,发觉是glibc库getgid函数的问题,之后用syscall的形式取代了glibc库函数调用,修补了这个编译错误,并制做了一个补丁发到了Linux社区:
补丁发到社区不久后,美国一位内核开发者回复了我的电邮,他说查了指南,修补的方式应当是添加unistd.h的头文件:
收到电邮的我半信半疑linux 论坛,决定去验证一下,我根据他的方式去更改源码,编译后问题依旧存在。我开始怀疑是我机器环境的问题,于是我搭建了不同的环境,在不同的操作系统下进行测试,发觉ubuntu是才能正常编译的。而且,这是为何呢?之后我继续找缘由,发觉是glibc库版本造成的,glib2.3之后的版本才能有gettid函数,高于2.3版本的glibc库使用gettid函数是会发生报错的。于是我又给社区发了电邮,告诉她们发生报错的缘由,之后说为了更好的兼容性,就用syscall的形式调用函数来解决报错:
此后,我很快又收到他的电邮,内容大致是“oklinux网络内核分析与开发,用syscall没哪些大不了…”,并给出了Reviewed-by:
后来,一位微软内核开发者回复了电邮,他说指南中表明,gettid首次出现在kernel2.4.11,glibc2.30中添加并支持这个函数的使用。与其记住这个函数的使用,是否可以有条件地定义gettidlinux网络内核分析与开发,比如检测glibc的版本或则做一个宏定义:
不久后,又收到了内核开发者的回复,他说发觉内核中有好几个文件有这样的情况linux学习,可以把宏定义置于一个头文件里,现今的问题是置于那个头文件呢?
很快又收到了电邮:
目前这个patch还在讨论中,觉得到参与社区贡献是一件很有意思的事,不但可以很快提高自己的能力,但是是在做一件很有意义的事。这么该怎么参与社区贡献呢,先从阅读这几个内核文档开始吧:
本文短信地址: