find_task_by_vpid undefined 问题

转载 2015年11月19日 19:31:20


转自:http://blog.chinaunix.net/uid-20644632-id-68049.html


今天在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之后(确切的说是从2.6.31开始),find_task_by_vpid没有被export(Kernel 里面还有定义该函数,但是没有导出symbol,所以 driver 里面不能再使用)。具体信息可以参考:
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,31)
    if (!(pcb_tmp = find_task_by_vpid(pid))) {
#else
    if (!(pcb_tmp = pid_task(find_vpid(pid), PIDTYPE_PID))) {
#endif

测试了一下,可以正常工作。

相关文章推荐

WSDLToJava Error: Thrown by JAXB : undefined element declaration 's:schema'

今天使用cxf的一个小工具--wsdl2java,打算将一个网上发布的wsdl文件转换成对应的java类,结果控制台却抛出了这个异常:WSDLToJava Error: Thrown by JAXB ...

Caused by: java.lang.NumberFormatException: For input string: "undefined"

1、错误描述2017-01-17 08:49:57,966 [http-apr-8080-exec-3] ERROR [core.interceptor.ExceptionResolverCustom...

undefined reference to 与 /usr/lib/ld: cannot find -l

今天在64位Linux系统上用gcc编译一个allInOne.c文件,发现了出错显示: ../../spooles.a(Perm_IO.o): In function `Perm_readFromFi...
  • DVD423
  • DVD423
  • 2013年07月26日 17:52
  • 1651

HDU 3974 Assign the task 2011 Multi-University Training Contest 14 - Host by FZU 线段树

/* 题意:给定点的上下级关系,规定如果给i分配任务a,那么它所有的下属(直接或间接)都得放弃手上任务开始进行任务a 给你一个序列,T a b,把任务b分配给a节点,C a 查询a正在进行的任务。 ...

This Task Is Currently Locked by a Running Workflow and Cannot Be Edited

Problem: In SharePoint Workflow, "This task is currently locked by a running workflow and cannot be ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:find_task_by_vpid undefined 问题
举报原因:
原因补充:

(最多只允许输入30个字)