纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

Linux内核驱动接口详解

12月24日 乱人心投稿
  写作本文档的目的,是为了解释为什么Linux既没有二进制内核接口,也没有稳定的内核接口。这里所说的内核接口,是指内核里的接口,而不是内核和用户空间的接口。内核到用户空间的接口,是提供给应用程序使用的系统调用,系统调用在历史上几乎没有过变化,将来也不会有变化。我有一些老应用程序是在0。9版本或者更早版本的内核上编译的,在使用2。6版本内核的Linux发布上依然用得很好。用户和应用程序作者可以将这个接口看成是稳定的。执行纲要
  你也许以为自己想要稳定的内核接口,但是你不清楚你要的实际上不是它。你需要的其实是稳定的驱动程序,而你只有将驱动程序放到公版内核的源代码树里,才有可能达到这个目的。而且这样做还有很多其它好处,正是因为这些好处使得Linux能成为强壮,稳定,成熟的操作系统,这也是你最开始选择Linux的原因。入门
  只有那些写驱动程序的怪人才会担心内核接口的改变,对广大用户来说,既看不到内核接口,也不需要去关心它。
  首先,我不打算讨论关于任何非GPL许可的内核驱动的法律问题,这些非GPL许可的驱动程序包括不公开源代码,隐藏源代码,二进制或者是用源代码包装,或者是其它任何形式的不能以GPL许可公开源代码的驱动程序。如果有法律问题,请咨询律师,我只是一个程序员,所以我只打算探讨技术问题(不是小看法律问题,法律问题很实际,并且需要一直关注)。
  既然只谈技术问题,我们就有了下面两个主题:二进制内核接口和稳定的内核源代码接口。这两个问题是互相关联的,让我们先解决掉二进制接口的问题。二进制内核接口
  假如我们有一个稳定的内核源代码接口,那么自然而然的,我们就拥有了稳定的二进制接口,是这样的吗?错。让我们看看关于Linux内核的几点事实:取决于所用的C编译器的版本,不同的内核数据结构里的结构体的对齐方式会有差别,代码中不同函数的表现形式也不一样(函数是不是被inline编译取决于编译器行为)。不同的函数的表现形式并不重要,但是数据结构内部的对齐方式很关键。
  取决于内核的配置选项,不同的选项会让内核的很多东西发生改变:同一个结构体可能包含不同的成员变量有的函数可能根本不会被实现(比如编译的时候没有选择SMP支持一些锁函数就会被定义成空函数)。内核使用的内存会以不同的方式对齐,这取决于不同的内核配置选项。Linux可以在很多的不同体系结构的处理器上运行。在某个体系结构上编译好的二进制驱动程序,不可能在另外一个体系结构上正确的运行。
  对于一个特定的内核,满足这些条件并不难,使用同一个C编译器和同样的内核配置选项来编译驱动程序模块就可以了。这对于给一个特定Linux发布的特定版本提供驱动程序,是完全可以满足需求的。但是如果你要给不同发布的不同版本都发布一个驱动程序,就需要在每个发布上用不同的内核设置参数都编译一次内核,这简直跟噩梦一样。而且还要注意到,每个Linux发布还提供不同的Linux内核,这些内核都针对不同的硬件类型进行了优化(有很多种不同的处理器,还有不同的内核设置选项)。所以每发布一次驱动程序,都需要提供很多不同版本的内核模块。
  相信我,如果你真的要采取这种发布方式,一定会慢慢疯掉,我很久以前就有过深刻的教训稳定的内核源代码接口
  如果有人不将他的内核驱动程序,放入公版内核的源代码树,而又想让驱动程序一直保持在最新的内核中可用,那么这个话题将会变得没完没了。内核开发是持续而且快节奏的,从来都不会慢下来。内核开发人员在当前接口中找到bug,或者找到更好的实现方式。一旦发现这些,他们就很快会去修改当前的接口。修改接口意味着,函数名可能会改变,结构体可能被扩充或者删减,函数的参数也可能发生改变。一旦接口被修改,内核中使用这些接口的地方需要同时修正,这样才能保证所有的东西继续工作。
  举一个例子,内核的USB驱动程序接口在USB子系统的整个生命周期中,至少经历了三次重写。这些重写解决以下问题:把数据流从同步模式改成非同步模式,这个改动减少了一些驱动程序的复杂度,提高了所有USB驱动程序的吞吐率,这样几乎所有的USB设备都能以最大速率工作了。
  修改了USB核心代码中为USB驱动分配数据包内存的方式,所有的驱动都需要提供更多的参数给USB核心,以修正了很多已经被记录在案的死锁。
  这和一些封闭源代码的操作系统形成鲜明的对比,在那些操作系统上,不得不额外的维护旧的USB接口。这导致了一个可能性,新的开发者依然会不小心使用旧的接口,以不恰当的方式编写代码,进而影响到操作系统的稳定性。在上面的例子中,所有的开发者都同意这些重要的改动,在这样的情况下修改代价很低。如果Linux保持一个稳定的内核源代码接口,那么就得创建一个新的接口;旧的,有问题的接口必须一直维护,给LinuxUSB开发者带来额外的工作。既然所有的LinuxUSB驱动的作者都是利用自己的时间工作,那么要求他们去做毫无意义的免费额外工作,是不可能的。安全问题对Linux来说十分重要。一个安全问题被发现,就会在短时间内得到修正。在很多情况下,这将导致Linux内核中的一些接口被重写,以从根本上避免安全问题。一旦接口被重写,所有使用这些接口的驱动程序,必须同时得到修正,以确定安全问题已经得到修复并且不可能在未来还有同样的安全问题。如果内核内部接口不允许改变,那么就不可能修复这样的安全问题,也不可能确认这样的安全问题以后不会发生。开发者一直在清理内核接口。如果一个接口没有人在使用了,它就会被删除。这样可以确保内核尽可能的小,而且所有潜在的接口都会得到尽可能完整的测试(没有人使用的接口是不可能得到良好的测试的)。要做什么
  如果你写了一个Linux内核驱动,但是它还不在Linux源代码树里,作为一个开发者,你应该怎么做?为每个发布的每个版本提供一个二进制驱动,那简直是一个噩梦,要跟上永远处于变化之中的内核接口,也是一件辛苦活。很简单,让你的驱动进入内核源代码树(要记得我们在谈论的是以GPL许可发行的驱动,如果你的代码不符合GPL,那么祝你好运,你只能自己解决这个问题了,你这个吸血鬼把Andrew和Linus对吸血鬼的定义链接到这里)。当你的代码加入公版内核源代码树之后,如果一个内核接口改变,你的驱动会直接被修改接口的那个人修改。保证你的驱动永远都可以编译通过,并且一直工作,你几乎不需要做什么事情。
  把驱动放到内核源代码树里会有很多的好处:驱动的质量会提升,而维护成本(对原始作者来说)会下降。
  其他人会给驱动添加新特性。
  其他人会找到驱动中的bug并修复。
  其他人会在驱动中找到性能优化的机会。
  当外部的接口的改变需要修改驱动程序的时候,其他人会修改驱动程序
  不需要联系任何发行商,这个驱动会自动的随着所有的Linux发布一起发布。
投诉 评论 转载

w6威马限定场景无人驾驶技术车型在智能化方面,威马W6表现尤为突出,集威马汽车多项高科技于一身,堪称威马汽车的创新之作。威马W6搭载AVP无人自主泊车系统,拥有HAVP(自主学习泊车)和PAVP(高精地图泊车……当了19年华为董事长,任正非尊称她孙总,为何曾3次递交辞呈能与任正非比肩的企业家不多,其中女性就更少了,但孙亚芳绝对算得上一个。2009年,华为成功超越阿尔卡特朗讯,诺基亚、西门子,仅次于爱立信,成为全球第2大通信设备制造商。1……整治抢注热点名人商标,国家知识产权局频出手前段时间,华为创始人、总裁任正非23岁的小女儿姚安娜正式出道,引发了一阵舆论浪潮。有网友持质疑态度,也有网友表示支持她追逐梦想。随着舆论发酵而来的是姚安娜这三个字也迅速成为商标……数字藏品成贺岁新宠互联网企业纷纷试水玩时尚本报记者李冰见习记者余俊毅2022年春节将至,国内数字藏品市场春潮乍起,已有多家互联网平台及科技企业相继发布数字藏品,为春节添彩。1月26日下午2点,四川博物……岸田文雄闯大祸了!刚对北方四岛宣誓主权,随后俄舰开进日本海众所周知,日俄两国在北方四岛(俄称南千岛群岛)归属问题上存在争议,一直未能得到妥善解决,这直接导致日俄两国迟迟未能签订和平条约。日本新首相岸田文雄上台之后,利用这一问题要挟俄罗……pda多少钱一台,pda手持机多少钱,pda价格目前pda的应用范围是越来越广泛。很多客户都在网上寻找pda供应商,找到供应商之后,他们比较先问的不是选型pda,而是询问pda多少钱一台。其实呢?pda的价格差距还是很大的,……还在说千元机只有价格优势?iQOOZ3可让你大为改观对于很多消费者来说,选购手机时除了要考虑性能、体验外,价格也成为了重要因素之一,毕竟谁都想花更少的钱买到更好的配置。因此,不少厂商瞄准了这个需求点,推出了所谓的高性价比手机。但……Linux内核驱动接口详解写作本文档的目的,是为了解释为什么Linux既没有二进制内核接口,也没有稳定的内核接口。这里所说的内核接口,是指内核里的接口,而不是内核和用户空间的接口。内核到用户空间的接口,……java好用工具类一箩筐java好用工具类一箩筐可修改原始类型、对象引用包装类单线程:MutableInt、MutableLong、MutableObject,便于一个方法修改参数、lam……realmeX2飚轻旗舰配置,直锤友商?红米Note8Pro大家都知道,10002000元档一直以来都是手机厂商兵家必争之地。在性价比的行列里有小米打头阵,也有红米小金刚作为补充,更有背景强劲者荣耀来参战。同时,许多新兴品牌例如r……现在的智能锁安全性怎么样啊?有哪些优势指纹锁相较于安全性能低的传统机械锁,优势主要有几个方面。一、使用安全指纹锁采用的是生物识别技术,而我们都知道指纹是人体的生理特征,具有无法替代、复制的唯一性。而生物……高频面试题请聊一下JVM中堆和栈的区别上一回我们说完了JVM的内存结构,将JVM中有哪些元素已经搞清了。今天就再根据之前的主题接着延伸出一个更容易被面试官问到的题目。堆和栈的区别!这次我们就从以下……
虾酱怎么吃(虾酱怎么吃家常)许姓女歌手(姓徐的女孩名字)老树春深更著花(老树春深更著花的全诗)水银密度(高中物理水银柱压强问题)戊戌变法的背景(戊戌变法背景及原因)糖尿病中药(糖尿病可用的中药及中成药总结)身份证号码查询系统(身份证号定位查询系统)游唐山,一定要打卡这个火得一塌糊涂的网红新地标能吃的博物馆卖不动的英菲尼迪Q70,纯进口D级车大空间,价格已平齐3系科普下整体与部分关系原理及方法论科普下什么是氧化物科普下铜元素的知识点总结
教你如何主动和顾客发起沟通,纯粹问候法满血性能旗舰当之无愧!ROG枪神7Plus超竞版首发评测2021年9月大学生入党思想汇报范文之称造句用之称造句大全呆若木鸡成语故事(呆若木鸡的故事告诉我们什么道理)良心和天鲤2023年618买空调跟3月比能便宜吗古天乐做慈善的原因淘宝店铺详情页如何设计小儿热速清口服液怎么使用东北军元老常荫槐简介张学良为什么杀常荫槐?揭秘古代百万秦军集体消失之谜秦国如何二世而亡

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形