【Linxu系统】执行make没有生成.ko文件。MODPOST 0 modules。无报错

SOS_sos 2022-12-29 16:28:04

遇到了

Building modules, stage 2.

MODPOST 0 modules

这样的问题

 无法生成 .ko 文件,不能进一步执行“insmod ext4edit.ko”命令。
Makefile文件内容如下

obj-$(CONFIG_EXT4_FS) += ext4edit.o
ext4edit-y    := balloc.o bitmap.o block_validity.o dir.o ext4_jbd2.o extents.o \
        extents_status.o file.o fsmap.o fsync.o hash.o ialloc.o \
        indirect.o inline.o inode.o ioctl.o mballoc.o migrate.o \
        mmp.o move_extent.o namei.o page-io.o readpage.o resize.o \
        super.o symlink.o sysfs.o xattr.o xattr_trusted.o xattr_user.o
KERNELDIR:=/usr/src/linux-4.15.1
PWD:=$(shell pwd)
ext4edit-$(CONFIG_EXT4_FS_POSIX_ACL)    += acl.o
ext4edit-$(CONFIG_EXT4_FS_SECURITY)        += xattr_security.o
default:
    make -C $(KERNELDIR) M=$(PWD) modules
clean:
    rm -rf *.o *.mod.c *.ko *.symvers

不知道是不是obj-$ 是否出了问题 是不是应该换成obj-m之类的。新手不太敢改,请教各位大佬支个招。

...全文
1213 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
SOS_sos 2022-12-29
  • 打赏
  • 举报
回复 4

此帖终结,花费了一天找到了是makefile文件出的问题,最终发现是代码错误,makefile第一行obj-x x只能是y或m $表示引用,由于没有CONFIG_EXT4_FS=y或者m这样的语句。所以不会编译。给后面看到这篇文章来寻找解决办法的留下我的血泪教训。

SOS_sos 2022-12-29
  • 打赏
  • 举报
回复

快来人啊

Linux设备驱动程序学习(0)-Hello, world!模块 Linux设备驱动程序学习(0) -Hello, world!模块 一个学习Linux设备驱动程序都会碰到的第一个例程: #include #include MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { printk(KERN_ALERT "Hello, Tekkaman Ninja !\n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT "Goodbye, Tekkaman Ninja !\n Love Linux !Love ARM ! Love KeKe !\n"); } module_init(hello_init); module_exit(hello_exit); 我将其复制到我的工作目录,并编写了一个简单的Makefile文件: KERNELDIR = /home/tekkaman/working/SBC2440/linux-2.6.22.2 # The current directory is passed to sub-makes as argument PWD := $(shell pwd) INSTALLDIR = /home/tekkaman/working/rootfs/lib/modules CROSS_COMPILE =/home/tekkaman/working/crosstool-gcc410-k26222/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu- CC = $(CROSS_COMPILE)gcc obj-m := hello.o modules: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules modules_install: cp hello.ko $(INSTALLDIR) clean: rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions .PHONY: modules modules_install clean 说实话,以上是我参考了《Linux设备驱动程序(第3版)》的Makefile源码修改得来的。我对Makefile不是很了解,是该好好学习学习了! 然后就是make modulesmake modules_install 。 [root@Tekkaman-Ninja Helloworld]# make modules make -C /home/tekkaman/working/SBC2440/linux-2.6.22.2 M=/home/tekkaman/working/Linuxdriver/Helloworld modules make[1]: Entering directory `/home/tekkaman/working/SBC2440/linux-2.6.22.2' CC [M] /home/tekkaman/working/Linuxdriver/Helloworld/hello.o Building modules, stage 2. MODPOST 1 modules CC /home/tekkaman/working/Linuxdriver/Helloworld/hello.mod.o LD [M] /home/tekkaman/working/Linuxdriver/Helloworld/hello.ko make[1]: Leaving directory `/home/tekkaman/working/SBC2440/linux-2.6.22.2' [root@Tekkaman-Ninja Helloworld]# make modules_install cp hello.ko /home/tekkaman/working/rootfs/lib/modules [root@Tekkaman-Ninja Helloworld]# 在我的开发板上的操作: [Tekkaman2440@SBC2440V4]#cd /lib/modules/ [Tekkaman2440@SBC2440V4]#ls cs89x0.ko hello.

1,321

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧