登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

[分享]动态模块加载的例子--原创

作者:billy1980 栏目:DSP技术
[分享]动态模块加载的例子--原创
[分享]动态模块加载的例子--原创
动态模块加载的例子

首先在/root/SAMPLE_MODULE目录(可任何目录,后文编译时指定即可)下创建一个c文档,代码如下:
SAMPLE_MODULE.c
------------------------------------------------------------------

#include <linux/config.h>
#include <linux/DEVICE.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/interrupt.h>    
#include <linux/kernel.h>
#include <linux/MODULE.h>
#include <linux/platform_DEVICE.h>
#include <linux/sched.h>

#define    SAMPLE_MAJOR 253         

MODULE_LICENSE("GPL");
MODULE_AUTHOR("hhzhou - ShenOu Communication");
MODULE_DESCRIPTION("SAMPLE");

static int SAMPLE_open(struct inode *inode, struct file *file)
{
    return 0;
};
static int SAMPLE_release(struct inode *inode, struct file *file)
{
    return 0;
};
static ssize_t SAMPLE_read(struct file *file, CHAR *buf, size_t size, loff_t *loff)
{
    return 0;
};
static ssize_t SAMPLE_write(struct file *file, const CHAR *buf, size_t size, loff_t *loff)
{
    return 0;
};
int SAMPLE_ioctl(struct inode *inode,    struct file *file,    unsigned int ioctl_num,    unsigned LONG ioctl_param)
{
    return 0;
};

static struct file_operations SAMPLE_fops = {
    .read             = SAMPLE_read,
    .write             = SAMPLE_write,
    .ioctl             = SAMPLE_ioctl,
    .open             = SAMPLE_open,
    .release         = SAMPLE_release,
};

static int __init SAMPLE_MODULE_init(void)
{
    printk("init SAMPLE MODULE DEVICE\n");
    register_chrdev(SAMPLE_MAJOR, "SAMPLE", &SAMPLE_fops);
    return 0;
}

static void __exit SAMPLE_MODULE_cleanup(void)
{
    printk("cleanup SAMPLE MODULE DEVICE\n");
}

MODULE_init(SAMPLE_MODULE_init);
MODULE_exit(SAMPLE_MODULE_cleanup);
--------------------------------------------------------------------


第二步,建Makefile文档
--------------------------------------------------------------------
obj-m += SAMPLE_MODULE.o
--------------------------------------------------------------------
如果是多文件的话,使用如下:
--------------------------------------------------------------------
obj-m := SAMPLE_MODULE.o
MODULE-objs := file1.o file2.o
--------------------------------------------------------------------

第三步,确定内核支持insmod, rmmod, lsmod
如不支持,可重新编译内核
--------------------------------------------------------------------
Linux Kernel Configuration
  Loadable MODULE SUPPORT
    [*] Enable loadable MODULE SUPPORT
    [*]   MODULE unloading

Application Main Menu
  BusyBox
    [*] insmod
    [*] insmod: lsmod
    [*] insmod: modprobe
    [*] insmod: rmmod
    [*] insmod: 2.6 and above kernel MODULEs
    [*] insmod: MODEL version checks
    [*] insmod: load in kernel MEMORY
--------------------------------------------------------------------

第四步,编译
注意路径,按你自己的路径改下即可

--------------------------------------------------------------------
make -C /HHBF531-R1/uClinux-dist/linux-2.6.x SUBDIRS=/root/SAMPLE_MODULE MODULEs
--------------------------------------------------------------------

好啦,SAMPLE_MODULE.ko就是我们需要的MODULE
使用insmod SAMPLE_MODULE.ko加载吧


2楼: >>参与讨论
billy1980
以上例子在HHBf531-startkit开发板上试过可以
以上例子在HHBf531-startkit开发板上试过可以

3楼: >>参与讨论
weixiao11

 
4楼: >>参与讨论
billy1980
:)谢谢超级MM版主支持
:)谢谢超级MM版主支持

5楼: >>参与讨论
weixiao11
呵呵
不用这样用全称吧,简称我也接受的

6楼: >>参与讨论
zxm2006
感谢
 
7楼: >>参与讨论
hardfire
学习...
好。

8楼: >>参与讨论
yingzi1010
楼主能提一份Makefile吗
谢谢 

9楼: >>参与讨论
hardfire
up for yingzi
up

参与讨论
昵称:
讨论内容:
 
 
相关帖子
求一份驱动的Makefile,谢谢
blackfin开发者技术交流Q Q 群
用 mdct36.asm 时(类型0,1,3)twid_coef参数如何求得?
nfs restart  问题
有没有在HOST模式下用过ADSP-2189的?过来指点一下
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号