我正在编写我的第一个Linux内核模块,它实际上是一个RAM磁盘驱动程序以及一些附加功能.当我尝试insmod模块时,发生了"分段错误".
这里是相应的内核日志,实际上是两条内核oops消息.在阅读了很多相关的教程后,我仍然对这个日志有一些疑问:
1)在通话跟踪列表中,有一些带有问号和没有问号的功能,问号"?"的特殊含义是什么?那个功能?
2)我对调用跟踪的理解是:除了底部函数之外的每个函数都应该由它下面的函数调用.但为此:
[ 397.855035] [<c05a603b>] ? exact_lock+0x0/0x16
[ 397.855035] [<f787c252>] ? diag_init+0x252/0x4bd [b2bntb_diag]
[ 397.855035] [<c0451e35>] ? __blocking_notifier_call_chain+0x42/0x4d
[ 397.855035] [<f787c000>] ? diag_init+0x0/0x4bd [b2bntb_diag]
Run Code Online (Sandbox Code Playgroud)
diag_init我编写的模块init函数.它不会调用任何命名的函数,exact_lock或者__blocking_notifier_call_chain这两个函数如何在调用跟踪中出现?
3)错误是什么以及如何解决?
顺便说一下,我正在运行的Linux内核有2.6.35.6版本.
[ 397.850955] ------------[ cut here ]------------
[ 397.851544] WARNING: at lib/kobject.c:168 kobject_add_internal+0x3a/0x1e2()
[ 397.851601] Hardware name: VirtualBox
[ 397.851639] kobject: (f4580258): attempted to be registered with empty name!
[ 397.851678] Modules linked in: b2bntb_diag(+) fuse vboxvideo drm sunrpc ip6t_REJECT nf_conntrack_ipv6 …Run Code Online (Sandbox Code Playgroud) 我想创建一个列表,它的每个元素都是一个数组,类似于C语言中的结构数组.
可以在TCL中完成吗?如果可以的话?非常感谢!
我做了一些尝试,但它失败了......
tcl>set si(eid) -1
tcl>set si(core) 0
tcl>set si(time) 0
tcl>lappend si_list "$si"
Error: can't read "si": variable is array
Run Code Online (Sandbox Code Playgroud) 我已经尝试在/ proc/bus/pci目录下读取用户空间pci条目并在驱动程序中调用内核空间API pci_read_config_word().但似乎两者都只能读取pci基本配置空间,偏移量小于0x100.
我想要读取的偏移量超过0x100,有人能告诉我如何在Linux中执行此操作吗?如果在内核空间中完成,那么告诉哪个API会非常感激.非常感谢你!