Skip to contentSkip to conversation

udev and soc-camera

Q Valentin Longchamp 2 participants 4 messages Jan 27, 2010 – Jan 28, 2010 Media (V4L/DVB)

lore
Share & tools
lore
#0 lore raw

Hello,

I have a system that is built with OpenEmbedded where I use a mt9t031 camera with the soc-camera framework. The mt9t031 works ok with the current kernel and system.

However, udev does not create the /dev/video0 device node. I have to create it manually with mknod and then it works well. If I unbind the device on the soc-camera bus (and then eventually rebind it), udev then creates the node correctly. This looks like a "timing" issue at "coldstart".

OpenEmbedded currently builds udev 141 and I am using kernel 2.6.33-rc5 (but this was already like that with earlier kernels).

Is this problem something known or has at least someone already experienced that problem ?

Thanks and best regards

Val

Signature · 4 lines
Valentin Longchamp, PhD Student, EPFL-STI-LSRO1
[email protected], Phone: +41216937827
http://people.epfl.ch/valentin.longchamp
MEB3494, Station 9, CH-1015 Lausanne
#1 lore raw
Quoted 9 lines · Valentin Longchamp

I have a system that is built with OpenEmbedded where I use a mt9t031 camera with the soc-camera framework. The mt9t031 works ok with the current kernel and system.

However, udev does not create the /dev/video0 device node. I have to create it manually with mknod and then it works well. If I unbind the device on the soc-camera bus (and then eventually rebind it), udev then creates the node correctly. This looks like a "timing" issue at "coldstart".

Quoted 5 lines

OpenEmbedded currently builds udev 141 and I am using kernel 2.6.33-rc5 (but this was already like that with earlier kernels).

Is this problem something known or has at least someone already experienced that problem ?

You need to run "udevadm trigger" as the bootstrap/coldplug step, after you stared udev. All the devices which are already there at that time, will not get created by udev, only new ones which udev will see events for. The trigger will tell the kernel to send all events again.

Or just use the kernel's devtmpfs, and all this should work, even without udev, if you do not have any other needs than plain device nodes.

Kay

#2 lore raw
Quoted 17 lines · Kay Sievers
Quoted 9 lines · Valentin Longchamp

I have a system that is built with OpenEmbedded where I use a mt9t031 camera with the soc-camera framework. The mt9t031 works ok with the current kernel and system.

However, udev does not create the /dev/video0 device node. I have to create it manually with mknod and then it works well. If I unbind the device on the soc-camera bus (and then eventually rebind it), udev then creates the node correctly. This looks like a "timing" issue at "coldstart".

Quoted 5 lines

OpenEmbedded currently builds udev 141 and I am using kernel 2.6.33-rc5 (but this was already like that with earlier kernels).

Is this problem something known or has at least someone already experienced that problem ?

Quoted 9 lines

You need to run "udevadm trigger" as the bootstrap/coldplug step, after you stared udev. All the devices which are already there at that time, will not get created by udev, only new ones which udev will see events for. The trigger will tell the kernel to send all events again.

Or just use the kernel's devtmpfs, and all this should work, even without udev, if you do not have any other needs than plain device nodes.

Thanks a lot Kay, you pointed me exactly where I needed to watch. OpenEmbedded adds udevadm trigger a big list of --susbsystem-nomatch options as soon as you are not doing your first boot anymore and video4linux is among them.

I either have to remove this option in the script or understand why my other /dev nodes are kept (ttys are doing fine with the same treatment for instance) and not video4linux ones (it looks like they are using DEVCACHE or something like this). But I would prefer the first alternative since cameras may be unplugged on some robots.

Val

Signature · 4 lines
Valentin Longchamp, PhD Student, EPFL-STI-LSRO1
[email protected], Phone: +41216937827
http://people.epfl.ch/valentin.longchamp
MEB3494, Station 9, CH-1015 Lausanne
#3 lore raw
Quoted 11 lines · Valentin Longchamp

Kay Sievers wrote:
Thanks a lot Kay, you pointed me exactly where I needed to watch. OpenEmbedded adds udevadm trigger a big list of --susbsystem-nomatch options as soon as you are not doing your first boot anymore and video4linux is among them.

I either have to remove this option in the script or understand why my other /dev nodes are kept (ttys are doing fine with the same treatment for instance) and not video4linux ones (it looks like they are using DEVCACHE or something like this). But I would prefer the first alternative since cameras may be unplugged on some robots.

Really, that logic sounds awfully wrong. Any /dev-caching and games with skipping selected subsystems at coldplug can never reliably work as you have found out. :) You should definitely go for devtmpfs instead of such needless and misguided hacks, if a plain "udevadm trigger" does not work for some reason.

Good luck.
Kay