zoukankan      html  css  js  c++  java
  • Linux内核模块动态添加方法

    今天下午通过一番折腾,终于琢磨除了Linux内核模块的动态加载方法,网上大部分教程基于旧版本做的,有很多地方不一样,走了很多弯路,不过最后终于成功了,方法如下:

    1、建立C++源文件,假设文件目录为path,文件名为hello.c源代码如下:

    #include <linux/init.h>

    #include <linux/module.h>

    #include <linux/kernel.h>

     

    static int hello_init(void)

    {

             printk(KERN_ALERT "Hello World!/n");

             return 0;

    }

     

    static void hello_exit(void)

    {

             printk(KERN_ALERT "Bye World!/n");

    }

     

    module_init(hello_init);

    module_exit(hello_exit);

     

    MODULE_LICENSE("GPL");

    MODULE_AUTHOR("WFJ");

    注意:这里的头文件需要根据系统内核的具体情况来使用,不是所有版本都用一样的头文件,一开始我的编译错误就是因为头文件使用不当产生的。

    2、写Makefile,内容如下:

     

    obj-m := hello.o

    KERNELBUILD :=/usr/src/linux-headers-3.2.0-24-generic-pae

    default:

           make -C $(KERNELBUILD) M=$(shell pwd) modules

    clean:

           rm -rf *.o  *.ko *.mod.c .*.cmd .tmp_versions *.order *.symvers

    这里,KERNELBUILD后面的路径也用根据你自己系统的情况决定,基本是/usc/src/your_kernel_name

    3、编译源文件,直接make就可以,Makefile里的default已经给出了编译规则,clean的规则也给出了,可以自行修改。

    4、加载模块 insmod hello.ko

    5、观察是否成功 dmesg可以看到系统的内核模块信息。

    6.卸载模块 rmmod hello.ko

     

  • 相关阅读:
    Mac上反编译Android apk安装包
    静态链表
    x = x &(x-1)
    C语言itoa()函数和atoi()函数
    以文本方式和二进制方式操作文件
    自己实现memcpy,strcpy与strncpy
    实现中英文混合string的逆向输出
    实现纯英文string的逆序输出
    C语言实现字符串逆序输出
    ASCII码对照表
  • 原文地址:https://www.cnblogs.com/spinsoft/p/2612076.html
Copyright © 2011-2022 走看看