zoukankan      html  css  js  c++  java
  • Linux内核驱动模块编写尝试

    课堂笔记

    1. 源代码

      /*file: hello.c*/
      
      #ifndef _KERNEL_
      #define _KERNEL_
      #endif
      #ifndef MODULE
      #define MODULE
      #endif
      
      #include <linux/module.h>
      #include <linux/kernel.h>
      #include <linux/init.h>
      
      static hello_init(void);  //需要添加额外的函数申明
      void hello_exit(void);
      
      //_init and _exit is the special macro
      static int hello_init(void){  //去掉了函数名前的_init
      
      printk("Hello, world!
      ");
      return 0;
      }
      
      void hello_exit(void){  //去掉了函数名前的_exit,否则编译无法完成
      printk("Good bye, world!
      ");
      return 0;
      }
      
      module_init(hello_init);
      module_exit(hello_exit);
      
      MODULE_LICENSE("GPL");  // 开源协议许可
      

      注:

      • printk与printf类似,但是是运行在内核态,打印的日志文件在/var/log/messages
    2. 编写Makefile文件并运行

      obj-m += hello.o
      
      all:
      make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
      
      clean:
      make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
      

      注:

      • 必须用该操作编译,否则会出现找不到asm/linkage.h的错误

      • 如果/lib/modules/3.10.0-514.26.2.el7.x86_64目录下的build文件为红色,则执行以下操作

      rm -f build  #删除build文件
      ln -s /usr/src/kernels/3.10.0-1160.11.1.el7.x86_64/ ./build  #新建build文件并建立软链接
      

      image-20210117094217819

      make构建的文件

      image-20210117094548598

    3. 尝试添加和移除模块

      insmod hello.ko
      rmmod hello.ko
      

      如果执行成功,可以在/var/log/messages下查看是否有对应的日志打印

      image-20210117094902061

      注:

      • printk与printf类似,但是是运行在内核态,打印的日志文件在/var/log/messages
    4. 编写Makefile文件并运行

      obj-m += hello.o
      
      all:
      make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
      
      clean:
      make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
      

      注:

      • 必须用该操作编译,否则会出现找不到asm/linkage.h的错误

      • 如果/lib/modules/3.10.0-514.26.2.el7.x86_64目录下的build文件为红色,则执行以下操作

          rm -f build  #删除build文件
          ln -s /usr/src/kernels/3.10.0-1160.11.1.el7.x86_64/ ./build  #新建build文件并建立软链接
        

        image-20210117094217819

      make构建的文件

      image-20210117094548598

    5. 尝试添加和移除模块

      insmod hello.ko
      rmmod hello.ko
      

      如果执行成功,可以在/var/log/messages下查看是否有对应的日志打印

      image-20210117094902061

  • 相关阅读:
    怎样在Windows下编译OpenVRML
    Virtools脚本语言(VSL)教程 结构
    Virtools脚本语言(VSL)教程 枚举
    基于Python及Wx的离线Blog发布工具Zoundry Raven
    Virtools脚本语言(VSL)教程 使用 GUID
    Khronos关于WebGL最新进展
    【转】在EditPlus中利用正则表达式替换字符串
    Virtools脚本语言(VSL)教程 全局变量bc与ac
    VrmlPad3.0发布
    WebGL样品与演示
  • 原文地址:https://www.cnblogs.com/Arno-vc/p/14288291.html
Copyright © 2011-2022 走看看