小编Oli*_*veU的帖子

在Linux中加载模块时调用跟踪

我正在编写我的第一个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)

linux linux-device-driver linux-kernel

14
推荐指数
1
解决办法
8805
查看次数

我们可以创建一个数组列表以及如何?

我想创建一个列表,它的每个元素都是一个数组,类似于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)

tcl

3
推荐指数
1
解决办法
4167
查看次数

如何在Linux中读取扩展的PCIE配置空间?

我已经尝试在/ proc/bus/pci目录下读取用户空间pci条目并在驱动程序中调用内核空间API pci_read_config_word().但似乎两者都只能读取pci基本配置空间,偏移量小于0x100.

我想要读取的偏移量超过0x100,有人能告诉我如何在Linux中执行此操作吗?如果在内核空间中完成,那么告诉哪个API会非常感激.非常感谢你!

linux linux-device-driver linux-kernel pci

2
推荐指数
1
解决办法
9632
查看次数

标签 统计

linux ×2

linux-device-driver ×2

linux-kernel ×2

pci ×1

tcl ×1