赞
踩
ssh
,g++/gcc
, gdb
,make
vscode
选第一个,感觉没啥关系
右下角Open Config
HostName
填ip
然后就像打开本地文件一样打开服务器里的文件
经典hello,World
#include<stdio.h>
int main(){
printf("%s","Hello,World\n");
return 0;
}
选debug
, gdb
和 gcc
调试成功
安装库
yum install elfutils-libelf-devel
ctrl+shift+p打开命令面板。
生成了一个配置文件 c_cpp_properties.json
{ "configurations": [ { "name": "Linux", "includePath": [ // 编译环境 "${default}", "/lib/modules/4.18.0-305.12.1.el8_4.x86_64/build/include", "/lib/modules/4.18.0-305.12.1.el8_4.x86_64/build/arch/x86/include", "/lib/modules/4.18.0-305.12.1.el8_4.x86_64/build/arch/x86/include/generated" // 编辑器环境 // "/usr/src/kernels/4.18.0-305.12.1.el8_4.x86_64/include", // "/usr/src/kernels/4.18.0-305.12.1.el8_4.x86_64/arch/x86/include", // "/usr/src/kernels/4.18.0-305.12.1.el8_4.x86_64/arch/x86/include/generated" // g++ -v -E -x c++ - ], "defines": [ "__GNUC__", "__KERNEL__", "MODULE" ], "compilerPath": "/usr/bin/gcc", "cStandard": "gnu17", "cppStandard": "gnu++14", "intelliSenseMode": "linux-gcc-x64" } ], "version": 4 }
版本换成uname -r
命令输出的。
这里解释一下。如过你下了源码包可以用/usr/src
目录下的。这里我就注释掉了。而且不同linux
发行版位置还不太一样。这里我用的是CentOS
。
还有一个defines
很重要。
如图,linux
内核的一些宏要定义了特殊的宏才可以被条件编译。否则vscode
会无法识别这些宏。
//必要的头文件 #include <linux/kernel.h> #include <linux/init.h> #include <linux/module.h> //模块许可证声明(必须) MODULE_LICENSE("Dual BSD/GPL"); //模块加载函数(必须) static int hello_init(void) { printk(KERN_ALERT "Hello World enter/n"); return 0; } //模块卸载函数(必须) static void hello_exit(void) { printk(KERN_ALERT "Hello World exit/n"); } //模块的注册 module_init(hello_init); module_exit(hello_exit); //声明模块的作者(可选) MODULE_AUTHOR("lyf"); //声明模块的描述(可选) MODULE_DESCRIPTION("This is a simple example!/n"); //声明模块的别名(可选) MODULE_ALIAS("A simplest example");
Makefile 文件
CONFIG_MODULE_SIG=n
# 如果定义了KERNELRELEASE,那么我们已经从内核构建系统中被调用,并且可以使用它的语言。
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
# 否则,我们直接从命令行调用;调用内核构建系统。
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(PWD) clean
endif
# 加载模块
insmod ./hello.ko
# 删除模块
rmmod hello
# 列出模块
lsmod
# 查看模块日志
dmesg | tail
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。