linux内核社区

2023-11-05

这本阿里P8撰写的算法笔记,再次推荐给大家,身边不少朋友学完这本书最后加入大厂:

Github 疯传!史上最强悍!阿里大佬「LeetCode刷题手册」开放下载了!

译者序:这是一篇很重要的文档,它介绍了内核开发的方方面面。这篇文档已被加入到内核源码树的Documentation文档里(名字为HOWTO),你可以在最新的内核树里找到它。尽管已经有网友翻译过这篇文档,但是我还是决定自己再翻译一遍。翻译完之后,我的感触是如果依靠翻译来进行学习,速度太慢了。以后的技术文档直接看英文,适当的做做笔记即可。

山涛

-----------------------------------------------------

How to do Linux Kernel development

-----------------------------------------------------

关于如何进行Linux Kernel development,这篇文档是最值得你阅读的一篇。它指导你如何成为一名Linux内核开发者以及如何和Linux内核开发社区一同工作。尽管它不包含内核编程的技能方面的知识,但是本篇能够给你正确的指导去做内核开发。

如果这篇文档讲述的任何东西已经过时了的话,请给这篇文档的维护者发送你的更新。

Greg Kroah-Hartman greg@kroah.com

Introduction

-----------------

你想成为一名Linux内核开发者吗?或者你的老板曾经告诉你:去给某个设备写个Linux驱动程序。这篇文档的目标是,通过描述你进行开发时需要经历的一些流程规则去指导你如何与社区一起工作,教会你所需要的一切从而让你实现你的目标(成为一名合格的内核开发者,或者写出合格的令老板满意的驱动程序);这篇文档也会说明内核社区工作的风格和原因。

内核绝大部分代码是基于C语言编程,与体系结构有关的一小部分由汇编完成。很好的理解和掌握C语言,是内核开发的必备要求。汇编语言(不同的体系结构有不同的汇编语言)不是必需的,除非你计划做体系结构相关的底层开发。如果你想加强C语言的掌握,很好的参考资料如下:

- "The C Programming Language" by Kernighan and Ritchie [Prentice Hall]
- "Practical C Programming" by Steve Oualline [O'Reilly]

Linux内核是使用GNU C和GNU工具链完成的。尽管它遵循ISO C89标准,但是内核的编写也使用了许多的GNU C的扩展特性,这些特性不属于标准的一部分。内核的C编程环境自成体系,不依赖于C标准库,所以C标准的一部分特性没有被支持:例如Arbitrary long long divisions和浮点指针不被支持。有时你会很难理解内核基于GNU工具链的一些假定以及内核使用的一些GNU C扩展,不幸的是对于这类问题没有确定性的参考资料。如果你遇到这类问题,建议你查阅GCC的info pages来获取相关的信息(在Linux PC上,通过命令 info gcc可以获得信息)。

请记住你正在学习如何与已经存在的内核开发社区一起工作。内核开发社区由全球不同地方的开发人员组成,它以代码、风格、开发流程的高质量标准著称。这些高质量的标准使内核开发社区(这个组织非常大,地理位置非常分散)能够非常有效的进行。应当提早努力学习这些高质量标准(编程风格、代码要求以及开发流程),它们有很好的文档;不要期望内核开发社区别的开发人员会适应你自己的或者你公司的开发风格。

Legal Issues

------------------

Linux 内核代码基于GPL许可协议发布。请阅读内核源码树的主目录里的COPYING文件,它提供了GPL许可的详细描述。如果你有关于GPL许可的进一步问题,请联系一名律师,不要在Linux kernel mailing list里询问。Linux kernel mailing list里的开发人员不是律师,所以你不应当听取他们的任何关于法律事务的建议。

对于一些通常的关于GPL许可的问题和解答,请参考:

http://www.gnu.org/licenses/gpl-faq.html

Documentation

---------------------

Linux内核源码树里有大量的非常有用的文档用于学习,使你与内核社区相互促进和共同发展。当一个新的特性要加入到内核里,建议相关的文档也要加入到内核里,用于描述如何使用这个新特性;当一个内核的修改导致了内核提供给用户的接口发生了变化,建议你发送信息或者一个补丁给mtk-manpages@gmx.net,告诉manual pages的维护者用户接口的变化。

这里罗列了一些内核源码树里的需要阅读的文档:

README

这篇文档简要的介绍了Linux内核的背景,描述了配置和build内核需要什么。一个刚刚接触内核的新手应当从这里开始。(注:build kernel,就是编译内核源代码,生成可供系统使用的内核二进制文件(vmlinux/zImage)的过程。

Documentation/Changes

这篇文档给出了一个用于成功编译和运行内核的各种软件包的列表的最小集合。

Documentation/CodingStyle

这篇文档描述了Linux内核编码风格,和一些隐藏在背后的基本原理。所有的想加入内核的新代码应当遵循这篇文档的指导。绝大数的内核代码维护者只愿意接受那些符合这篇文档描述的风格的补丁,许多内核开发者也只愿意审查那些符合Linux内核编码风格的代码。

Documentation/SubmittingPatches

Documentation/SubmittingDrivers

这些文档清楚而又详细地告诉你如何成功的创建和向社区递交一个补丁,包括:

----邮件内容

----邮件格式

----发送者和接收者

遵循文档里提倡的规则并不一定保证你提交补丁成功(因为所有的补丁遭受详细而严格的内容和风格的审查),但是不遵循它们,提交补丁肯定不成功。

其他的一些非常优秀的描述如何正确的创建补丁的文档如下:

"The Perfect Patch"
http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt
"Linux kernel patch submission for
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux内核社区 的相关文章

  • 用MATLAB实现雅克比迭代、高斯-赛德尔迭代以及超松弛迭代

    文章目录 前言 一 解线性方程组的方法 二 解线性方程组的迭代法及其代码实现 1 迭代法的收敛性 2 基本参数设置 3 雅克比 Jacobi 迭代 4 高斯 塞德尔 Gauss Seidel 迭代 5 超松弛 SOR 迭代 总结 前言 近期
  • 在opencv3中的机器学习算法

    在opencv3 0中 提供了一个ml cpp的文件 这里面全是机器学习的算法 共提供了这么几种 1 正态贝叶斯 normal Bayessian classifier 我已在另外一篇博文中介绍过 在opencv3中实现机器学习之 利用正态
  • 线性回归实现人脸识别——ORL数据集

    今天写一个比较简单的机器学习例子 使用线性回归实现人脸识别 使用的数据集是ORL数据集 算法描述 输入 图片矩阵img 标签信息label 测试图片test 对每一个类 第一步 从图片矩阵中读出来一类图片 划分为训练集 X 与测试集 y 第
  • 求 1-10 的奇数之积,偶数之和。

    i 1 even sum 0 偶数 odd sum 0 奇数 while i lt 10 循环10次 if i 2 0 even sum even sum i else odd sum odd sum i i 1 print 1 10偶数之
  • React-从0到1搭建一个React项目(一)

    文章目录 架构介绍 第三方组件库 项目准备 环境准备 使用create react app初始化项目 创建项目目录结构 安装第三方库 利用工作之余的时间学习了react 今年一回来 部门要在公众号上面开发一个积分商城 于是准备让我用reac
  • 嵌入式Linux设置开机自动运行程序(基于BusyBox init)

    文章目录 目的 BusyBox init启动流程 inittab rcS 和 rcK 设置开机自动运行程序 总结 目的 开机自动运行程序 或者说系统启动时自动运行程序 这是经常会需要用到的功能 这个功能通常依托于 init 程序实现 ini
  • Log4Net记录日志级别

    level 中的级别 表示记录那些情况下的日志
  • 安装Catia显示无法启动服务器,win10catia r20应用程序无法正常启动的解决办法

    catia r20是一款用于模具设计的专业软件 能够给用户提供十分完善的建模技术 但近日有用户却反映说自己的win10正式版电脑出现了catia r20无法正常启动的情况 那我们要怎么解决这一问题呢 下面小编就来为大家分享关于win10ca
  • spring cloud系列学习(十一、额外篇-建多模块项目-maven的聚合和继承)

    一个项目有很多模块 每个模块都会用到一些公共的依赖 这些公共的依赖若交由各个模块独自管理 若每个模块同一个依赖的版本号不一致 会造成很比问题 打包和开发测试环境下对同一jar包不同版本号的处理可能不一致 造成运行时和测试时结果不一致项目升级
  • Retrofit 接收字符串

    在Retrofit1 9中 GsonConverter是默认包含在包里面的并且会在RestAdapter创建的时候自动创建 结果就是 如果返回的是Json字符串将会自动地被转换为数据存取对象Data Access Object DAO 但是
  • Android 屏幕适配方案

    http blog csdn net lmj623565791 article details 45460089
  • 【元宇宙】临界质量,元宇宙的关键要素

    考虑到电气化和移动技术的普及过程 我们可以自信地说 元宇宙不会突然到来 同时 也不会有明确的 元宇宙之前 beforeMetaverse 和 元宇宙之后 afterMetaverse 阶段一它们只是对应着生活发生改变的历史时期 一些高管认为
  • 面向对象----类变量小坑

    先看一段代码 class A name a def init self pass a A print a name print 10 b A b name b print b name print a name print 10 c A c
  • 开发一个自定义“套壳“浏览器的开源方案--TlC_Browser

    目录 一 项目概述 二 技术选型 三 项目介绍 项目名称 TlC Browser 开发语言 VB6 浏览器内核 webview2 项目目的 在vb6调用h5 实现自定义的浏览器 参考资料 https github com sysdzw We
  • stable-diffusion-webui Restore faces Error

    stable diffusion webui Restore faces Error https github com AUTOMATIC1111 stable diffusion webui issues 1513 我认为这与损坏的安装有
  • redis多字段分页排序

    1 redis有序集合 sorted set 是在 Sets 的基础上增加了分数设置作为排序依据 所以除了具备 Sets 的特性外 还可以进行排序 它提供了一个 score 属性 正好可以用来做排序依据 2 单字段排序 用户类 Data N
  • @Autowired的实现原理

    1 了解 Autowired 在这之前你得了解SpringIOC容器的相关知识 含义 Autowired表示某个属性是否需要进行依赖注入 可以写在属性和方法上 注解中的required属性默认为ture 表示如果没有对象注入给属性则抛出异常
  • linux中kvm配置文件,如何在linux中通过kvm安装虚拟机

    8种机械键盘轴体对比 本人程序员 要买一个写代码的键盘 请问红轴和茶轴怎么选 在centOS中通过kvm安装虚拟机 环境搭建 虚拟机安装 按照常规步骤安装即可 唯一需要注意的点是需要在cpu选项处 将虚拟化选项全部打开 查看配置 查看硬件是
  • Android指纹识别深入浅出分析到实战(6.0以下系统适配方案)

    指纹识别这个名词听起来并不陌生 但是实际开发过程中用得并不多 Google从Android6 0 api23 开始才提供标准指纹识别支持 并对外提供指纹识别相关的接口 本文除了能适配6 0及以上系统 主要还提供6 0以下设备适配解决方案 指
  • 如何使android应用开机时自动启动,如何使APP开机自启动

    方案一 将app做成系统应用 直接安装在 system app 目录下 具体步骤为 1 在AndroidManifest文件中 添加 android sharedUserId android uid system 例如 image png

随机推荐

  • 万字长文详述ClickHouse在京喜达实时数据的探索与实践

    1 前言 京喜达技术部在社区团购场景下采用JDQ Flink Elasticsearch架构来打造实时数据报表 随着业务的发展 Elasticsearch开始暴露出一些弊端 不适合大批量的数据查询 高频次深度分页导出导致ES宕机 不能精确去
  • 利用555定时器的双电源电路原理

    参考电工天下电路原理图 致敬 555单电源变双电源电路 以下是电路图 时基电路555接成无稳态电路 3脚输出频率为20KHz 占空比为1 1的方波 3脚为高电平时 C4被充电 低电平时 C3被充电 由于VD1 VD2的存在 C3 C4在电路
  • Android/Linux EAS优化-schedtune

    Linux cgroups机制中的cpu cpuset schedtune子系统 跟linux android进程调度策略有关 记录下各项功能参数的用法 SchedTune SchedTune是一项与CPU调频相关的性能提升技术 它实现为一
  • matlab如何保存csv文件,Matlab:将输出写入csv文件

    我有一些数据 包括我想将它们存储在csv文件中的字符串和数字 作为函数输出的数字存储在1x20的数组中 所以在csv文件中 我希望有21列 因此 csv文件中的第一列应该是字符串 接下来的20列具有1x20数组中的信息 我怎么能这样做 我使
  • 使用InitializingBean实现策略模式

    1 创建SpringBoot项目 2 创建抽象类AbstractThreeHandler public abstract class AbstractThreeHandler implements InitializingBean Auto
  • 静态功耗与动态功耗

    文章目录 0 功耗源 1 动态功耗 1 1 翻转功耗 1 2 短路功耗 2 静态功耗 2 1 亚阈值泄漏电流 2 2 栅泄漏电流 2 3 结泄漏电流 2 4 竞争电流 2 5 降低静态功耗办法 0 功耗源 功耗的本质是能量耗散 由能量守恒定
  • 变电站仪器仪表检测图像数据集

    数据集中 总共包含8307张图像及对应的VOC格式标签 数据集下载链接 https download csdn net download ncusz 85003005
  • 清华镜像网站

    这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题 有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中 居左 居右 Sma
  • 浅谈UML中常用的几种图——鲁棒图

    什么是鲁棒图 鲁棒图包含 3 种元素 如图 8 2 所示 它们分别是边界对象 控制对象 实体对象 边界对象对模拟外部环境和未来系统之间的交互进行建模 边界对象负责接收外部输入 处理内部内容的解释 并表达或传递相应的结果 控制对象对行为进行封
  • Hive的概念及基本语法

    HIVE是什么 HIVE是一个可以将sql翻译为MR程序的工具 HIVE支持用户将HDFS上的文件映射为表结构 然后用户就可以输入SQL对这些表 HDFS上的文件 进行查询分析 HIVE将用户定义的库 表结构等信息存储hive的元数据库中
  • 移动端的屏幕分辨率与浏览器的视口宽度(视口大小)是两回事儿

    问 在移动端的Web设计中 屏幕的分辨率和视口大小是不是是两回事儿 答 是的 屏幕的分辨率和视口大小在移动端的Web设计中是两个不同的概念 屏幕分辨率 Screen Resolution 这指的是移动设备屏幕上的像素数量 通常以水平像素数和
  • linux替换文件内容 awk,Linux awk替换文本字符串内容

    awk是功能强大的文本分析工具 与grep搜索和sed编辑相比 awk在分析数据和生成报告时特别强大 简而言之 awk逐行读取文件 将每一行切成空格作为默认分隔符 然后对剪切的部分执行各种分析处理 awk pattern action fi
  • Python 自动刷新网页

    有些时候刚建的网站 要求达到一定量的浏览量 这个时候你写个小代码就能轻松搞定了 废话不多说直接看下面代码 import time from selenium import webdriver 需pip install selenium de
  • Google类库之一的guava

    1 参考教程 http ifeve com google guava
  • 项目中的通用查询参数类,它体现了项目架构的大局观

  • 比较zab、paxos和raft的算法的异同

    Zab 与 Paxos 联系 1 两者构建的系统都有一个 Leader 角色 Leader 进程负责协调多个 Follower 进程的运行 MultiPaxos不在此列 2 Leader 进程都会等待超过半数的 Follower 进程做出正
  • WTL 界面设计篇(CSkinListCtrl)

    头文件声明 CSkinListCtrl h pragma once include
  • 数据降维与可视化——t-SNE

    数据降维与可视化 t SNE 原文 https blog csdn net hustqb article details 78144384 声明 manifold 可以称之为流形数据 像绳结一样的数据 虽然在高维空间中可分 但是在人眼所看到
  • RapidMiner简单入门教程——入门必看超详细

    RapidMiner使用指南 01工具简介 02数据准备 导入 导出 数据清理 处理缺失数据 约简数据 处理不一致的数据 约简属性 处理缺失数据 移除观察项 集中趋势算数度量代替缺失值等ReplaceMissingValue 约简数据 屏蔽
  • linux内核社区

    这本阿里P8撰写的算法笔记 再次推荐给大家 身边不少朋友学完这本书最后加入大厂 Github 疯传 史上最强悍 阿里大佬 LeetCode刷题手册 开放下载了 译者序 这是一篇很重要的文档 它介绍了内核开发的方方面面 这篇文档已被加入到内核