linux下的第一个驱动程序 hello (for 2.4)

linux下的第一个驱动程序 hello (for 2.4)

 

 

 

 

我也照着上面的方法试着做了。
环境:radhet9(文本模式下) gcc(3.2.2)


试验1
#define MODULE
#includes<linux/module.h>

int init_module(void)
{
    printk("<1>Hello,world/n");
    return 0;
}
void cleanup_module(void)
{
    printk("<1>Googbye crule world/n");
}

编译:
gcc -I /usr/scr/linux-2.4/include/linux -Wall -c hello.c
结果:
hello.c: In function 'init_module':
hello.c:11: warning: implicit declaration
of function 'printk'
没有理会警告继续:
insmod hello.o
警告:
版本不匹配,继续:
insmod -f hello.o
还是警告,但同时也输出了“Hello,world”,说明模块加载成功。
rmmod hello
显示:
Googbye crule world


试验2
在上面的文件中加入
#includ<linux/kernel.h>
MODULE_LICENSE("GPL");
然后重新编译
gcc -I /usr/scr/linux-2.4/include/linux -Wall -c hello.c
出现了同样的警告。我不是已经加了printk的声明了?怎么还有警告?
继续试验一得步骤:
出现的结果完全一样。

试验3
同实验2的文件。
编译命令为:
gcc -D__KERNEL__  -DMODULE -I /usr/src/linux-2.4/include -Wall -c hello.c
没有任何的警告。
加载,卸载也没有任何的警告。

原因:头文件的路径设置错误。
在头文件路径正确的情况下,去掉#inclue<kernel.h>,将会出现printk的警告。
去掉MODULE_LICENSE("GPL"),在加载时会出没有注册的警告。


试验4
没有任何警告和错误的文件,以及编译方法。

#define MODULE
#includes<linux/module.h>
#includes<linux/kernel.h>
MODULE_LICENSE("GPL");

int init_module(void)
{
    printk("<1>Hello,world/n");
    return 0;
}
void cleanup_module(void)
{
    printk("<1>Googbye crule world/n");
}
编译,加载,卸载命令:
gcc -D__KERNEL__  -DMODULE -I /usr/src/linux-2.4/include -Wall -c hello.c


再提一下,我是在文本模式下进行的实验。

学习中......

补充:

其实到2.4内核,设备的加载和卸载使用这两个函数:

module_init("设备初始化函数");

module_exitJ("设备卸载函数");

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值