linux调用ko的函数,Linux下一个ko模块中函数调用另一个ko模块中函数

mod_a.c

// Module A (mod_a.c)

#include#include#includestatic int func1(void)

{

printk("In Func: %s...\n",__func__);

return 0;

}

// Export symbol func1

EXPORT_SYMBOL(func1);

static int __init hello_init(void)

{

printk("Module 1,Init!\n");

return 0;

}

static void __exit hello_exit(void)

{

printk("Module 1,Exit!\n");

}

module_init(hello_init);

module_exit(hello_exit);

对应的makefile

ifneq ($(KERNELRELEASE),)

obj-m := mod_a.o

# Otherwise we were called directly from the command

# line; invoke the kernel build system.

else

KERNELDIR ?= /lib/modules/$(shell uname -r)/build

PWD := $(shell pwd)

default:

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

clean:

rm -rf *.o *.mod.c *.mod.o *.ko

endif

mod_b.c

// Module B (mod_b.c)

#include#include#includestatic int func2(void)

{

extern int func1(void);

func1();

printk("In Func: %s...\n",__func__);

return 0;

}

static int __init hello_init(void)

{

printk("Module 2,Init!\n");

func2();

return 0;

}

static void __exit hello_exit(void)

{

printk("Module 2,Exit!\n");

}

module_init(hello_init);

module_exit(hello_exit);

对应的makefile

KBUILD_EXTRA_SYMBOLS += /mnt/hgfs/share/2020/kernel/moduleA/Module.symvers

export KBUILD_EXTRA_SYMBOLS

ifneq ($(KERNELRELEASE),)

obj-m := mod_b.o

# Otherwise we were called directly from the command

# line; invoke the kernel build system.

else

KERNELDIR ?= /lib/modules/$(shell uname -r)/build

PWD := $(shell pwd)

default:

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

clean:

rm -rf *.o *.mod.c *.mod.o *.ko *.symvers

endif

第二个makefiel的KBUILD_EXTRA_SYMBOLS是绝对路径

你可能感兴趣的:(linux调用ko的函数)