百科问答小站 logo
百科问答小站 font logo



操作系统能不能继续分两部分:硬件相关和硬件无关?并且让驱动只依赖硬件相关部分而不依赖操作系统? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      

其实这就是一个非技术问题

先拆分成两种情况:

一种是同一种操作系统升级的情况:比如从WIN2000升级到WINXP,升级到WIN7,升级到WIN10.

任何一个设计的比较好的操作系统,都会有一个硬件抽象层(HAL),驱动几乎都不会直接操作硬件,所以如果HAL的变化不大,那么从WIN2000升级到WIN7,有一些驱动是可以正常工作的。

WIN10被人骂的比较多,一个原因是WIN10的HAL层变化太大,很多驱动都要重写,我写的一个东西,在WIN10 2004版本上工作的比较好,在WIN10 20H2上就有一些问题。


另外一种情况是期望不同操作系统使用同样代码的情况:比如希望Linux和Windows使用同一套二进制驱动。

技术方面的原因很简单,就是两个操作系统的HAL层完全不同(暂时不谈二进制文件格式的问题)。

那能不能设计成相同的?答案是不能,原因有很多:

1. 不同操作系统发展路线不一样,Linux是从学习UNIX的设计发展而来,Windows则是另外一个独立的设计(并且WIN2K和WIN9x也不是同一个发展路线),这就意味着他们的原始设计差异非常大。写代码的人都知道,对于一个庞大的架构来说,修改某一个模块很容易,但整个架构推倒重来,基本不可能,厂商没有那么多人力去做这件事(但也有人做了,后面会说)。

Linux里,一切皆文件的思路贯穿于内核设计,但Windows的核心设计不是文件,就这一个区别,会让驱动设计有巨大的差异。

2. 有一些设计,是存在专利保护的,换句话说,你想让两个不同的操作系统完全一样,对不起,这是违法的。Linux有很长一段时间不能光明正大的支持NTFS/exFAT,说到底还是这方面的风险。

既然费力又不讨好,那么厂商这么做的意义在哪?


当然,题主既然想到了,肯定有别人也能想到,而且也有人这么做了。

比如WSL1,这个就是微软搞出来的,兼容Linux的,但又不是Linux的内核,刚出来的时候一片叫好,结果呢,微软发现这玩意收益不到,到WSL2的时候,微软就不再独立开发兼容Linux的内核了,直接搞虚拟机多好,厂商也要考虑成本的。

在一些小众领域(嵌入式),这种情况特别普遍,VxWorks一直以来是嵌入式(工控、自动化、军工、航空航天)领域里使用率比较高的操作系统,这方面国内也有很多公司在做国产化,国产化的一个很重要指标就是:兼容VxWorks API甚至是二进制。

看到了吧,能做,有人做了,收益不高,负担太大。

所以,不是技术问题




  

相关话题

  为什么没有普及128位操纵系统的计算机? 
  操作系统能不能继续分两部分:硬件相关和硬件无关?并且让驱动只依赖硬件相关部分而不依赖操作系统? 
  如果同时有两个项目让你选择,一个是使用C++的QT,一个是用JAVA的Android,你愿意往哪个方向发展?请说出您的理由。 
  对于安卓是否可以理解为安卓系统其实跑的是Linux? 
  虚拟机这么好用为什么有人还要把linux装在电脑里或者装双系统? 
  免费稳定的 Linux vps 主机有哪些推荐? 
  当初Linux的作者想写一个操作系统,结果全世界外国人帮他写完;如今我也想写一个,为啥国内没人帮我? 
  如果有一个arm核心的微型电脑,跟u盘一样大,里面跑linux发行版,带电池,连上usb后就能操作它的屏幕。这东西做成产品,你会买不? 
  stm32为何在诸多的单片机中脱颖而出? 
  鸿蒙之于AOSP,是否Linux之于wine,Windows之于WSL?这么多人质疑鸿蒙说明了什么? 

前一个讨论
关于malloc返回值的问题?
下一个讨论
为什么Linux下要把创建进程分为fork()和exec()(一系列函数)两个函数来处理?





© 2025-02-21 - tinynew.org. All Rights Reserved.
© 2025-02-21 - tinynew.org. 保留所有权利