文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>find_task_by_vpid undefined 问题

find_task_by_vpid undefined 问题

时间:2010-05-26  来源:seaquester

find_task_by_vpid undefined 问题

冷胜魁(Seaquester)
[email protected]
2010-5-26

今天在build一个kernel module的时候,遇到一个问题。

编译的时候出现下面的警告:
WARNING: "find_task_by_vpid" [/home/work/try/va2pa/va2pa.ko] undefined!

insmod的时候失败,错误信息如下:
insmod: error inserting 'va2pa.ko': -1 Unknown symbol in module

查看dmesg信息发现:
[ 7201.843077] va2pa: Unknown symbol find_task_by_vpid

这表示模块中使用的 find_task_by_vpid 函数没有被kernel export。

很奇怪,因为这个module是来自于别人写的一段代码,里面使用了find_task_by_pid。然后,有注释说,在Linux Kernel 2.6.24以后,应该使用 find_task_by_vpid。

我在2.6.18和2.6.26上面测试过,是OK的。

这次使用的kernel是2.6.34,结果出现了上面的错误。

google了一下,发现在Linux Kernel 2.6.30之后,find_task_by_vpid没有被export。具体信息可以参考: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=17f98dcf6010a1cfd25d179fd0ce77d3dc2685c3

解决的方法是使用 pid_task 来替代。
查了一下pid_task的定义,发现它的参数类型与find_task_by_vpid不一样,需要使用find_vpid来转换一下。

#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
    if (!(pcb_tmp = find_task_by_pid(pid))) {
#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
    if (!(pcb_tmp = find_task_by_vpid(pid))) {
#else
    if (!(pcb_tmp = pid_task(find_vpid(pid), PIDTYPE_PID))) {
#endif

测试了一下,可以正常工作。
相关阅读 更多 +
排行榜 更多 +
都市毁灭模拟器

都市毁灭模拟器

音乐节奏 下载
神探诡事录器门位置一览

神探诡事录器门位置一览

冒险解谜 下载
猛兽派对好友通行证使用事宜

猛兽派对好友通行证使用事宜

冒险解谜 下载