当前位置: 技术问答>linux和unix
在linux内核态读取文件的问题,请各位指点!!
来源: 互联网 发布时间:2016-07-29
本文导语: 我写了一个内核模块,主要是改写系统调用向量表。修改哪些系统向量函数指针需要读取外部文件配置。 我采用的第一种方式 : 在用户态先读取文件,然后利用setsockopt函数把数据传给内核模块, ...
我写了一个内核模块,主要是改写系统调用向量表。修改哪些系统向量函数指针需要读取外部文件配置。
我采用的第一种方式 : 在用户态先读取文件,然后利用setsockopt函数把数据传给内核模块,
内核模块接收到数据后就马上改变系统向量表。 但是这种方式不知道怎么回事总是死机,
一调用到修改过的系统调用就死机,我猜测是不是修改系统调用表只能在系统调用方式的函数中调用,
而不能在socket的接收函数中调用,没有信号量保护?
然后我采用第二种方式:内核直接读取文件,采用filp_open,set_fs(KERNEL_DS),vfs_read的方式读取文件,但是vfs_read
函数返回失败(-14),搞不清问题的原因。
请教各位实现以上功能一般采用什么方式比较合理,出错的原因是什么。 请指点指点!谢谢!!
我采用的第一种方式 : 在用户态先读取文件,然后利用setsockopt函数把数据传给内核模块,
内核模块接收到数据后就马上改变系统向量表。 但是这种方式不知道怎么回事总是死机,
一调用到修改过的系统调用就死机,我猜测是不是修改系统调用表只能在系统调用方式的函数中调用,
而不能在socket的接收函数中调用,没有信号量保护?
然后我采用第二种方式:内核直接读取文件,采用filp_open,set_fs(KERNEL_DS),vfs_read的方式读取文件,但是vfs_read
函数返回失败(-14),搞不清问题的原因。
请教各位实现以上功能一般采用什么方式比较合理,出错的原因是什么。 请指点指点!谢谢!!
|
修改哪些系统向量函数指针需要读取外部文件配置
------------------------
不建议用户程序跟内核模块这样通讯
通过设备文件的读写、或者/proc 文件 是正常的方法
主要是改写系统调用向量表
---------------------
这个需要修改cr0 寄存器的权限控制,不知道lz考虑这些没有
------------------------
不建议用户程序跟内核模块这样通讯
通过设备文件的读写、或者/proc 文件 是正常的方法
主要是改写系统调用向量表
---------------------
这个需要修改cr0 寄存器的权限控制,不知道lz考虑这些没有
|
方法1, 用netlink socket,应用程序可以和内核通讯。
方法2, 应当是你的代码有问题。