|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | 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 于 2006/10/12 16:14:00 发布:
以上例子在HHBf531-startkit开发板上试过可以 以上例子在HHBf531-startkit开发板上试过可以 |
3楼: | >>参与讨论 |
作者: weixiao11 于 2006/10/12 16:15:00 发布:
顶 |
4楼: | >>参与讨论 |
作者: billy1980 于 2006/10/12 16:23:00 发布:
:)谢谢超级MM版主支持 :)谢谢超级MM版主支持 |
5楼: | >>参与讨论 |
作者: weixiao11 于 2006/10/12 16:45:00 发布:
呵呵 不用这样用全称吧,简称我也接受的 |
6楼: | >>参与讨论 |
作者: zxm2006 于 2006/10/12 16:53:00 发布:
感谢 |
7楼: | >>参与讨论 |
作者: hardfire 于 2006/10/13 13:36:00 发布:
学习... 好。 |
8楼: | >>参与讨论 |
作者: yingzi1010 于 2007/4/7 10:13:00 发布:
楼主能提一份Makefile吗 谢谢 |
9楼: | >>参与讨论 |
作者: hardfire 于 2007/4/7 12:59:00 发布:
up for yingzi up |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |