zoukankan      html  css  js  c++  java
  • 【整理】--【内核模块】简单例子,编译加载

    1、linux 内核模块不被编译到内核文件(zImage,bzImage), 而是在运行期间动态的安装和卸载

    2、内核模块包括一下几部分:主体部分设计,编译内核模块,安装卸载NHMK,可选项使用(模块申明,MK参数,符号输出)

    3、简单例子:

    hello.c:

    #include<linux/init.h>
    #include<linux/module.h>
    #include<linux/kernel.h>

    MODULE_LICENSE("Dual BSD/GPL");   

    static int hello_init(void)
    {
        printk(KERN_ALERT "hello_init ");
        return 0;
    }

    static void hello_exit(void)
    {
        printk(KERN_ALERT "goodbye,kernel! ");
    }

    module_init(hello_init);
    module_exit(hello_exit);

    MODULE_AUTHOR("APOLLO");                  //作者
    MODULE_DESCRIPTION("This is a simple example "); //模块描述
    MODULE_ALIAS("A simple example");  //别名

    Makefile:

    obj-m:=hello.o
    PWD := $(shell pwd)

    KDIR:=/work/linux-3.0.1     //使用版本的内核代码位置,此处使用的是位于/work/linux-3.0.1中的内核代码
     
    all:
        make -C $(KDIR) M=$(PWD) modules
    clean:
        rm -rf *.mod.c *.mod.o *.ko *.o *.tmp_versions *.order *symvers

    注意:编写makefile时,不能使用初Tab键外的空格符

    注意:在OK6410开发板上insmod hello.ko 时出现问题如下:

    no symbol version for module_layout

      解决方式:因为使用的内核代码中没有Module.symvers,所以要生成此文件

           生成方式    $ cd lib/module/(内核使用版本)/build

                 $ make

                可以发现Module.symvers生成

    返回hello.c  文件所在目录

    $ cd  /work/hello

    $ make

    $ rm -rf /nfs/hello.ko   (删除nfs中原有的hello.ko)

    $ cp hello.ko  /nfs

    >>>进入OK6410 终端

    # insmod hello.ko     (模块加载完成)

  • 相关阅读:
    Linux下的/dev/sr0、/dev/cdrom、df命令、free命令
    CentOS6.8 yum升级高版本gcc
    php5.6配置oracle数据库扩展 oci8(windows7系统64位)
    linux命令之ifconfig
    linux 编译安装swoole
    Bootstrap面包屑导航
    bootstrap滚动监听
    bootstrap弹出框
    Bootstrap 模态框(也可以说的弹出层)
    java反射拼接方法名动态执行方法
  • 原文地址:https://www.cnblogs.com/apolloenterprise/p/4409968.html
Copyright © 2011-2022 走看看