模块源码:
// 下面的是主要的内容
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
static int year=2017;
int hello_init()
{
printk(KERN_WARNING "Hello kernel, it's %d!\n",year);
return 0;
}
void hello_exit()
{
printk("Bye, kernel!\n");
}
// 下面两个为关键的模块函数
module_init(hello_init);
module_exit(hello_exit);
Makefile:
ifneq ($(KERNELRELEASE),)
obj-m := helloworld.o
else
KDIR=/lib/modules/3.5.0-23-generic/build
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -f *.ko *.o *.mod.c *.symvers
endif
执行makefile编译模块-》执行insmod helloworld.ko控制台不会显示printk打印的消息,应该使用 dmesg -c指令。成功看到打印的消息
root@ubuntu:/home/gec/driver# dmesg -c
[706893.639845] Hello kernel, it's 2017!
c++类头文件
#ifndef MAN_H
#define MAN_H
class Man
{
public:
Man();
~Man();
void eat();
};
#endif // MAN_H
c++类源文件
#include "man.h"
#include <stdio.h>
Man::Man()
{
printf("man created\n");
}
Man::~Man(){
printf("man freed\n");
}
void Man::eat(){
printf("man eat\n");
}
extern "C"{
void test();
}
void test(){
// Man *man=new Man();
// man->eat();
Man man;
man.eat();
}
c头文件
#ifndef C_H
#define C_H
extern void test();
void ctest();
#endif // C_H
c源文件
#include "c.h"
void ctest(){
test();
}
测试入口main.cpp
#include <iostream>
extern "C"{
#include "c.h"
}
using namespace std;
int main(int argc, char *argv[])
{
cout << "Hello World!" << endl;
ctest();
return 0;
}
测试结果:
Hello World!
man created
man eat
man freed