zoukankan      html  css  js  c++  java
  • Linux嵌入式内核模块程序设计

    1、环境搭建

    vmware+Fedora

    2、创建一个Hello文件

    [root@localhost ~]# mkdir Hello

     

    3、在Hello里面创建 hello.c 和 Makefile 两个文本文件

    (1):创建hello.c

    [root@localhost Hello]# vim hello.c

    hello.c:

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

    #include <linux/kernel.h> # 后来加的
    #include <linux/configfs.h>  # 后来加的

    MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { printk(KERN_EMERG "hello module! "); return 0; } static void hello_exit(void) { printk(KERN_EMERG "bye module! "); } module_init(hello_init); module_exit(hello_exit);
    // "GPL" 是指明了 这是GNU General Public License的任意版本
    
    // “GPL v2” 是指明 这仅声明为GPL的第二版本
    
    // "GPL and addtional"
    // "Dual BSD/GPL"
    // "Dual MPL/GPL"
    
    // "Proprietary"  私有的
    
    // 除非你的模块显式地声明一个开源版本,否则内核会默认你这是一个私有的模块(Proprietary)。

    (2):创建Makefile

    [root@localhost Hello]# vim Makefile

    Makefile:

    obj-m := hello.o
    KERNELDR := /usr/src/kernels/2.6.32-358.el6.i686
    PWD := $(shell pwd)
    modules:
            $(MAKE) -C $(KERNELDR) M=$(PWD) modules  
    clean:
            rm -rf *.o 

    (3)make编译:

    (4)加载模块

    [root@localhost Hello]# insmod hello.ko

    (5)卸载模块

    [root@localhost Hello]# rmmod hello.ko

    (6)列出模块

    [root@localhost Hello]# lsmod

    出现错误:

    make编译的时候可能会出现下面的错误:

    [root@localhost Desktop]# make
    make -C /usr/src/kernels/2.6.32-358.el6.i686 M=/root/Desktop modules
    make[1]: Entering directory `/usr/src/kernels/2.6.32-358.el6.i686'
    make[2]: *** No rule to make target `/root/Desktop/hell.c', needed by `/root/Desktop/hell.o'.  Stop.
    make[1]: *** 
    [_module_/root/Desktop] Error 2

    向内核插入新模块时,出现了File exists错误,说明模块名称有冲突,

    解决措施:

    最后将模块相关的c代码文件名改掉,更新Makefile中的 obj-m := xxx.o

    例如:文件名hello.c 更改成 hello.c

    然后更改Makefile文件内容:

    编译模块,insmod 成功。

  • 相关阅读:
    Zend Framework 入门(2)—多国语言支持
    Zend Framework 入门(1)—快速上手
    国外主流PHP框架比较
    PHP经验集锦
    PHP的GD库函数大全
    最好最实用的PHP二次开发教程
    我的ECshop二次开发从零开始
    Java中实现复制文件或文件夹
    matlab中freqz的用法以及多项式的展开
    matlab滤波器的设计
  • 原文地址:https://www.cnblogs.com/chuijingjing/p/9218259.html
Copyright © 2011-2022 走看看