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

  • 相关阅读:
    这个网站的设计太独特了
    mybatis—— 一个空格引发的血案
    Java IO--实现文件的加密解密
    Intellij IDEA如何生成JavaDoc--转载
    Java 在循环里发生异常会跳出循环
    idea格式化代码快捷键
    idea创建类时默认添加头部注释信息
    maven-helper解决依赖冲突
    Octotree插件
    idea .gitignore(git文件忽略)
  • 原文地址:https://www.cnblogs.com/Arno-vc/p/14288291.html
Copyright © 2011-2022 走看看