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 成功。

  • 相关阅读:
    ReSharper Tips—GotoImplementation
    Possible multiple enumeration of IEnumerable
    Hello, Razor!
    自话自说——POI使用需要注意一个地方
    css中怎么设置透明度的问题
    记录排查国标直播流播放卡顿的问题
    互联网上做广告的优点
    C#、.Net经典面试题集锦(一)
    什么是MFC
    C/S与B/S 的区别
  • 原文地址:https://www.cnblogs.com/chuijingjing/p/9218259.html
Copyright © 2011-2022 走看看