探索Linux驱动的阶段:了解Linux Driver Staging (linux driver staging)

Linux系统下的驱动是操作系统与硬件之间交互的桥梁,作为操作系统内核中的一部分,其性能和稳定性极为重要。为了提升Linux驱动的质量和表现,Linux开发团队提出了Linux Driver Staging项目,该项目旨在提供一个平台,让驱动程序开发人员能够在掌握风险的同时,逐步将不成熟的驱动程序引入内核,以便更有效地维护和测试这些驱动程序。

本文将介绍Linux Driver Staging项目的背景、目的和实践,以及该项目对Linux驱动的质量和性能所带来的积极影响。

一、Linux Driver Staging项目的背景

Linux系统的驱动程序是一个功能强大的方面,它可以与各种硬件设备进行通信并完成各种任务。然而,编写内核代码时必须非常小心,因为驱动程序会影响操作系统总体的稳定性和性能。这导致了一个问题:许多驱动程序的开发人员可能没有精力或技能来完全掌握内核代码的范畴并开发出高质量的驱动程序。

这个问题深刻地影响到Linux的发展。随着Linux系统的普及,越来越多的硬件厂商希望将他们的硬件设备支持添加到Linux内核中,以获得更广泛的用户群体。Linux内核贡献者对这些驱动程序的压力越来越大,而这些驱动程序的开发人员又因无法主动推进和完善驱动程序而感到困惑。

为了解决这个问题,Linux开发团队在2023年推出了Linux Driver Staging项目。该项目旨在为开发驱动程序的开发人员提供一个平台,在其中他们可以引入尚未成熟的驱动程序,使其逐步变得稳定、去除缺陷并最终完善。这个平台没有在任何Linux内核分支中引入任何进程,但它确实提供了一组第三方内核模块,用于稳定开发和社区测试,如此一来便可在其后进行完整集成。

二、Linux Driver Staging项目的目的

Linux Driver Staging项目旨在提高Linux驱动程序的质量和性能,具体实现该目的的主要方法包括:

1、提供一个可以让Linux驱动程序开发人员开始使用和调试他们的代码的平台。

2、鼓励开发人员为他们的代码添加测试功能并公开其源代码,以便更广泛的社区进行测试和反馈。

3、鼓励开发人员在开发的早期引入他们的代码,以便社区在早期阶段就进行测试和反馈。

4、提供更容易维护和更新的代码,使开发人员能够专注于他们的源码的逻辑。

Linux Driver Staging项目还使用了一些具体的工具和流程,以确保开发人员能够尽量轻松地开始使用平台并在其中工作。例如,该项目包括一个包含大量可能有用的代码段的代码库,这些代码段被纳入一个称为“staging”的顶层文件夹中。该文件夹包含三个主要子目录:

1、drivers-staging – 包含实际的Linux驱动程序代码和它与驱动程序有很大不同的模块。

2、media-staging – 包含针对图像和视频领域的driver代码。

3、iio-staging – 包含用于成像和电位器输入的代码。

三、Linux Driver Staging项目的实践

当Linux开发人员要合并驱动程序时,他们通常需要满足很多条件。该驱动程序必须能够正确地与内核交互; 它需要使用Linux开发人员的实际格式; 它必须符合相应Linux开发人员的规范。在每个这样的合并之前,开发人员必须对代码进行全面的审查,以确保它是正确的、高质量的和安全的。

然而,开发人员往往无法一次提交完全完成的代码。在开发周期早期,代码可能不完全或有缺陷,只有在经过测试和修复后才能最终提交,这在某些情况下可能需要花费很长时间。为了解决这个问题,Linux Driver Staging项目提供了一个平台,让驱动程序开发人员能够逐步引入代码并进行社区测试。

通过Linux Driver Staging,开发人员可以首先提交其代码,并将它们添加到“internal”分支中。在此阶段,代码只能由驱动程序开发人员和内核维护人员访问。一旦流程通过,代码就会从“internal”分支移动到“staging”分支,成为Linux内核的一部分。这个过程可以被认为是一个安全的、逐步的过程,可以缩小不成熟驱动程序引入内核带来的风险。

四、Linux Driver Staging项目对Linux驱动的积极影响

Linux Driver Staging项目是为Linux驱动程序的开发和维护提供一个平台,以便更有效地测量和改进工作流程及减少任何潜在的不可预测的效果。该项目的目标是改善驱动程序的性能、可维护性和稳定性,并促进更广泛的合作和测试。

Linux Driver Staging项目使得内核开发人员和外部社区能够更快地测试和调试驱动程序,从而取得了快速并且准确的反馈。开发人员还能更快地被纠正需要修复的问题,因此Linux驱动的质量也得以保证。它提供了一个平台,可以帮助维护人员更好地理解代码,并更好地管理内核编码的工作流。

Linux Driver Staging的目标和价值在Linux社区中得到广泛认可。这个项目减轻了Linux开发人员的压力,使他们可以专注于提高Linux驱动程序的质量和性能,同时也使Linux驱动现在看起来更加开放和透明。

相关问题拓展阅读:

linux和centos的区别

linux的一个著名版本是red hat,本来是有个人版本和企业版本,后来个人版本不再开发,改为fedora。而企业版本呢是要收费的。centOS就是red hat企业版本的重写,不要收费的。

所以说centOS是linux操作系统的一个版本。

1、完全可以把CentOS理解为RedHat AS系列!它完全就是对RedHat AS进行改进后发布的!各种操作、使用和RedHat没有区别!

2、CentOS完全免费,不存在像RedHat AS系列那样需要序列号的问题。

3、CentOS独有的yum命令支持在线升级,可以即时更新系统,不像RedHat那样需要花钱购买支持服务!

4、CentOS修正穗拆了许多RedHat AS的BUG!

5、CentOS版本说明:

CentOS4.0等同于RedHat AS4

CentOS4.1等同于RedHat AS4 U1

CentOS4.2等同于RedHat AS4 U2

CentOS4.3等同于RedHat AS4 U3

CentOS4.4等同于RedHat AS4 U4

RedHat在发行的时候,碧配有两种方式:二进制的发行方式以及源代码的发行方式。无论是哪一种发行方式,你都可以免费猜慧枣获得(例如从网上下载),并再次发布。但如果你使用了他们的在线升级(包括补丁)或咨询服务,就必须要付费。

RedHat一直都提供源代码的发行方式,CentOS就是将RedHat发行的源代码重新编译一次,形成一个可使用的二进制版本。由于Linux的源代码是GNU,所以从获得RedHat的源代码到编译成新的二进制,都是合法。只是RedHat是商标,所以必须在新的发行版里将RedHat的商标去掉。

Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。

CentOS是免费的、开源的、可以重新分发的开源操作系统,CentOS(Community Enterprise Operating

System,中文意思是社区企业操作系统)是Linux发行版之一。区别为:

1、CentOS是基于Linux建立的操没镇作系统发行枯森粗版本;

2、Linux属于内核系统,只有终端命春芹令界面,无图形界面;

3、CentOS拥有终端命令界面和图形界面;

4、Linux和CentOS同属于开源系统。

虽然Android基于Linux内核,但是它与Linux之间还是有很大的差别,比如Android在Linux内核的基础上添加了自己所特有的驱动程序。下面我们就来分析一下它们之间究竟有什么关系?

android是否能称为一种新的操作系统呢?至少我自己认为不算是,它最多算作一个新的应用程序罢了。

一、Android为什么会选择Linux

成熟的操作系统有很多,但是Android为什么选择采用Linux内核呢?这就与Linux的一些特性有关了,比如:

1、强大的内存管理和进程管理方案

2、基于权限的安全模式

3、支持共享库

4、经过认证的驱动模型

5、Linux本身就是开源项目

更多关于上述特性的信息可以参考Linux 2.6版内核的官方文档,这便于我们在后面的学习中更好地理解Android所特有的功能特性。接下来分析Android与Linux的关系。

二、Android不是Linux

看到这个标题大家可能会有些迷惑,前面不是一直说Android是基于Linux内核的吗,怎么现在又不是Linux了?迷惑也是正常的,请先看下面几个要点,然后我们将对每一个要点进行分析,看完后你就会觉得Android不是Linux了。

因为它没有本地窗口系统,没有glibc的支持,而且并不包括一整套标准的Linux使用程序,同时增强了Linux以支持其特有的驱动。

1.它没有本地窗口系统

什么是本地窗口系统呢?本地窗口系统是指GNU/Linux上的X窗口系统,或者Mac OX X的Quartz等。不同的操作系统的窗口系统可能不一样,Android并没有使用(也不需要使用)Linux的X窗口系统,这是Android不是Linux的一个基本原因。

我很奇怪的是linux的Xwindow并不是其核心程序,你可以看到很多嵌入式linux根本不会用到这个图形界面系统,而手机上的android不使用Xwindow不是很正常吗?我们学习的时候用QT难道就不叫做linux系统了么?

2.它没有glibc支持

由于Android最初用于一些便携的移动设备上,所以,可能出于效率等方面的考虑,Android并没有采用glibc作为C库,而是Google自己开发了一套Bionic Libc来代替glibc。

库文件瞎团败不同,好吧,因为移植显然是要修改库文件和头文件的吧,求指教

3.它并不包括一整套标准的Linux使用程序

Android并没有完全照搬Liunx系统的内核,除了修正部分Liunx的Bug之外,还增加了不少内容,比如:它基于ARM构架增加的Gold-Fish平台,以及yaffs2 FLASH文件系统等。

4.Android专有的驱动程序

除了上面这些不同点之外,Android还对Linux设备驱动进行了增强,主要如下所示。

1)Android Binder 基于OpenBinder框架的一个驱动,用于提供 Android平台的进程间通信(InterProcess Communication,IPC)功能。源代码位于drivers/staging/android/binder.c。

2)Android电源管理(PM) 一个基于标准Linux电源管理系统的轻量级Android电源管理驱动,针对嵌入式设备做了很多优化。或皮源代码位于:

kernel/power/earlysuspend.c

kernel/磨颤power/consoleearlysuspend.c

kernel/power/fbearlysuspend.c

kernel/power/wakelock.c

kernel/power/userwakelock.c

如果给内核添加驱动也可以称之为不同的话?

3)低内存管理器(Low Memory Killer) 比Linux的标准的OOM(Out Of Memory)机制更加灵活,它可以根据需要杀死进程以释放需要的内存。源代码位于 drivers/staging/ android/lowmemorykiller.c。

4)匿名共享内存(Ashmem) 为进程间提供大块共享内存,同时为内核提供回收和管理这个内存的机制。源代码位于mm/ashmem.c。

5)Android PMEM(Physical) PMEM用于向用户空间提供连续的物理内存区域,DSP和某些设备只能工作在连续的物理内存上。源代码位于drivers/misc/pmem.c。

6)Android Logger 一个轻量级的日志设备,用于抓取Android系统的各种日志。源代码位于drivers/staging/android/logger.c。

7)Android Alarm 提供了一个定时器,用于把设备从睡眠状态唤醒,同时它还提供了一个即使在设备睡眠时也会运行的时钟基准。源代码位于drivers/rtc/alarm.c。

8)USB Gadget驱动 一个基于标准 Linux USB gadget驱动框架的设备驱动,Android的USB驱动是基于gaeget框架的。源代码位于drivers/u/gadget/。

9)Android Ram Console 为了提供调试功能,Android允许将调试日志信息写入一个被称为RAM Console的设备里,它是一个基于RAM的Buffer。源代码位于drivers/staging/android / ram_console.c。

10)Android timed device 提供了对设备进行定时控制的功能,目前支持vibrator和LED设备。源代码位于drivers/staging/android /timed_output.c(timed_gpio.c)。

11)Yaffs2 文件系统 Android采用Yaffs2作为MTD nand flash文件系统,源代码位于fs/yaffs2/目录下。Yaffs2是一个快速稳定的应用于NAND和NOR Flash的跨平台的嵌入式设备文件系统,同其他Flash文件系统相比,Yaffs2能使用更小的内存来保存其运行状态,因此它占用内存小。Yaffs2的垃圾回收非常简单而且快速,因此能表现出更好的性能。Yaffs2在大容量的NAND Flash上的性能表现尤为突出,非常适合大容量的Flash存储。

大家都知道Android是基于Linux内核的操作系统,也曾经和Linux基金会因为内核问题产生过分歧,本文将开始对Android的内核进行剖析,主要介绍Android和Linux之间的关系,后续还会讲到Android系统在Linux系统之上扩展的部分功能和驱动。

  虽然Android基于Linux内核,但是它与Linux之间还是有很大的谨吵枝差别,比如Android在Linux内核的基础上添加了自己所特有的驱动程序。下面我们就来分析一下它们之间究竟有什么关系?

android是否能称为一种新的操作系统呢?至少我自己认为不算是,它最多算作一个新的应用程序罢祥敏了。

  一、Android为什么会选择Linux

  成熟的操作系统有很多,但是Android为什么选择采用Linux内核呢?这就与Linux的一些特性有关了,比如:

  1、强大的内存管理和进程管理方案

  2、基于权限的安全模式

  3、支持共享库

  4、经过认证的驱动模型

  5、Linux本身就是开源项目

  更多关于上述特性的信息可以参考Linux 2.6版内核的官方文档,这便于我们在后面的学习中更好地理解Android所特有的功能特性。接下来分析Android与Linux的关系。

  二、Android不是Linux

  看到这个标题大家可能会有些迷惑,前面不是一直说Android是基于Linux内核的吗,怎么现在又不是Linux了?迷惑也是正常的,请先看下面几个要点,然后我们将对每一个要点进行分析,看完后你就会觉得Android不是Linux了。

  因为它没有本地窗口系统,没有glibc的支持,而且并不包括一整套标准的Linux使用程序,同时增强了Linux以支持其特有的驱动。

  1.它没有本地窗口系统

  什么是本地窗口系统呢?本地窗口系统是指GNU/Linux上的X窗口系统,或者Mac OX X的Quartz等。不同的操作系统的窗口系统可能不一样,Android并没有使用(也不需要使用)Linux的X窗口系统,这是Android不是Linux的一个基本原因。

我很奇怪的是linux的Xwindow并不是其核心程序,你可以看到很多嵌入式linux根本不会用到这个图形界面系统,而手机上的android不使用Xwindow不是很正常吗?我们学习的时候用QT难道就不叫做linux系统了么?

  2.它没碰丛有glibc支持

  由于Android最初用于一些便携的移动设备上,所以,可能出于效率等方面的考虑,Android并没有采用glibc作为C库,而是Google自己开发了一套Bionic Libc来代替glibc。

库文件不同,好吧,因为移植显然是要修改库文件和头文件的吧,求指教

  3.它并不包括一整套标准的Linux使用程序

  Android并没有完全照搬Liunx系统的内核,除了修正部分Liunx的Bug之外,还增加了不少内容,比如:它基于ARM构架增加的Gold-Fish平台,以及yaffs2 FLASH文件系统等。

  4.Android专有的驱动程序

  除了上面这些不同点之外,Android还对Linux设备驱动进行了增强,主要如下所示。

  1)Android Binder 基于OpenBinder框架的一个驱动,用于提供 Android平台的进程间通信(InterProcess Communication,IPC)功能。源代码位于drivers/staging/android/binder.c。

  2)Android电源管理(PM) 一个基于标准Linux电源管理系统的轻量级Android电源管理驱动,针对嵌入式设备做了很多优化。源代码位于:

  kernel/power/earlysuspend.c

  kernel/power/consoleearlysuspend.c

  kernel/power/fbearlysuspend.c

  kernel/power/wakelock.c

  kernel/power/userwakelock.c

如果给内核添加驱动也可以称之为不同的话?

  3)低内存管理器(Low Memory Killer) 比Linux的标准的OOM(Out Of Memory)机制更加灵活,它可以根据需要杀死进程以释放需要的内存。源代码位于 drivers/staging/ android/lowmemorykiller.c。

  4)匿名共享内存(Ashmem) 为进程间提供大块共享内存,同时为内核提供回收和管理这个内存的机制。源代码位于mm/ashmem.c。

  5)Android PMEM(Physical) PMEM用于向用户空间提供连续的物理内存区域,DSP和某些设备只能工作在连续的物理内存上。源代码位于drivers/misc/pmem.c。

  6)Android Logger 一个轻量级的日志设备,用于抓取Android系统的各种日志。源代码位于drivers/staging/android/logger.c。

  7)Android Alarm 提供了一个定时器,用于把设备从睡眠状态唤醒,同时它还提供了一个即使在设备睡眠时也会运行的时钟基准。源代码位于drivers/rtc/alarm.c。

  8)USB Gadget驱动 一个基于标准 Linux USB gadget驱动框架的设备驱动,Android的USB驱动是基于gaeget框架的。源代码位于drivers/u/gadget/。

  9)Android Ram Console 为了提供调试功能,Android允许将调试日志信息写入一个被称为RAM Console的设备里,它是一个基于RAM的Buffer。源代码位于drivers/staging/android / ram_console.c。

  10)Android timed device 提供了对设备进行定时控制的功能,目前支持vibrator和LED设备。源代码位于drivers/staging/android /timed_output.c(timed_gpio.c)。

  11)Yaffs2 文件系统 Android采用Yaffs2作为MTD nand flash文件系统,源代码位于fs/yaffs2/目录下。Yaffs2是一个快速稳定的应用于NAND和NOR Flash的跨平台的嵌入式设备文件系统,同其他Flash文件系统相比,Yaffs2能使用更小的内存来保存其运行状态,因此它占用内存小。Yaffs2的垃圾回收非常简单而且快速,因此能表现出更好的性能。Yaffs2在大容量的NAND Flash上的性能表现尤为突出,非常适合大容量的Flash存储。

区别linux –和-,好搏主要看后面的参数,–后面一般跟长的完名名字 ,如 chkconfig –add

而-后面一般跟简写大多数是一个字母,唤兆如 ls -l。如果想了解更多关于友链祥Linux的知识,可参考下《Linux就该这么学》

linux driver staging的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux driver staging,探索Linux驱动的阶段:了解Linux Driver Staging,linux和centos的区别的信息别忘了在本站进行查找喔。


数据运维技术 » 探索Linux驱动的阶段:了解Linux Driver Staging (linux driver staging)