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

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

进程管理API之find_task_by_vpid

struct task_struct *find_task_by_vpid(pid_t vnr),在当前task的namespace下根据vpid找到对应的task 其使用的例子如下: SYSCALL...
  • tiantao2012
  • tiantao2012
  • 2017年11月25日 09:03
  • 145

ubuntu 14.04 安装opencv3 过程以及遇到的问题

1st step: Install the DependenciesTo install the dependencies required from OpenCV, just run the fol...
  • liugallup
  • liugallup
  • 2015年12月16日 12:11
  • 3232

ubuntu编译libid3tag库报错问题解决

在使用ubuntu编译minidlna时遇到如下报错:/home/work_sdc1/tenda3/ac18_LAS01/AC_PRODUCT_SVN4219/cbb/service/minidlna...
  • u013401853
  • u013401853
  • 2017年01月06日 18:55
  • 763

ARM开发板OK6410移植opencv-2.4.7库qt界面显示(附加各种问题解决方案)

转载:http://blog.csdn.net/jiebaoabcabc/article/details/22935185  请先观看《linuxubuntu12.04上opencv2.4.7 cm...
  • jd404647184
  • jd404647184
  • 2015年05月15日 15:39
  • 2536

Opencv 在ubuntu安装过程

opencv在ubuntu系统安装1.安装需要Packages GCC CMake Git GTK pkg-config python ffmpeg [optional] libtbb2 libtbb...
  • zijin0802034
  • zijin0802034
  • 2016年06月15日 15:58
  • 353

安装PHP5.6.19遇到的一个Libiconv的问题

ext/gd/libgd/.libs/gdkanji.o: In function `do_convert\': /var/soft/php-5.3.8/ext/gd/libgd/gdkan...
  • ikscher
  • ikscher
  • 2016年03月29日 21:38
  • 2874

Eclipse常见问题及解决

一.The environment variable HOME is not set. 1. 详细日志:eclipse.buildId=4.5.2.M20160212-1500 java.vendo...
  • z191726501
  • z191726501
  • 2016年05月27日 12:37
  • 3841

Linux交叉编译的时候,加载freetype动态库的时候出现了问题,(已解决)

最近在看韦东山老师的教学视频第三期的第一个项目,感觉老师讲得非常不错,可惜个人的接受能力还有待提高,视频要反复的看,O(∩_∩)O~在写交叉编译的时候出现了问题,我的理解是freetype的库版本比我...
  • u010832976
  • u010832976
  • 2016年03月30日 23:38
  • 947

Keil编译常见问题

1.出现warning:  #1-D: last line of file ends without a newline 解决方案:这是由于在函数的“}”之后没有回车的原因造成的,添加回车后,可消除警...
  • u013199724
  • u013199724
  • 2014年04月02日 10:29
  • 1394

搞定LIBTOOL is undefined问题有方法可用[转载]

关于在linux系统中的LIBTOOL is undefined问题,很多网友都有问到要怎么的进行解决呢!那么今天我们就来看看具体的解决方法吧!   [plain]  configu...
  • caizi001
  • caizi001
  • 2014年08月27日 15:14
  • 1623
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:find_task_by_vpid undefined 问题
举报原因:
原因补充:

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