网络规划设计师培训哪个好,三明网站优化,百度公司地址,郑州建设公司网站参考博客文章#xff1a;
向linux内核提交代码 - 知乎 一、下载Linux内核源码
通过git下载Linux内核源码#xff0c;具体命令如下#xff1a;
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
实际命令及结果如下#xff1a;
penghaoDin…参考博客文章
向linux内核提交代码 - 知乎 一、下载Linux内核源码
通过git下载Linux内核源码具体命令如下
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
实际命令及结果如下
penghaoDing-Perlis-MP26JBT0:~/kernel_commit$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
正克隆到 linux...
remote: Enumerating objects: 9727840, done.
remote: Counting objects: 100% (249/249), done.
remote: Compressing objects: 100% (125/125), done.
接收对象中: 100% (9727840/9727840), 2.65 GiB | 126.00 KiB/s, 完成.
remote: Total 9727840 (delta 166), reused 146 (delta 124), pack-reused 9727591
处理 delta 中: 100% (7980690/7980690), 完成.
正在更新文件: 100% (81766/81766), 完成.注 整个过程耗时非常长笔者是经过了大约一晚上的时间头天下班前开始下载第二天一上班已下载完具体是什么时候下载完成的不确定但至少得需要4—6小时。 二、修改要存在问题的代码
针对于你所发现的Linux内核代码所存在的不足进行相应的修改。
实例
本次修改的代码位于Linux Kernel源码根目录的drivers/gpu/drm/drm_framebuffer.c中在framebuffer_check函数中。
原来的代码片段如下
static int framebuffer_check(struct drm_device *dev,const struct drm_mode_fb_cmd2 *r)
{const struct drm_format_info *info;int i;……/* now let the driver pick its own format info */info drm_get_format_info(dev, r);for (i 0; i info-num_planes; i) {unsigned int width fb_plane_width(r-width, info, i);unsigned int height fb_plane_height(r-height, info, i);unsigned int block_size info-char_per_block[i];……}……return 0;
}经过修改后的代码如下
static int framebuffer_check(struct drm_device *dev,const struct drm_mode_fb_cmd2 *r)
{const struct drm_format_info *info;int i;……、/* now let the driver pick its own format info */info drm_get_format_info(dev, r);if (!info) {drm_dbg_kms(dev, no matched format info\n);return -EFAULT;}for (i 0; i info-num_planes; i) {unsigned int width fb_plane_width(r-width, info, i);unsigned int height fb_plane_height(r-height, info, i);unsigned int block_size info-char_per_block[i];……}…… return 0;
}可以看到是加入了对于info为空的判断增强了代码的健壮性。 三、查看修改是否正确
完成上述修改并保存后使用git diff命令查看所修改的内容是否符合预期。
实际命令及结果如下
penghaoDing-Perlis-MP26JBT0:~/kernel_commit/linux/drivers/gpu/drm$ git diff
diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c
index aff3746dedfb..be7dd1998c04 100644
--- a/drivers/gpu/drm/drm_framebuffer.cb/drivers/gpu/drm/drm_framebuffer.c-194,6 194,10 static int framebuffer_check(struct drm_device *dev,/* now let the driver pick its own format info */info drm_get_format_info(dev, r);if (!info) {drm_dbg_kms(dev, no matched format info\n);return -EFAULT;}for (i 0; i info-num_planes; i) {unsigned int width fb_plane_width(r-width, info, i);四、添加到本地Git仓库
使用git add命令将修改添加到本地Git仓库。
实际命令及结果如下
penghaoDing-Perlis-MP26JBT0:~/kernel_commit/linux$ git add drivers/gpu/drm/drm_framebuffer.c
penghaoDing-Perlis-MP26JBT0:~/kernel_commit/linux$ 五、将暂存区里的改动给提交到本地的版本库
使用git commit命令将暂存区里的改动给提交到本地的版本库同时输入详细提交信息。
实际过程及结果如下
1运行git commit -s命令
penghaoDing-Perlis-MP26JBT0:~/kernel_commit/linux$ git commit -s2输入提交信息
一定要写好commit logcommit log的一般格式是
标题
空行
详细描述标题一般的格式是 修改的大类patch的主要描述尽量简短如
platform/x86/samsung-laptop: Add support for Samsungs NP7[34]0U3E models注意标题下面一定要有一个空行标题下面一定要有一个空行标题下面一定要有一个空行
本次实例如下
Add judgement for return value ofdrm_get_format_info().Since drm_get_format_info() may return NULL, so a judgement of return
value is needed to add.Signed-off-by: Peng Hao penghaodingdao.com六、生成patch
都确认无误后生成patch。使用git format-patch命令将修改添加到本地Git仓库。
实际命令及结果如下
penghaoDing-Perlis-MP26JBT0:~/kernel_commit/linux$ git format-patch -1
0001-gpu-drm-drm_framebuffer.c-Add-judgement-for-return-v.patch
penghaoDing-Perlis-MP26JBT0:~/kernel_commit/linux$ cat 0001-gpu-drm-drm_framebuffer.c-Add-judgement-for-return-v.patch
From 6f04db02f2fbb5851797ee5a63bb53483ea4fdb4 Mon Sep 17 00:00:00 2001
From: Peng Hao penghaodingdao.com
Date: Thu, 26 Oct 2023 10:45:54 0800
Subject: [PATCH] gpu/drm/drm_framebuffer.c: Add judgement for return value ofdrm_get_format_info().Since drm_get_format_info() may return NULL, so a judgement of return
value is needed to add.Signed-off-by: Peng Hao penghaodingdao.com
---drivers/gpu/drm/drm_framebuffer.c | 4 1 file changed, 4 insertions()diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c
index aff3746dedfb..be7dd1998c04 100644
--- a/drivers/gpu/drm/drm_framebuffer.cb/drivers/gpu/drm/drm_framebuffer.c-194,6 194,10 static int framebuffer_check(struct drm_device *dev,/* now let the driver pick its own format info */info drm_get_format_info(dev, r);if (!info) {drm_dbg_kms(dev, no matched format info\n);return -EFAULT;}for (i 0; i info-num_planes; i) {unsigned int width fb_plane_width(r-width, info, i);
--
2.37.1 七、获取相应模块的内核代码维护者列表
生成补丁文件之后就可以通过邮件工具来发送补丁的内容了。 由于linux整个内核十分庞大所以内核的维护也是由很多人负责。我们需要将补丁发送给该模块、该文件的维护者。 使用命令 ./scripts/get_maintainer.pl xxx得到所修改文件的维护者的邮箱列表。实际命令及结果如下
penghaoDing-Perlis-MP26JBT0:~/kernel_commit/linux$ ./scripts/get_maintainer.pl drivers/gpu/drm/drm_framebuffer.c
Maarten Lankhorst maarten.lankhorstlinux.intel.com (maintainer:DRM DRIVERS AND MISC GPU PATCHES)
Maxime Ripard mripardkernel.org (maintainer:DRM DRIVERS AND MISC GPU PATCHES)
Thomas Zimmermann tzimmermannsuse.de (maintainer:DRM DRIVERS AND MISC GPU PATCHES)
David Airlie airliedgmail.com (maintainer:DRM DRIVERS)
Daniel Vetter danielffwll.ch (maintainer:DRM DRIVERS)
dri-devellists.freedesktop.org (open list:DRM DRIVERS)
linux-kernelvger.kernel.org (open list)八、配置.gitconfig文件
在执行git send-email之前需要配置好git配置文件。 git配置文件路径是 ~/.gitconfig , 打开并编辑该文件原始内容如下
[user]email penghaodingdao.comname Peng Hao
[safe]……向其中添加以下内容
[sendemail]smtpEncryption sslsmtpServer smtp.feishu.cnsmtpServerPort 465smtpUser penghaodingdao.comsmtpPass jeplgdBxk3MqLcib以上信息是从哪里来的 由于我们的邮箱用的是飞书因此是在飞书中获得的设置。如下图所示 信息就是从这里得到的。只是密码每次会有所不同需要每次修改.gitconfig文件是不是每次必须换需要进一步尝试。
[sendemail]smtpEncryption sslsmtpServer smtp.feishu.cnsmtpServerPort 465smtpUser penghaodingdao.comsmtpPass jeplgdBxk3MqLcib九、发送邮件
完成了邮箱的SMTP服务配置之后就可以发送邮件了。 使用git send-email发送邮件实际命令及结果如下
penghaoDing-Perlis-MP26JBT0:~/kernel_commit/linux$ git send-email --to maarten.lankhorstlinux.intel.com,mripardkernel.org,tzimmermannsuse.de,airliedgmail.com,danielffwll.ch --cc dri-devellists.freedesktop.org,linux-kernelvger.kernel.org,penghaodingdao.com 0001-gpu-drm-drm_framebuffer.c-Add-judgement-for-return-v.patch
0001-gpu-drm-drm_framebuffer.c-Add-judgement-for-return-v.patch
(mbox) Adding cc: Peng Hao penghaodingdao.com from line From: Peng Hao penghaodingdao.com
(body) Adding cc: Peng Hao penghaodingdao.com from line Signed-off-by: Peng Hao penghaodingdao.comFrom: Peng Hao penghaodingdao.com
To: maarten.lankhorstlinux.intel.com,mripardkernel.org,tzimmermannsuse.de,airliedgmail.com,danielffwll.ch
Cc: dri-devellists.freedesktop.org,linux-kernelvger.kernel.org,penghaodingdao.com
Subject: [PATCH] gpu/drm/drm_framebuffer.c: Add judgement for return value of drm_get_format_info().
Date: Thu, 26 Oct 2023 12:34:42 0800
Message-Id: 20231026043442.3170975-1-penghaodingdao.com
X-Mailer: git-send-email 2.37.1
MIME-Version: 1.0
Content-Transfer-Encoding: 8bitThe Cc list above has been expanded by additionaladdresses found in the patch commit message. By defaultsend-email prompts before sending whenever this occurs.This behavior is controlled by the sendemail.confirmconfiguration setting.For additional information, run git send-email --help.To retain the current behavior, but squelch this message,run git config --global sendemail.confirm auto.Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): yes注意此过程可能会出现问题。具体问题及解决方法请参考以下笔者博文 注 建议先通过git send-email --to 自己的邮箱看看自己能不能收到收到后打开邮件是什么样子。确认无误再发给上游邮件列表。 十、提交后的后续工作
邮件发送后就是等待别人的review了可能会有review的人给你回复邮件你只要正常的邮件沟通就可以。如果可能会指出你的问题可能会NACK掉你的patch或者让你重新修改后重新发送patch。