首页 > 系统相关 >Linux内核源码介绍

Linux内核源码介绍

时间:2024-09-06 12:52:41浏览次数:10  
标签:-- patch 源码 内核 Linux 邮箱 com

建议点击这里查看个人主页上的最新原文

点击这里在哔哩哔哩bilibili在线观看配套的教学视频

点击这里在哔哩哔哩bilibili在线观看配套的加餐视频(就是一些补充)

点击跳转到内核课程所有目录

内核社区

说到Linux内核,很多人可能会认为只有Linus这样的神才懂。但事实是任何人都能参与,比如我这样能力差的也参与到Linux内核社区了。可能很多人早就想贡献Linux内核了,但就是不知道怎么开始。

Linux内核有一个官方网站The Linux Kernel Archives,在这个网站上可以获取Linux内核源码以及其他相关源码

Linux内核社区主要以邮件交流为主,以下是一些常用的网站:

内核源码树

我们以社区最近的一个LTS(longterm support,长期维护版本)v6.6的代码来讲接下来的课程。

内核源码树根目录每个文件夹的描述如下(按字母顺序):

  • arch: architecture的缩写,体系结构相关。我们着重介绍arch/x86/arch/arm64/,在每个体系结构目录下,boot/是启动相关,configs/是配置相关,include/头文件相关,mm/内存管理相关,等等。
  • block: 块设备IO层相关。
  • certs: 认证相关。
  • crypto: 加密API,加密、散列、压缩、校验等算法。
  • Documentation: 文档,要多看,很有用。也可以看在线文档: https://www.kernel.org/doc/html/latest/
  • drivers: 设备驱动程序相关。
  • fs: 文件系统相关。我们主要介绍fs/目录下VFS(虚拟文件系统)相关的,还会介绍几个具体的文件系统,如fs/ext2/fs/xfs/fs/proc/fs/sysfs/等,当然具体的文件系统不会介绍得很详细,只说一个大概,主要还是以VFS的讲解为主。
  • include: 内核头文件相关。
  • init: 内核引导和初始化相关。
  • io_uring: 5.1版本引入的高性能异步IO框架,主要是为了加快IO密集型应用的性能。
  • ipc: 进程间通信相关。
  • kernel: 进程相关,包括进程管理和进程调度。
  • lib: 可以看成是一个标准C库的子集,如strlenmmcpysprintf等函数。
  • LICENSES: 许可证。
  • mm: 与体系结构无关的内存管理代码,注意与体系结构相关的代码在arch/mm/目录下。
  • net: 网络子系统,如TCP/IP等网络协议的实现。
  • rust: 内核除了C语言外采用的一门新开发语言,和C性能差不多,目前暂时主要用于驱动开发。
  • samples: 示例代码,很好的学习资源,不要放过。
  • scripts: 脚本文件,如make menuconfigmake scripts_gdb等都是调用这个目录下的脚本。
  • security: 安全模块,比如复杂的selinux
  • sound: 语音子系统相关。
  • tools: 开发工具相关。
  • usr: 早期的用户空间代码(initramfs),比如有打包和压缩用的cpio等。注意,usr的全称是Unix System Resources,不是user,不是user,不是user。为什么要强调不是user呢,因为有太多太多的人读成了user,咱们专业点,读成u, s, r,一个单词一个单词的读。
  • virt: 虚拟化相关,如kvm

上面是文件夹,接下来介绍根目录下的文件:

  • COPYING: 许可证。
  • CREDITS: 贡献者。
  • Kbuild: 内核顶层目录的Kbuild, 在进入子目录之前准备全局头文件并检查完整性。
  • Kconfig: 内核配置。
  • MAINTAINERS: 维护者名单。
  • Makefile: 设置编译参数。
  • README: 描述文档在哪里。

贡献Linux内核社区

准备补丁

你可以通过bugzillasyzbot发现内核bug,也可以通过阅读内核代码发现bug或进行重构。或者可以用calc-func-lines.sh脚本找到长函数(不容易阅读)进行重构。

可以参考内核仓库中的补丁,比如我提交的补丁。修改代码时要参考Linux内核代码风格

注意commit message每行长度不超过 72 个字符。

git commit命令之后,使用以下命令会生成补丁文件:

# -1 表示最后一次commit,
git format-patch -1

# 指定commit号
git format-patch --subject-prefix="PATCH next" -1 <commit号>

# 如果是第2个版本或第3个版本,需要指定v2或v3
git format-patch --subject-prefix="PATCH v2" -1

# 如果内容不变,重新发送(比如加一个抄送的人)
git format-patch --subject-prefix="PATCH resend,v2" -1

# 从指定的commit号数向前3个,共生成3个补丁
git format-patch --subject-prefix="PATCH resend,v2" -3 <commit号>

# 生成补丁集
git format-patch --subject-prefix="PATCH resend,v2" -3 commit号 --cover-letter
# 编辑0000-cover-letter.patch, 可参考patchwork上其他补丁的写法
vim 0000-cover-letter.patch

邮箱配置

  • 163邮箱配置: 默认情况下,163邮箱只能在网页和网易邮箱大师登录。如果要用git通过163邮箱发送邮件则需要对163邮箱进行配置。在pc端网页登录163邮箱,点击“设置 --> POP3/SMTP/IMAP”,开启SMTP服务,会弹出授权密码窗口,记下这个授权密码(也可以在下方新增授权密码或删除)。
  • foxmail邮箱(qq邮箱)配置: 在pc端网页登录foxmail邮箱,点击"Settings -> Third-party Services -> IMAP/SMTP", 点击"Generate Authorization Code"生成在.gitconfigthunderbird中登录的密码。
  • 腾讯企业邮箱配置: 登录腾讯企业邮箱个人账号(不是管理员),左上角“设置”,然后“邮箱绑定 -> 客户端专用密码 -> 生成新密码“,注意要记住这个密码,只会显示一次,忘记了就要重新生成密码。thunderbird中登录时的配置:
    • 收件服务器: 协议IMAP,主机名: imap.exmail.qq.com,端口: 993(或不填),连接安全性: 自动检测。
    • 发件服务器: 主机名: smtp.exmail.qq.com,端口: 465(或不填),连接安全性: 自动检测。

thunderbird邮件客户端

最新版本的thunderbird默认使用html格式发送和显示,需要更改配置,参考Plain text e-mail - Thunderbird

依次点击 Account Settings(账户设置) -> 地址簿 -> Composition & Addressing -> Composition(编写) -> 取消勾选 Compose messages in HTML format(以html格式编写消息)

thunderbird有个快捷键k,会忽略话题,不小心按下后邮件就会不再显示,可以在查看 -> 话题里勾选已忽略话题,就能看到不小心按下k而不显示的邮件。

还有,不建议订阅内核任何模块的邮件列表,因为太多了,一旦订阅邮箱基本就爆了,可以在邮件列表网站上选择对应的模块在线浏览,如果需要回复,可以把邮件下载下来保存成文件,然后用thunderbird打开文件,然后就可以回复了。如果实在要订阅,可以访问vger.kernel.orglinux-kernel mailing list FAQ

git发送邮件

安装软件:

sudo apt install git-email -y

163邮箱~/.gitconfig:

[sendemail]
	from = [email protected]
	smtpserver = smtp.163.com
	smtpuser = [email protected]
	smtpencryption = ssl 
	smtppass = 此处填写163邮箱的授权密码
	smtpserverport = 994 

foxmail(qq)邮箱~/.gitconfig:

[sendemail]
        from = [email protected]
        smtpserver = smtp.qq.com
        smtpuser = [email protected]
        smtpencryption = ssl 
        smtppass = 此处填写qq邮箱的授权密码

腾讯企业邮箱~/.gitconfig:

[sendemail]
        from = your_name@your_name.com
        smtpserver = smtp.exmail.qq.com
        smtpuser = your_name@your_name.com
        smtpencryption = ssl 
        smtppass = 此处填写腾讯企业邮箱的授权密码
        smtpserverport = 465

获取maintainer邮箱:

./scripts/get_maintainer.pl file1.patch

发送邮件:

# --to是主送,--cc是抄送
git send-email [email protected],[email protected] [email protected],[email protected] file1.patch file2.patch

标签:--,patch,源码,内核,Linux,邮箱,com
From: https://blog.csdn.net/chenxiaosongcsdn/article/details/141956169

相关文章

  • Linux,看这篇就够了
       Linux是一种免费的,可自由传播的类unix操作系统,具有多用户,多任务,支持多线路,多CPU,性能稳定,网络特性好优点;一、安装和启动Linux系统1、方式:1)使用裸机直接安装:早期、个人电脑2)使用虚拟机:VMware软件模拟一台或多台机器目前:安装CentOS2、安装过程:1)虚拟机的硬......
  • 仿 SOUL 社交友附近人婚恋约仿陌陌 APP 源码系统
    前言专门为单身男女打造的恋爱交友社区,就是一个由千千万万单身男女组建的大家庭。他们来自全国各地,或许有着不同的人生经历,却有着共同的对恋爱交友的渴望。他们可以通过文字、语音、视频聊天的方式,和镜头前的彼此诉说自己工作中发生的趣事,也可以分享自己在生活中遇到的惊喜。......
  • 如何查看Linux系统下Redis连接池是否已满
    Redis作为一个高性能的内存数据库,广泛应用于各类高并发场景中。然而,在使用Redis时,连接池的管理至关重要,特别是在高并发应用中,Redis的连接池是否已满会直接影响系统的性能和稳定性。因此,了解如何在Linux系统中监控Redis连接池的状态,尤其是在连接池接近或达到上限时,显得尤为重要。本......
  • Springboot高校竟赛活动报名管理系统ut5tx程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统功能:学生,评委,比赛信息,报名信息,竞赛信息,比赛结果,投诉建议开题报告内容一、项目背景与意义随着高等教育的不断发展,各类学科竞赛已成为培养学生实践能......
  • JSP就业系统的设计与实现kd92s(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统功能:用户,企业,招聘信息,投掷简历,课程信息,简历库,邀请信息,校园宣传会,报名信息,沟通信息开题报告内容一、选题背景与意义随着信息技术的快速发展和互联......
  • dropdown源码分析 -- ant-design-vue系列
    组件结构dropdown组件对参数做了一些处理,然后直接调用了vc-trigger组件来进行渲染,先看一下整体的组件调用结构。极简实现这个组件需要满足以下几个基本的功能:可以传入两个插槽default和popup,default是默认展示的节点,点击后可以弹出popup。popup可以指定在文档......
  • vc-align源码分析 -- ant-design-vue系列
    vc-align源码分析源码地址:https://github.com/vueComponent/ant-design-vue/tree/main/components/vc-align1基础代码1.1名词约定需要对齐的节点叫source,对齐的目标叫target。1.2props提供了两个参数:align:对齐的配置target:一个函数,用于获取对齐的目标dom1.3主要......
  • 基于ECharts+JS+Flask 交互可视化呈现NBA近期比赛信息及球队排名及数据 | 源码分享
    目录文章|内容结语|源代码文章|内容和大家分享一个我在闲暇之余写的一个小项目。为了能够更加直观的了解近期的NBA比赛信息、球队排名以及数据,本项目采用了ECharts、JS、Flask等技术进行可视化呈现。通过这种方式,我们可以更直观的了解NBA比赛,为球迷提供更好的观赛体验......
  • openHarmony南向开发笔记(四)Linux设备树
    openHarmony南向开发笔记(四)Linux设备树文章目录openHarmony南向开发笔记(四)Linux设备树一、什么是设备树二、设备树的组成部分三、设备树基本语法四、dts常用符号含义一、什么是设备树Linux设备树(DeviceTree)是Linux内核用来描述硬件信息的一种数据结构,它在内核启动......
  • Linux 磁盘管理-终于把fdisk命令创建分区挂讲明白了
    今天给伙伴们分享一下Linux磁盘管理-fdisk命令创建分区挂在使用,希望看了有所收获。我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步!如果伙伴们看了文档觉得有用,欢迎大......