当前位置: 技术问答>linux和unix
最简单的驱动程序,大家看看问题在哪儿
来源: 互联网 发布时间:2015-09-20
本文导语: //hello.c: #include MODULE_LICENSE("GPL"); int init_module() { printk("init"); return 0; } void cleanup_module() { printk('cleanup"): } gcc -c hello.c -D__KERNEL -DMODULE -Wall warnings implicit declaration of function 'printk' 敲入:insmod hello.o ...
//hello.c:
#include
MODULE_LICENSE("GPL");
int init_module()
{
printk("init");
return 0;
}
void cleanup_module()
{
printk('cleanup"):
}
gcc -c hello.c -D__KERNEL -DMODULE -Wall
warnings implicit declaration of function 'printk'
敲入:insmod hello.o
什么显示都没有
大家提提建议吧
#include
MODULE_LICENSE("GPL");
int init_module()
{
printk("init");
return 0;
}
void cleanup_module()
{
printk('cleanup"):
}
gcc -c hello.c -D__KERNEL -DMODULE -Wall
warnings implicit declaration of function 'printk'
敲入:insmod hello.o
什么显示都没有
大家提提建议吧
|
需要在非图形界面下面才能看到输出的内容
你可以用ctrl+alt+Fx 切换到文字界面,运行应该就没有问题了
你可以用ctrl+alt+Fx 切换到文字界面,运行应该就没有问题了
|
首先包含头文件
#include
其次编译选项是
gcc -c -D__KERNEL__ -DMODULE -Wall
#include
其次编译选项是
gcc -c -D__KERNEL__ -DMODULE -Wall
|
如果你用2.6的内核,应该是这样hello.c:
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, worldn");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel worldn");
}
module_init(hello_init);
module_exit(hello_exit);
然后写Makefile:
obj-m := hello.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
然后:
#make
#insmod hello.ko
#rmmod hello.ko
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, worldn");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel worldn");
}
module_init(hello_init);
module_exit(hello_exit);
然后写Makefile:
obj-m := hello.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
然后:
#make
#insmod hello.ko
#rmmod hello.ko
|
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, worldn");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel worldn");
}
module_init(hello_init);
module_exit(hello_exit);
gcc -O2 -I/usr/src//include -c hello.c
means u must use the real running kernel version,u can get it by uname -r,for exp:
#uname -r
2.4.20-18
#gcc -O2 -I/usr/src/linux-2.4.20-18/include -c hello.c
and the output by printk must in text mode
#include
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, worldn");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel worldn");
}
module_init(hello_init);
module_exit(hello_exit);
gcc -O2 -I/usr/src//include -c hello.c
means u must use the real running kernel version,u can get it by uname -r,for exp:
#uname -r
2.4.20-18
#gcc -O2 -I/usr/src/linux-2.4.20-18/include -c hello.c
and the output by printk must in text mode
|
查看/var/log/messages文件
|
//hello.c:
#define MODULE
#define KERNEL
#include
#include
MODULE_LICENSE("GPL");
int init_module()
{
printk("init");
printk("current process is %s (pid: %i)",current->comm,current->pid);
return 0;
}
void cleanup_module()
{
printk('cleanup"):
}
gcc -c hello.c -i/usr/src/linux/include -o hello.o
准行
#define MODULE
#define KERNEL
#include
#include
MODULE_LICENSE("GPL");
int init_module()
{
printk("init");
printk("current process is %s (pid: %i)",current->comm,current->pid);
return 0;
}
void cleanup_module()
{
printk('cleanup"):
}
gcc -c hello.c -i/usr/src/linux/include -o hello.o
准行
|
你可以到这里看:
http://lwn.net/Articles/21817/
http://lwn.net/Articles/21817/
|
在insmod中要加一些参数
insmod -f hello.o
insmod -f hello.o
|
关注关注