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

  • 相关阅读:
    Oracle 控制文件
    rm 删除文件
    FreeBSD 8.0候选版本RC3发布
    【非长篇大论】X3D Web3D标准的发展
    【短】又碰到CSDN服务器负载过重
    年终总结 等待
    项目管理软件InDefero
    X3D 与 HTML5
    对使用破解软件的一点想法
    Flash开发的基本概念
  • 原文地址:https://www.cnblogs.com/Arno-vc/p/14288291.html
Copyright © 2011-2022 走看看