LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 547|回复: 3

如何在Linux 2。4。20内核中加入自己写的驱动程序如text.c??

[复制链接]
发表于 2005-3-12 20:53:38 | 显示全部楼层 |阅读模式
如题目,想

静态编译一个驱动程序到内核中,应该怎么作?大家帮帮忙,谢谢了!
发表于 2005-3-12 22:17:40 | 显示全部楼层
我建议你看看2。4内核的makefile文件!

2.6是依靠 kbuild makefile 把模块静态编译到 内核中的。
如对于一个程序
如obj-m是模块编译obj-y是静态编译
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-21 10:45:18 | 显示全部楼层
hehe,老兄可不可以详细一点啊?非常感谢了。在rh9下不行,我是这样做的:假如我的驱动程序名为test.c,将它放在/usr/src/linux/driver/char下并修改了此目录下的makefile和config.in在其中分别加入了
obj-$(CONFIG_TEST) = test.o 和bool 'My test' CONFIG_TEST.
简单的test.c如下:
#ifndef MODULE
#define MODULE
#endif
#ifndef __KERNEL__
#define __KERNEL__
#endif
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/errno.h>
#include <linux/pci.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <asm/system.h>
#include <linux/ioport.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <asm/io.h>
#include <linux/types.h>

static int __init test_init(void)
{
printk(KERN_EMERG "HELLO test!\n");
return 0;

}

static void __exit test_cleanup(void)
{
printk(KERN_EMERG " I shut down device from kernerl mod \n");
}

module_init(test_init);
module_exit(test_cleanup);

MODULE_LICENSE("GPL");
/*EXPORT_NO_SYMBOLS;*/

我想把test.c直接编译进内核,但好像不行,不知道漏了哪些环节或是什么问题,望高手指教,谢谢!
回复 支持 反对

使用道具 举报

发表于 2005-3-21 18:12:29 | 显示全部楼层
这是我 2.6.8内核源代码目录drivers/char下的makefile中的第10行:
obj-y    += mem.o random.o tty_io.o n_tty.o tty_ioctl.o pty.o misc.o
按照你的意思,我会改成:(因该就可以了,但没有实验)
obj-y    += mem.o random.o tty_io.o n_tty.o tty_ioctl.o pty.o misc.o test.o

对于2.4内核没看过
不能说什么
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表