#help#
是这样的,本人渣渣,最近想入门驱动开发,就先按书本写个模块编程helloworld程序,但折腾了很久很久都没能解决,始终未能编译成功,想入门,却被堵死在门外,憋屈-.......-,哪位大神帮帮忙~本人也第一次发帖问问题,有什么不妥的还请不吝赐教~
【问题描述及所做尝试】
==环境
虚拟机rhel7.4,内核:3.16.65
#参照的某本驱动入门本书说模块编程前,要先升级内核,我就升级了下内核(升级后3.16.65)。
#内核升级步骤:
官网上下载、解压后,
make menuconfig
make
make modules
make modules_install
make install
reboot
==代码
helloworld.c程序检查无误;
makefile 也是课本的;
==编译现象
一开始make时总是出错,升级后make没报错,但是就是没有生成本应出现的helloworld.o和helloworld.ko文件,
make前后当前目录下就只有helloworld.c和makefile
#make后有个隐藏文件夹.tmp_versions,但里面没文件
make时的现象为:
[root@localhost helloworld]# make all
make -C /usr/src/kernels/linux-3.16.65 M= /study_note/module_test/helloworld modules
make[1]: 进入目录“/usr/src/kernels/linux-3.16.65”
make[1]: 对“/study_note/module_test/helloworld”无需做任何事。
CHK include/config/kernel.release
CHK include/generated/uapi/linux/version.h
CHK include/generated/utsrelease.h
CALL scripts/checksyscalls.sh
CHK include/generated/compile.h
CHK include/generated/uapi/linux/version.h
Building modules, stage 2.
MODPOST 2236 modules
make[1]: 离开目录“/usr/src/kernels/linux-3.16.65”
==干过的傻逼事儿
对于“无需做任何事”,参照CSDN上分享的点子,make clean一下,确实清除了一些本渣渣看不懂的东西,
然后再make一下,确实没有"无需做任何事"这句,但是就像我升级内核一样,重新生成了n多不知啥啥的东东,
但是,还是没有helloworld.o和helloworld.ko文件【哭了】。
==猜测
可能我升级内核过程有啥毛病或者漏了哪个环节?但我都是按书本来的-.....-
【源代码】
helloworld.c代码:
1 #include<linux/module.h>
2 #include<linux/kernel.h>
3 #include<linux/init.h>
4
5 static int __init lkp_init(void)
6 {
7 printk("<1> hello world!\n");
8 return 0;
9 }
10
11 static void __exit lkp_cleanup(void )
12 {
13 printk("<1>goodbye!");
14 }
15
16 module_init(lkp_init);
17 module_exit(lkp_cleanup);
18 MODULE_LICENSE("GPL");
makefile代码:
1 obj-m := helloworld.o
2 KERNELDIR :=/usr/src/kernels/linux-3.16.65
3 PWD :=$(shell pwd)
4 all:
5 make -C $(KERNELDIR) M= $(PWD) modules
6 clean:
7 make -C $(KERNELDIR) M= $(PWD) clean
8