linux内核编程学习笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haolipengzhanshen/article/details/85257446

常见问题

一、内核模块A调用内核模块B

查看导出的内核符号表

cat /proc/kallsyms | grep 'func_m2'

1、一个内核模块A调用另一个内核模块B的导出函数,需要做到三点
1.模块B先加载
2.模块B函数导出成功
3.模块B编译后会有个Module.symvers,将这个Module.symvers拷贝到模块A的编译目录

https://stackoverflow.com/questions/33718358/insmod-fails-with-unknown-symbol-in-module-for-a-symbol-defined-in-another-mod?rq=1#

二、内核模块如何调试

printk + systemtap + kgdb调试环境搭建

三、内核模块相关命令

modprobe

insmod

rmmod

printk

每次重新编译模块后,必须卸载并重新加载后,针对模块的修改才会生效

四、dmesg和/var/log/messages区别

开启syslog服务后,是一样的

五、以iptables/netfilter的set模块为例子

需要编写用户态和内核态模块

用户态iptables:libxt_set.c

内核态netfilter:xt_set.c

六、编译内核模块的makefile

obj-y和obj-m

猜你喜欢

转载自blog.csdn.net/haolipengzhanshen/article/details/85257446