请教Linux中内核模块ko开源和闭源的问题

龙广成 2019-12-21 19:52:00

推荐回答

比如Intel开源的图形界面驱动位于内核的:/lib/modules/`uname-r`/kernel/drivers/gpu/drm/i915/i915.koNvidia的闭源驱动则以DKMS动态内核模块放置在:/lib/modules/`uname-r`/updates/dkms/DynamicKernelModuleSupportFrameworkDKMSisaframeworkdesignedtoallowindividualkernelmodulestobeupgradedwithoutchangingthewholekernel.Itisalsoveryeasytorebuildmodulesasyouupgradekernels.动态内核模块DKMS的用途包括:在不影响现有内核的情况下,安装新的模块到现有系统上,比如Nvidia和AMD的闭源驱动程序.当你更新内核时,将非常容易重建模块,比如VirtualBox在Linux上的虚拟化驱动。
符致坚2019-12-21 19:56:27

提示您:回答为网友贡献,仅供参考。

相关问答

转自知乎蓝色我最近和Clang/LLVM打交道比较多,目前游离在LLVMIR和IBMWCode之间。对于学习Clang/LLVM来说,其实需要看你做什么,是研究C,C++,Objective-C在Clang的实现,抑或着是想利用Clang做AST层面的事情,还是说想要利用LLVMIR来做一些事情,抑或着你是想要添加LLVM优化,还是说想要为LLVM添加新的体系结构支持.......Clang/LLVM现在都很大了,所以需要了解好自己想要的是什么,然后去针对的阅读,而非直接就开始一大块的开始,这实在是太大了。而在阅读源代码之前,无论如何,首先是需要基本的编译原理知识。你需要知道我们编译器的几个基本步骤,如词法分析,语法分析,语意分析,代码生成等过程,有了这个基本的思路,你才不至于迷失在Clang的浩海代码中,如看见Sema,AST,CodeGen这样的字眼你也能对应上这是哪个阶段的,若你想要了解C,C++,Objective-C等的实现,大部分都要集中在Lexer,Parser,AST,Sema等部分。与此同时,若你想要理清楚,明白为什么这么实现,如C++。那么,你还需要备一份C++标准,并且熟悉C++标准的常用语,至少可以分清楚Declaration,Definition,L-Value,R-Value等,因为你会看见Clang有很多Decl,若不理解Declaration,你很难理解为什么会有这么多Decl冒出来。而这一部分代码的阅读,我会推荐当你想要了解某一部分的实现时再去挑着读,而非挨着挨着读。而若你如我一样,需要直接面对LLVMIR,那么你更多需要的是学习LLVMIRLanguage,即LLVMLanguageReferenceManual,但是我知道直接看这样的文档是抽象的,是无趣的,我也如此。那么其实最好的办法就是从C/C++程序dump出.ll文件,然后阅读它,修改它,看看会发生什么。同时,在这个阶段,你需要更多的有关链接器,ObjectFile,SymbolTable等知识,这样才能更好的做这件事情。而这阶段的代码,主要都是都在ClangCodeGen里面,所以你要阅读代码这部分是比较集中的,但是你要完整理清楚,你还是不可避免的需要从Driver等部分开始,但是你若是只想知道IR,大部分在CodeGen,Clang的源码大多是CG****。若你是做LLVM后端的话,这部分我了解的比较少,但是LLVM最好的地方就是它文档还算好,如我立马就找到了一个相关的东西:WritinganLLVMBackend然后空明大神补了一个:TheLLVMTarget-IndependentCodeGenerator。