我想从linux内核开源单独构建一个linux内核模块。
源文件是mm / ksm.c。
但问题发生在
之下make -C /usr/src/linux-headers-3.16.0-30-generic/ M=/home/wei/module modules
make[1]: Entering directory `/usr/src/linux-headers-3.16.0-30-generic'
CC [M] /home/wei/module/ksm.o
Building modules, stage 2.
MODPOST 1 modules
WARNING: "munlock_vma_page" [/home/wei/module/ksm.ko] undefined!
WARNING: "follow_page_mask" [/home/wei/module/ksm.ko] undefined!
WARNING: "page_remove_rmap" [/home/wei/module/ksm.ko] undefined!
WARNING: "mm_find_pmd" [/home/wei/module/ksm.ko] undefined!
WARNING: "__page_check_address" [/home/wei/module/ksm.ko] undefined!
WARNING: "anon_vma_interval_tree_iter_next" [/home/wei/module/ksm.ko] undefined!
WARNING: "__mmu_notifier_change_pte" [/home/wei/module/ksm.ko] undefined!
WARNING: "ptep_clear_flush" [/home/wei/module/ksm.ko] undefined!
WARNING: "page_address_in_vma" [/home/wei/module/ksm.ko] undefined!
WARNING: "alloc_pages_vma" [/home/wei/module/ksm.ko] undefined!
WARNING: "page_add_anon_rmap" [/home/wei/module/ksm.ko] undefined!
WARNING: "try_to_free_swap" [/home/wei/module/ksm.ko] undefined!
WARNING: "lru_add_drain_all" [/home/wei/module/ksm.ko] undefined!
WARNING: "linear_hugepage_index" [/home/wei/module/ksm.ko] undefined!
WARNING: "anon_vma_interval_tree_iter_first" [/home/wei/module/ksm.ko] undefined!
WARNING: "split_huge_page_to_list" [/home/wei/module/ksm.ko] undefined!
WARNING: "handle_mm_fault" [/home/wei/module/ksm.ko] undefined!
WARNING: "mlock_vma_page" [/home/wei/module/ksm.ko] undefined!
WARNING: "__put_anon_vma" [/home/wei/module/ksm.ko] undefined!
CC /home/wei/module/ksm.mod.o
LD [M] /home/wei/module/ksm.ko
make[1]: Leaving directory `/usr/src/linux-headers-3.16.0-30-generic'
即使我在每个头文件中插入EXPORT_SYMBOL(fun);
,我也无法解决。
如何解决此警告?
答案 0 :(得分:0)
将部分内核代码编译为模块的最佳方法是运行make menuconfig
并选择编译为模块。或者,甚至可以通过手动编辑.config
文件来完成此操作。不鼓励手动编译内核部分模块,因为它会增加不必要的工作。
此外,您必须知道并非内核的所有部分都可以编译为模块:内核核心(即内存管理,调度程序等)尚未设计为编译为可加载的内核模块。
现在,关于您的具体问题,您正在编译与内存管理相关的文件。如果查看mm/Makefile
和mm/Kconfig
文件,则会看到此文件无法编译为模块。