设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
编程开发讨论区 —— LinuxSir.cn
›
内核与驱动开发
›
如何在Linux 2。4。20内核中加入自己写的驱动程序如text ...
1
2
/ 2 页
下一页
返回列表
查看:
1449
|
回复:
12
如何在Linux 2。4。20内核中加入自己写的驱动程序如text.c??
[复制链接]
ljkhot
ljkhot
当前离线
积分
26
IP卡
狗仔卡
发表于 2005-3-12 20:50:58
|
显示全部楼层
|
阅读模式
如题目,想静态编译一个驱动程序到内核中,应该怎么作?大家帮帮忙,谢谢了!
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
baijingtao
baijingtao
当前离线
积分
54
IP卡
狗仔卡
发表于 2005-3-13 00:02:18
|
显示全部楼层
照着内核中的makefile文件写一个makefile文件,也可以修改相应的makefile文件。
回复
支持
反对
使用道具
举报
显身卡
ljkhot
ljkhot
当前离线
积分
26
IP卡
狗仔卡
楼主
|
发表于 2005-3-21 10:43:21
|
显示全部楼层
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直接编译进内核,但好像不行,不知道漏了哪些环节或是什么问题,望高手指教,谢谢!
回复
支持
反对
使用道具
举报
显身卡
Amybell
Amybell
当前离线
积分
4
IP卡
狗仔卡
发表于 2005-3-21 18:44:27
|
显示全部楼层
我觉得你好像没有在inin()和cleanup()里面注册啊,这个模块应该是不可以编译进内核的.
你可以先用gcc进行编译,然后在当前目录下用insmod test.o命令,然后用lsmod命令就可以看看你的模块有没有成功了.
^^加油,祝你好运!
回复
支持
反对
使用道具
举报
显身卡
Amybell
Amybell
当前离线
积分
4
IP卡
狗仔卡
发表于 2005-3-21 18:46:31
|
显示全部楼层
现在才看到你的帖子,不知道现在回复迟不迟啊?
回复
支持
反对
使用道具
举报
显身卡
home_king
home_king
当前离线
积分
2759
IP卡
狗仔卡
发表于 2005-3-21 22:00:40
|
显示全部楼层
2.4内核使用init_module和cleanup_module来注册及卸载模块。
修正相关部分如下:
int init_module(void)
{
printk(KERN_EMERG "HELLO test!\n");
}
void cleanup_module(void)
{
printk(KERN_EMERG " I shut down device from kernerl mod \n");
}
复制代码
回复
支持
反对
使用道具
举报
显身卡
ljkhot
ljkhot
当前离线
积分
26
IP卡
狗仔卡
楼主
|
发表于 2005-3-22 13:43:10
|
显示全部楼层
hehe 我遍了一个简单的数据采集卡的驱动,是模块加载的,用insmod可以加载上,用open也可以打开,就是说驱动本身没有问题,只是不知道怎么样才能静态编进内核?
回复
支持
反对
使用道具
举报
显身卡
zbluecn
zbluecn
当前离线
积分
4
IP卡
狗仔卡
发表于 2005-3-24 12:49:10
|
显示全部楼层
不知道我说的对不对
比如我写了一个mydriver.c 的驱程序,使字符设备
我把这个文件复制到/linux/drivers/char下,该目录保存了linux下的致富设备驱动程序,修改mem.c 在int char_dev_init()函数中天津如下代码
#ifdef CONFIG_MYDRIVER
//CONFIG_MYDRIVER是在配置内核的时候赋值的(在后面的代码会看到)
device_init();//设备初始化
#endif
修改 /linux/drivers/char下的Makefile文件
添加
ifeq($(CONFIG_MYDRIVER),y)
L_Objes+=mydriver.o
endif
修该 /linux/drivers/char下的config.in文件
在
comment Character devices
下面添加
bool support for mydriver CONFIG_MYDRIVER
这样
运行make config 、make menuconfig 会出现support for mydriver
选中
make dep
make
因该加入到内核里了
回复
支持
反对
使用道具
举报
显身卡
ljkhot
ljkhot
当前离线
积分
26
IP卡
狗仔卡
楼主
|
发表于 2005-3-24 13:21:26
|
显示全部楼层
hehe 好几天登不上来服务器,非常感谢zbluecn的指点,我尽快试试看。
回复
支持
反对
使用道具
举报
显身卡
ljkhot
ljkhot
当前离线
积分
26
IP卡
狗仔卡
楼主
|
发表于 2005-3-24 13:55:04
|
显示全部楼层
ifeq($(CONFIG_MYDRIVER),y)
L_Objes+=mydriver.o
endif
呵呵 zblucn你好,你说上面那段是不是改成
ifeq($(CONFIG_MYDRIVER),y)
obj-y +=mydriver.o
endif
呢?
回复
支持
反对
使用道具
举报
显身卡
下一页 »
1
2
/ 2 页
下一页
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表