# Can't compile a module, vga2usb: Unknown symbol videobuf_str

## PM17E5

I've been at this for over an hour and I'm still confused as to which parts or features of the kernel I'm missing. I'm trying to compile a pretty uncommon module for an Epiphan VGA2USB device, with the only information I found similar to what I'm doing over here:

https://bbs.archlinux.org/viewtopic.php?id=128867

I download the module from:

http://www.epiphan.com/downloads/linux/vga2usb-3.26.0.27-ubuntu-3.0.0-12-generic_X86_64.tbz

And upon trying to compile it, I get:

```
modinfo: ERROR: Module vga2usb.ko not found.

make -C /lib/modules/3.7.1-gentoo/build SUBDIRS=/root/temp modules

make[1]: Entering directory `/usr/src/linux-3.7.1-gentoo'

  CC [M]  /root/temp/drvwrapper.o

  CC [M]  /root/temp/drvwrapper_lib.o

  LD [M]  /root/temp/vga2usb.o

  Building modules, stage 2.

  MODPOST 1 modules

WARNING: "videobuf_mmap_free" [/root/temp/vga2usb.ko] undefined!

WARNING: "kref_put" [/root/temp/vga2usb.ko] undefined!

WARNING: "videobuf_mmap_mapper" [/root/temp/vga2usb.ko] undefined!

WARNING: "videobuf_queue_vmalloc_init" [/root/temp/vga2usb.ko] undefined!

WARNING: "videobuf_streamon" [/root/temp/vga2usb.ko] undefined!

WARNING: "videobuf_iolock" [/root/temp/vga2usb.ko] undefined!

WARNING: "videobuf_qbuf" [/root/temp/vga2usb.ko] undefined!

WARNING: "__tracepoint_module_get" [/root/temp/vga2usb.ko] undefined!

WARNING: "mcount" [/root/temp/vga2usb.ko] undefined!

WARNING: "videobuf_querybuf" [/root/temp/vga2usb.ko] undefined!

WARNING: "videobuf_read_stream" [/root/temp/vga2usb.ko] undefined!

WARNING: "videobuf_stop" [/root/temp/vga2usb.ko] undefined!

WARNING: "__stack_chk_fail" [/root/temp/vga2usb.ko] undefined!

WARNING: "videobuf_vmalloc_free" [/root/temp/vga2usb.ko] undefined!

WARNING: "videobuf_to_vmalloc" [/root/temp/vga2usb.ko] undefined!

WARNING: "videobuf_dqbuf" [/root/temp/vga2usb.ko] undefined!

WARNING: "kref_init" [/root/temp/vga2usb.ko] undefined!

WARNING: "kref_get" [/root/temp/vga2usb.ko] undefined!

WARNING: "videobuf_reqbufs" [/root/temp/vga2usb.ko] undefined!

WARNING: "videobuf_poll_stream" [/root/temp/vga2usb.ko] undefined!

WARNING: "videobuf_streamoff" [/root/temp/vga2usb.ko] undefined!

  LD [M]  /root/temp/vga2usb.ko

make[1]: Leaving directory `/usr/src/linux-3.7.1-gentoo'
```

It seems like I'm just missing some part of V4L but no matter how much I keep searching for all those various terms in google I'm still not very knowledgeable on the inner workings of the linux kernel or programming so I I'm limited in my options.

Just for the sake of trying to insert the module, to see what errors I get, it outputs the following:

```
[ 1764.908747] vga2usb: Unknown symbol videobuf_streamoff (err 0)

[ 1764.908753] vga2usb: Unknown symbol videobuf_poll_stream (err 0)

[ 1764.908768] vga2usb: Unknown symbol videobuf_reqbufs (err 0)

[ 1764.908772] vga2usb: Unknown symbol kref_get (err 0)

[ 1764.908777] vga2usb: Unknown symbol kref_init (err 0)

[ 1764.908785] vga2usb: Unknown symbol videobuf_dqbuf (err 0)

[ 1764.908788] vga2usb: Unknown symbol videobuf_to_vmalloc (err 0)

[ 1764.908792] vga2usb: Unknown symbol videobuf_vmalloc_free (err 0)

[ 1764.908799] vga2usb: Unknown symbol __stack_chk_fail (err 0)

[ 1764.908805] vga2usb: Unknown symbol videobuf_stop (err 0)

[ 1764.908808] vga2usb: Unknown symbol videobuf_read_stream (err 0)

[ 1764.908813] vga2usb: Unknown symbol videobuf_querybuf (err 0)

[ 1764.908816] vga2usb: Unknown symbol mcount (err 0)

[ 1764.908820] vga2usb: Unknown symbol __tracepoint_module_get (err 0)

[ 1764.908822] vga2usb: Unknown symbol videobuf_qbuf (err 0)

[ 1764.908833] vga2usb: Unknown symbol videobuf_iolock (err 0)

[ 1764.908835] vga2usb: Unknown symbol videobuf_streamon (err 0)

[ 1764.908838] vga2usb: Unknown symbol videobuf_queue_vmalloc_init (err 0)

[ 1764.908842] vga2usb: Unknown symbol videobuf_mmap_mapper (err 0)

[ 1764.908847] vga2usb: Unknown symbol kref_put (err 0)

[ 1764.908850] vga2usb: Unknown symbol videobuf_mmap_free (err 0)
```

I think this is something pretty simple to figure out. Either it's something to do with that module being incompatible with the V4L changes in linux, ever since VRL1 was taken out? Or I'm missing some parts of the kernel? My .config is:

http://pastebin.com/XgdaRZw9

----------

## jrussia

Sorry if I am stating the obvious but are you following the instructions provided on their web site?

http://www.epiphan.com/solutions_new/image-capture/how-to-install-frame-grabber-drivers-on-a-workstation-running-linux-and-view-the-grabbed-video/

----------

## PM17E5

I should have mentioned that I have tried that, then I had to resort to more digging around on google (what little info is available) to see what other things I can try. Their approach simply calls for loading a precompiled module, it doesn't seem like they keep up on the kernel updates that often, and I figured no matter what precompiled module I get from them it will not work anyways unless I get the correct kernel. So I found that other approach where they give you a half precompiled? module? Which seems like it compiles the module for the kernel but uses some of their proprietary code. This helped me get a little closer, now if only I could figure out what all those dvb? or v4l1? v4l2? whatever errors I'm getting.

----------

## jrussia

I see what you're saying. I dug around a little and a lot of the functions (videobuf_stop, videobuff_streamoff, etc.) that you are missing should be provided in a module  from CONFIG_VIDEOBUF_GEN

Hopefully that helps you a little more than my first comment  :Smile: 

----------

## PM17E5

Spasibo  :Smile: . I kinda kept getting hints of that during my digging around, however I can't find out how to get it to turn on. Whenever I do a search for it in menuconfig it just says Type : tristate and doesn't seem to have any actual prompts, and lists a whole bunch of things that select it, yet I'm not quite sure how to have them select it? I see a bunch of devices that call for it, so should I compile support for those devices even though I don't have them in hopes that they will turn it on? I kind of want to just change it in .config but I don't know if that's a good idea.

----------

## jrussia

Well you are on a slightly different kernel (3.7.1) than mine (3.6.11), but as fortune may have it, it is enabled in my kernel, so I can share what it says. There may be other ways of enabling it? Not really sure but here is mine:

Selected by:

VIDEOBUF_DMA_SG && MEDIA_SUPPORT && HAS_DMA || VIDEOBUF_MALLOC && MEDIA_SUPPORT || VIDEOBUF_DMA_CONTIG && MEDIA_SUPPORT && HAS_DMA || VIDEOBUF_DVB && MEDIA_SUPPORT || USB_ZR364XX && MEDIA_SUPPORT && VIDEO_CAPTURE_DRIVERS && V4L_USB_DRIVERS && MEDIA_CAMERA_SUPPORT && VIDEO_V4L2 || VIDEO_OMAP2_VOUT && MEDIA_SUPPORT && VIDEO_CAPTURE_DRIVERS

Edit:

I see I am not being very attentive as you seem to already get this info... I bolded the configuration that is probably the simplest, and you can search for each item in menuconfig and enable it, and once that set is enabled then VIDEOBUF_GEN will be enabled.Last edited by jrussia on Mon Dec 31, 2012 5:21 pm; edited 1 time in total

----------

## PM17E5

Hmm, can you do me a favour and try to download and compile that module and see if it works on your kernel?

----------

## jrussia

Sure, I'll give it a shot.

----------

## jrussia

Alright, so the version you have didn't work for my kernel because the module was the wrong format. I downloaded vga2usb-3.27.6.29-3.6.10-2.fc17.x86_64.tbz

since it better matches my kernel. This one was able to start compiling but failed because I was still missing at least one kernel option (CONFIG_PARAVIRT).

----------

## PM17E5

So I selected USB_ZR364XX out of curiosity and it called that tristate module of CONFIG_VIDEOBUF_GEN  :Smile: . So I guess now I just have to hunt down the following and also get them turned on and I might actually get this device to work. I'm excited.

```
WARNING: "kref_put" [/root/temp/vga2usb.ko] undefined!

WARNING: "__tracepoint_module_get" [/root/temp/vga2usb.ko] undefined!

WARNING: "mcount" [/root/temp/vga2usb.ko] undefined!

WARNING: "__stack_chk_fail" [/root/temp/vga2usb.ko] undefined!

WARNING: "kref_init" [/root/temp/vga2usb.ko] undefined!

WARNING: "kref_get" [/root/temp/vga2usb.ko] undefined!
```

----------

## PM17E5

Can anyone help me track these down? Google really sucks when trying to figure this stuff out.

----------

## NeddySeagoon

PM17E5,

Try 

```
$ cd /usr/src/linux

roy@NeddySeagoon /usr/src/linux $ grep -R videobuf_streamoff
```

the important line in the output is 

```
drivers/media/v4l2-core/videobuf-core.c:EXPORT_SYMBOL_GPL(videobuf_streamoff);
```

so the symbol is exported by v4l2

Is that in the kernel you are trying to build against?

----------

## PM17E5

Thank you for providing me with that info, I'm still trying to make sense of this all but this is the output I got from it.

```
Module.symvers:0x00000000       videobuf_streamoff      drivers/media/v4l2-core/videobuf-core   EXPORT_SYMBOL_GPL

Documentation/video4linux/videobuf:    int videobuf_streamoff(struct videobuf_queue *q);

include/media/videobuf-core.h:int videobuf_streamoff(struct videobuf_queue *q);

drivers/media/platform/davinci/vpfe_capture.c:                  videobuf_streamoff(&vpfe_dev->buffer_queue);

drivers/media/platform/davinci/vpfe_capture.c:  ret = videobuf_streamoff(&vpfe_dev->buffer_queue);

drivers/media/platform/davinci/vpfe_capture.c:  ret = videobuf_streamoff(&vpfe_dev->buffer_queue);

drivers/media/platform/davinci/vpbe_display.c:  ret = videobuf_streamoff(&layer->buffer_queue);

drivers/media/platform/davinci/vpbe_display.c:  ret = videobuf_streamoff(&layer->buffer_queue);

drivers/media/platform/soc_camera/soc_camera.c:         videobuf_streamoff(&icd->vb_vidq);

drivers/media/platform/via-camera.c:    ret = videobuf_streamoff(&cam->vb_queue);

drivers/media/platform/sh_vou.c:        videobuf_streamoff(&vou_file->vbq);

drivers/media/platform/timblogiw.c:     return videobuf_streamoff(&fh->vb_vidq);

drivers/media/platform/omap24xxcam.c:   rval = videobuf_streamoff(q);

drivers/media/platform/omap24xxcam.c:   videobuf_streamoff(&fh->vbq);

drivers/media/platform/omap/omap_vout.c:                videobuf_streamoff(q);

drivers/media/platform/omap/omap_vout.c:                ret = videobuf_streamoff(q);

drivers/media/platform/omap/omap_vout.c:        ret = videobuf_streamoff(&vout->vbq);

drivers/media/platform/fsl-viu.c:       return videobuf_streamoff(&fh->vb_vidq);

drivers/media/usb/au0828/au0828-video.c:                        videobuf_streamoff(&fh->vb_vidq);

drivers/media/usb/au0828/au0828-video.c:                        videobuf_streamoff(&fh->vb_vbiq);

Binary file drivers/media/usb/zr364xx/zr364xx.o matches

drivers/media/usb/zr364xx/zr364xx.c:    return videobuf_streamoff(&cam->vb_vidq);

drivers/media/usb/zr364xx/zr364xx.c:            videobuf_streamoff(&cam->vb_vidq);

Binary file drivers/media/usb/zr364xx/zr364xx.ko matches

drivers/media/usb/tm6000/tm6000-video.c:        videobuf_streamoff(&fh->vb_vidq);

drivers/media/usb/cx231xx/cx231xx-417.c:        return videobuf_streamoff(&fh->vidq);

drivers/media/usb/cx231xx/cx231xx-417.c:                videobuf_streamoff(&fh->vidq);

drivers/media/usb/cx231xx/cx231xx-video.c:      videobuf_streamoff(&fh->vb_vidq);

drivers/media/usb/s2255/s2255drv.c:     videobuf_streamoff(&fh->vb_vidq);

drivers/media/usb/s2255/s2255drv.c:             videobuf_streamoff(&fh->vb_vidq);

drivers/media/usb/em28xx/em28xx-video.c:                        videobuf_streamoff(&fh->vb_vidq);

drivers/media/usb/em28xx/em28xx-video.c:                        videobuf_streamoff(&fh->vb_vbiq);

drivers/media/usb/tlg2300/pd-video.c:   return videobuf_streamoff(&front->q);

drivers/media/pci/cx23885/cx23885-video.c:                      videobuf_streamoff(&fh->vbiq);

drivers/media/pci/cx23885/cx23885-video.c:      err = videobuf_streamoff(get_queue(fh));

drivers/media/pci/cx23885/cx23885-417.c:        return videobuf_streamoff(&fh->mpegq);

drivers/media/pci/cx23885/cx23885-417.c:                videobuf_streamoff(&fh->mpegq);

drivers/media/pci/bt8xx/bttv-driver.c:  retval = videobuf_streamoff(bttv_queue(fh));

drivers/media/pci/bt8xx/bttv-driver.c:          videobuf_streamoff(&fh->cap);

drivers/media/pci/cx25821/cx25821-video.c:      err = videobuf_streamoff(get_queue(fh));

drivers/media/pci/saa7134/saa7134-empress.c:    return videobuf_streamoff(&dev->empress_tsq);

drivers/media/pci/saa7134/saa7134-video.c:              videobuf_streamoff(&fh->cap);

drivers/media/pci/saa7134/saa7134-video.c:      err = videobuf_streamoff(saa7134_queue(fh));

drivers/media/pci/cx18/cx18-ioctl.c:    return videobuf_streamoff(cx18_vb_queue(id));

drivers/media/pci/sta2x11/sta2x11_vip.c:        return videobuf_streamoff(&vip->vb_vidq);

drivers/media/pci/cx88/cx88-blackbird.c:        return videobuf_streamoff(&fh->mpegq);

drivers/media/pci/cx88/cx88-video.c:    err = videobuf_streamoff(get_queue(file));

drivers/media/common/saa7146/saa7146_video.c:      because videobuf_streamoff() relies on the capture running.

drivers/media/common/saa7146/saa7146_video.c:           err = videobuf_streamoff(&fh->video_q);

drivers/media/common/saa7146/saa7146_video.c:           err = videobuf_streamoff(&fh->vbi_q);

drivers/media/common/saa7146/saa7146_video.c:           DEB_D("warning: videobuf_streamoff() failed\n");

Binary file drivers/media/v4l2-core/videobuf-core.ko matches

Binary file drivers/media/v4l2-core/videobuf-core.o matches

drivers/media/v4l2-core/videobuf-core.c:static int __videobuf_streamoff(struct videobuf_queue *q)

drivers/media/v4l2-core/videobuf-core.c:int videobuf_streamoff(struct videobuf_queue *q)

drivers/media/v4l2-core/videobuf-core.c:        retval = __videobuf_streamoff(q);

drivers/media/v4l2-core/videobuf-core.c:EXPORT_SYMBOL_GPL(videobuf_streamoff);

drivers/media/v4l2-core/videobuf-core.c:                __videobuf_streamoff(q);

drivers/staging/media/solo6x10/v4l2.c:  return videobuf_streamoff(&fh->vidq);

drivers/staging/media/solo6x10/v4l2-enc.c:      return videobuf_streamoff(&fh->vidq);
```

----------

## PM17E5

The interesting thing is when I search for things like "__tracepoint_module_get" I get no results, which is starting to make this seem kind of hopeless.

NeddySeagoon,

What do you think is my best bet for making this thing run? Should I just download a really old kernel or something? I can't even get it to work in Virtualbox as I've read some USB devices like webcams have trouble going through the USB support in Virtualbox. I'd really hate to install Windows or another flavor of Linux on my laptop as a dual boot. That is my last resort.

----------

## NeddySeagoon

PM17E5,

Lets play the 'daft laddie' for a moment.  Plug in your Epiphan VGA2USB, run lsusb and post the output.

----------

## PM17E5

As of now I have the following on it:

```
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub

Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub

Bus 003 Device 005: ID 5555:1110 Epiphan Systems Inc. VGA2USB

Bus 003 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

Bus 001 Device 003: ID 13d3:3304 IMC Networks Asus Integrated Bluetooth module [AR3011]

Bus 001 Device 004: ID 058f:a014 Alcor Micro Corp. Asus Integrated Webcam

Bus 001 Device 005: ID 0bda:0139 Realtek Semiconductor Corp. RTS5139 Card Reader Controller

Bus 002 Device 003: ID 0bb4:0cbf HTC (High Tech Computer Corp.)
```

Which mya seem crowded but even when I tried removing everything except that, and trying it in linux or in Virtualbox it didn't seem to make any difference.

----------

## NeddySeagoon

PM17E5,

Having grepped the kernel sources for the vendor and device IDs, I can confirm that they are not there. Well it was worth looking.

You don't actually have the sources for the module - you have a binary blob. The kernel module file is called vga2usb.ko and its really only intended be built against and load into one specific kernel.

From your downlaod, 3.26.0.27-ubuntu-3.0.0-12-generic_X86_64.tbz tarball name, thats 3.0.0

Anyway, it won't work with gentoo-sources-<random-version>, you need to get fairly close.

I would try with vga2usb-3.27.6.29-3.6.10-2.fc17.x86_64.tbz and gentoo-sources-3.6.10.

You might even be able to run that Fedora kernel under your Gentoo.

----------

## PM17E5

Thank you for those tips, they were pretty insightful. I installed 3.6.10-gentoo as you suggested, and it seems to have cleared a portion of those errors  :Smile: . Now I'm still getting some more errors anyways, so perhaps you're right and I do have to see if I can load that fc1 kernel. I'm still getting:

```
WARNING: "__list_add" [/root/temp/vga2usb.ko] undefined!

WARNING: "mcount" [/root/temp/vga2usb.ko] undefined!

WARNING: "list_del" [/root/temp/vga2usb.ko] undefined!

WARNING: "__stack_chk_fail" [/root/temp/vga2usb.ko] undefined!
```

Unless anyone has any ideas on how to fix that. Also I appreciate everyone's help considering this isn't really a gentoo problem. That's why I like this community and why it seems to stand out from the rest of the distribution support communities out there.

----------

## PM17E5

I really hate to keep posting here asking for all this odd help, but would anyone have any pointers on how to get that fedora kernel running? I've tried downloading an rpm of it so far and also installing rpm, then attempting to install the rpm package. But it didn't result in much other than mostly empty folders in /usr/src/rpm.

----------

## NeddySeagoon

PM17E5,

emerge rpm2tar, unpick the tarball.

Put the kernel and initrd files into /boot

Put the modules tree into /lib/modules/<kernel_name>

Update grub to add the kernel as a boot option - reboot to test.  If the box won't boot, reboot to your gentoo kernel.

----------

## PM17E5

I can't seem to find the binary version of it. The best I can find is:

http://rpmfind.net//linux/RPM/fedora/updates/17/x86_64/kernel-3.6.10-2.fc17.x86_64.html

Which leads me to the file kernel-3.6.10-2.fc17.src.rpm, however when I unpack it and look inside it's mostly packages and sources for the kernel, and I'm not sure if I can compile it the same way as I can with your average vanilla-sources.

----------

## NeddySeagoon

PM17E5,

The src in kernel-3.6.10-2.fc17.src.rpm tells that you have a source package.  If its .config file is correct, you build it in the normal way, not with genkernel.

----------

