当前位置: 技术问答>linux和unix
如何在内核中调用数学函数
来源: 互联网 发布时间:2015-12-02
本文导语: 为什么我在内核中无法调用数学函数 总是提示无法找到该函数(sin,sqrt... 都不行) system: debian linux 下面是我的makefile文件,和源代码 ////////////////////////////////////////////////// /*********Makefile**********/ obj-m := helloworld.o...
为什么我在内核中无法调用数学函数
总是提示无法找到该函数(sin,sqrt... 都不行)
system: debian linux
下面是我的makefile文件,和源代码
//////////////////////////////////////////////////
/*********Makefile**********/
obj-m := helloworld.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
EXTRA_CFLAGS := -I/usr/include/ -ffast-math -mhard-float -lm
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_version
/*********hello.c**********/
#include
#include
#include
#include
MODULE_LICENSE("GPL");
static int hello_init(void) {
unsigned int cr3;
double s=3;
__asm__ ("movl %%cr3, %0":"=a"(cr3));
printk(KERN_ALERT "Hello, worldn");
printk(KERN_ALERT "The process is "%s" (pid %i)n", current->comm, current->pid);
printk(KERN_ALERT "The cr3 register is "%08X"n", cr3);
//test math function
s=sin(s);
return 0;
}
static void hello_exit(void) {
printk(KERN_ALERT "Goodbye, cruel worldn");
}
module_init(hello_init);
module_exit(hello_exit);
////////////////////////////////////////////////////////////
总是提示无法找到该函数(sin,sqrt... 都不行)
system: debian linux
下面是我的makefile文件,和源代码
//////////////////////////////////////////////////
/*********Makefile**********/
obj-m := helloworld.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
EXTRA_CFLAGS := -I/usr/include/ -ffast-math -mhard-float -lm
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_version
/*********hello.c**********/
#include
#include
#include
#include
MODULE_LICENSE("GPL");
static int hello_init(void) {
unsigned int cr3;
double s=3;
__asm__ ("movl %%cr3, %0":"=a"(cr3));
printk(KERN_ALERT "Hello, worldn");
printk(KERN_ALERT "The process is "%s" (pid %i)n", current->comm, current->pid);
printk(KERN_ALERT "The cr3 register is "%08X"n", cr3);
//test math function
s=sin(s);
return 0;
}
static void hello_exit(void) {
printk(KERN_ALERT "Goodbye, cruel worldn");
}
module_init(hello_init);
module_exit(hello_exit);
////////////////////////////////////////////////////////////
|
see chapter 3.3.4 of ULK3
|
你的math.h是C库提供的,它在用户空间,而不在内核空间。
|
understand linux kernel 3rd edition
|
source code static link when u are compling