idt_表未定义!编译内核模块时出现警告
我正在尝试在内核模块中使用 gate_desc *idt_table
。 desc.h 中定义的 set_trap_gate()
函数使用此指针。在 desc.h 中还有一个定义:extern gateway_desc idt_table[]
。
我尝试了不同的方法:
- 在我的模块中使用
idt_table
而没有定义或影响 影响
idt_table
与我的(有效)idt_table
地址 我在编译期间收到id_table
undefined 警告,或者idt_table
类型不完整。创建一个新的变量,例如
gate_desc *it = (gate_desc *)@;
并复制set_trap_gate
,set_gate
,write_idt_entry
、pack_gate
函数从 sched.h 到我的模块文件(重命名它们,并使用它而不是idt_table
)。这编译得很好,但是当插入我的模块时,我在模块中收到未知符号 (ret -1) 错误。 (我的模块中没有对 idt_table 的引用,并且我从 sched 中使用的函数确实使用了我的变量)。
我试图查看 sched.h 包含的文件中定义了 idt_table 的位置,但找不到它!
有人知道我如何使用 sched.h 中的 idt_table 指针(用正确的地址影响它)或创建一个新指针吗?
I'm trying to use gate_desc *idt_table
in a kernel module. The set_trap_gate()
function defined in desc.h uses this pointer. In desc.h is also a definition : extern gate_desc idt_table[]
.
I tried different things:
- use
idt_table
in my module without definition or affectation affect
idt_table
with my (valid)idt_table
address
I get either anid_table
undefined warning during compilation or incomplete type foridt_table
.creating a new var named for instance
gate_desc *it = (gate_desc *)@;
And copy theset_trap_gate
,set_gate
,write_idt_entry
,pack_gate
functions from sched.h to my module file (renaming them, and using it instead ofidt_table
). This compiles fine but when inserting my module I get an unknown symbol in module (ret -1) error.
(there is no reference in my module to idt_table, and the functions I use from sched do use my variable).
I tried to see where in the files included by sched.h was defined idt_table
, but couldn't find it!
Does someone know how I could use, the idt_table pointer from sched.h (affecting it with the corrct address) or create a new pointer?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
理论上,您可以通过以下方式实现非 init 部分
set_trap_gate()
:但这将是 CPU 本地的,即不能保证修改除运行它的 CPU 之外的任何其他 IDT 。此外,它可能会与写保护内存发生冲突。
您到底想实现什么目标?
Theoretically, you could implement a non-init-section
set_trap_gate()
via:But that'd be CPU-local, i.e. it's not guaranteed to modify any other IDT but the one of the CPU it's running on. Also, it might fall foul of writeprotected memory.
What exactly is it you're trying to achieve ?