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

  • 相关阅读:
    bzoj4758: [Usaco2017 Jan]Subsequence Reversal(区间dp)
    bzoj4580: [Usaco2016 Open]248(区间dp)
    1617: [Usaco2008 Mar]River Crossing渡河问题(dp)
    bzoj21012101: [Usaco2010 Dec]Treasure Chest 藏宝箱(滚动数组优化dp)
    P2339 提交作业usaco(区间dp)
    day11
    bzoj2330: [SCOI2011]糖果(差分约束)
    P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm(Tarjan+记忆化)
    P2700逐个击破(并查集/树形dp)
    bzoj1770: [Usaco2009 Nov]lights 燈(折半搜索)
  • 原文地址:https://www.cnblogs.com/chuijingjing/p/9218259.html
Copyright © 2011-2022 走看看