linux killproc,Linux学习笔记(十五)--kill_proc和kill_proc_info

kill_proc和kill_proc_info都是Linux内核提供的API,在VME_Universe驱动中处理中断的时候要用到。原来文件vme_interrupt.c中的相关部分是这样的:

#ifdef ARCH

if (kill_proc_info(handle->notify.siginfo.si_signo,&handle->notify.siginfo,handle->pid) {

#else

if (kill_proc(handle->pid,handle->notify.siginfo.si_signo,(int)&handle->notify.siginfo) {

#endif

printk(KERN_ERR "VME: Error occurred while sending singal to "process %d for interrupt level %d\n",handle->pid,level);

}

这一段在$ make时候会报错说找不到对kill_proc的声明。我自作聪明的解决方式是把#ifdef改成#ifndef,这样条件编译的对象就成了kill_proc_info而不是kill_proc,这样总算能够通过编译,可是会有警告说kill_proc_info未定义。看来这两个函数不是那么清楚就能弄明白的。

查了一下资料,原来kill_proc_info作为内核API在2.6.10版本里就去掉了,这也正是老版本的vme_universe驱动在这个地方并没有条件编译而是直接调用kill_proc_info的原因。至于kill_proc本来是对kill_proc_info的封装,在kill_proc_info不再使用之后就用的这个。可是在2.6.27版本的内核里把kill_proc也给除去,是不是让人很傻眼呢……

于是只好直接动手,先把#ifdef改回去,再直接用kill_pid代替kill_proc,编译,安装……成功!接着加载……不再是FATAL Error,却冒出来一个Segmentation fault。用$ demsg查看,显示的记录有:

VME: Universe device not found

VME: Failure initializing Tundra universe device

BUG: unable to handle kernel NULL pointer dereference at 00000f00

IP: [] free_slave_window+0x2f/0x150 [vme_universe]

*pde: 00000000

Oops: 0000 [#1] SMP

……等等等等。

其实输入$ lsmod的话,也是能显示出vme_universe驱动已被加载。至于什么找不到设备的问题,那是当然的:我还没接上设备呢。我担心的是那个大大的BUG,不知道是不是和所谓Segmentation fault有关?另外,我依然找不到驱动自带的测试程序……

革命尚未成功,同志仍须努力。

赞过:

赞 正在加载……

相关

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值