Skip to content

Latest commit

 

History

History
88 lines (69 loc) · 2.79 KB

File metadata and controls

88 lines (69 loc) · 2.79 KB

dkms

Dynamic Kernel Module Support

一、参考文档

二、install

sudo apt-get install dkms

三、基本信息

  • dkms维护的本机源代码目录/usr/src/
  • dkms查看状态:dkms status
  • dkms维护的驱动.ko目录:/var/lib/dkms

四、编译说明

  • https://github.com/ZengjfOS/RaspberryPi/tree/hello_module
  • sudo cp hello_module /usr/src/hello-0.1 -r
  • sudo dkms add -m hello -v 0.1
    Creating symlink /var/lib/dkms/hello/0.1/source ->
                     /usr/src/hello-0.1
    
    DKMS: add completed.
    
  • dkms status
    hello, 0.1: added
    wm8960-soundcard, 1.0, 4.19.122-v7l, armv7l: installed
    
  • sudo dkms build -m hello -v 0.1
    Kernel preparation unnecessary for this kernel.  Skipping...
    
    Building module:
    cleaning build area....
    make -j4 KERNELRELEASE=4.19.122-v7l all KVERSION=4.19.122-v7l....
    cleaning build area....
    
    DKMS: build completed.
    
  • sudo dkms install -m hello -v 0.1
    hello.ko:
    Running module version sanity check.
     - Original module
       - No original module exists within this kernel
     - Installation
       - Installing to /lib/modules/4.19.122-v7l/updates/
    
    depmod...
    
    DKMS: install completed.
    
  • sudo dkms uninstall -m hello -v 0.1
  • sudo dkms remove -m hello -v 0.1 --all

五、dkms配置

dkms.conf

PACKAGE_NAME="hello"
PACKAGE_VERSION="0.1"
CLEAN="make clean"
MAKE[0]="make all KVERSION=$kernelver"
BUILT_MODULE_NAME[0]="hello"
DEST_MODULE_LOCATION[0]="/updates"
AUTOINSTALL="yes"
  • PACKAGE_NAMEPACKAGE_VERSION和文件夹的命名是一致的。
  • CLEAN:的命令是每次build的时候第一条执行的动作。
  • MAKE[0]:用来设定编译的命令,一般情况下是不用设定的。在本例中,就可以把MAKE[0]这行删掉。但在下面这种情况下就需要设定了。比如,您的Makefile里有多个target,分别为all、debug、release等,不指定MAKE[0]时,编译会选择第一个target来执行,也就是make all,如果您想执行make release来编译,就需要在dkms.conf里明确设定。
  • BUILD_MODULE_NAME[0]:用来指定模块的名称,一般情况下也可以不设定。
  • DEST_MODULE_LOCATION[0]:用来设定模块安装的目的地址,本例是"/lib/module/$(KVERSION)/updates"。
  • AUTOINSTALL="yes":表示在Linux引导之后DKMS会自动对这个模块执行Build和Install的动作,当然如果模块已经处于该状态的话,相应的动作是不用再执行的。