[pvrusb2] pvrusb2 with 2.6.35-rc4

devsk funtoos at yahoo.com
Wed Jul 7 23:55:47 CDT 2010


Mike,

Thanks so much for the detailed response. It makes things clear and assures me 
you are in complete control here. 


There is no real hurry, take your time. I am currently running 2.6.34. So, I am 
good.

Thanks,
-devsk




________________________________
From: Mike Isely <isely at isely.net>
To: Communications nexus for pvrusb2 driver <pvrusb2 at isely.net>
Sent: Wed, July 7, 2010 9:21:28 PM
Subject: Re: [pvrusb2] pvrusb2 with 2.6.35-rc4

On Mon, 5 Jul 2010, devsk wrote:

> Mike,
> 
> I was trying to build 2.6.35-rc4 for other reasons but ran into this compile 
> error while building my usual out-of-kernel modules:
> 
> Any ideas? Any quick patches?
> 
>   CC [M]  /usr/src/pvrusb2-mci-20100425/driver/pvrusb2-v4l2.o
> /usr/src/pvrusb2-mci-20100425/driver/pvrusb2-v4l2.c: In function 
>'pvr2_v4l2_do_ioctl':
> /usr/src/pvrusb2-mci-20100425/driver/pvrusb2-v4l2.c:320: error: incompatible 
>type for argument 2 of 'v4l2_prio_check'
> include/media/v4l2-common.h:94: note: expected 'enum v4l2_priority' but 
>argument is of type 'enum v4l2_priority *'
> /usr/src/pvrusb2-mci-20100425/driver/pvrusb2-v4l2.c: In function 
>'pvr2_v4l2_release':
> /usr/src/pvrusb2-mci-20100425/driver/pvrusb2-v4l2.c:1217: error: incompatible 
>type for argument 2 of 'v4l2_prio_close'
> include/media/v4l2-common.h:92: note: expected 'enum v4l2_priority' but 
>argument is of type 'enum v4l2_priority *'
> make[2]: *** [/usr/src/pvrusb2-mci-20100425/driver/pvrusb2-v4l2.o] Error 1
> make[1]: *** [_module_/usr/src/pvrusb2-mci-20100425/driver] Error 2
> 
> BTW: How old (or new) is the in-kernel module? That builds fine with the 
>kernel. 
>
> How can that be? Are there patches in the in-kernel version which are not in 
> 0425 version?
> 

I have more information on this.

First, to answer your question about the in-kernel version of the 
driver (and this lays the foundation to explain the problem):

There are actually 3 parallel-tracked "editions" of the driver at any 
given moment: (1) the in-kernel version, (2) the in-V4L version, and (3) 
the standalone version.  They are all mechanically related.  The 
standalone driver version has the most code - this is because it is 
compilable against the widest range of kernels - all the way back to 
2.6.12.  The in-V4L version is smaller because it only needs to compile 
against a narrower kernel range, that is, the range of kernel versions 
supported by the Mercurial v4l-dvb snapshot.  The in-kernel driver is 
the smallest of the three because it is specifically targeted to the 
exact kernel in which it lives.  Nearly all of the development I do on 
the driver happens in the standalone driver because that gives me the 
widest range of testing capabilities (again because it has more features 
targetable to more kernels).  Every once in a while I do some direct 
work on the in-V4L version, if I am dealing with a problem that is best 
chased within a v4l-dvb snapshot.

I use a Perl program designed to systematically transform the standalone 
driver into the in-V4L version.  This works by evaluating various 
#define options appropriate for v4l-dvb - you can see the whole list in 
pvrusb2-options.h (a file which is only in the standalone driver).  
Thus keeping the in-v4l version in sync with the standalone driver is 
just a matter of running a script.  I usually do this at about the same 
time I roll out a new snapshot.  Similarly, the v4l-dvb maintainer runs 
a transformation to further strip the driver (and all other parts of 
v4l-dvb) into a form appropriate for insertion directly into a specific 
kernel.  That's how the in-kernel pvrusb2 driver is tracked.  (More on 
that further down.)

Most changes in the driver flow in this manner: standalone -> in-V4L -> 
in-kernel.  Of course there are other changes that originate in the 
other two driver versions.  Fixes from other kernel maintainers start 
with the in-kernel driver, but the v4l-dvb maintainer ports those 
changes back to the v4l-dvb Mercurial repository.  From there I usually 
just generate an hg changeset and directly apply that against the 
standalone driver, which most of the time applies cleanly (and if it 
doesn't it is usually obvious why).  I tend to do this "reverse" flow 
periodically and/or when I learn of incoming pvrusb2 driver patches.  
If an incoming change like this is important enough, I will usually also 
release another standalone snapshot that incorporates it as well.

That's how the 3 drivers "editions" stay in sync.  I've done it this way 
now for about 5 years.

A related item: Recently v4l-dvb development has been moving from 
Mercurial over to git.  This is a nice change in the end, but it's more 
than just a change of SCM because it also changes the v4l-dvb workflow. 
Effectively now everyone is working with the exact in-kernel version(s) 
of v4l-dvb (using git's efficient branching to move patches around as 
needed) not the Mercurial version.  This is something that my own 
workflow has not caught up with yet.  The v4l-dvb developers are still 
maintaining the Mercurial repository but I get the impression that since 
it's not really the "main line" anymore then as time goes forward I 
really need to get going better with git.  This is why a number of 
recent pvrusb2 changes have taken an unusually long time to flow back 
into the kernel :-(

Back to the main problem here...  I track the standalone driver sources 
using a Subversion repository.  When I release a new version of that 
driver, I run a script that tags the sources from the trunk, creates a 
version-specific header, and then generates the tarball that is then put 
up on the web site.  So I grabbed the latest tarball (20100425 as devsk 
pointed out) and sure enough it won't compile in 2.6.35-rc4.  Then I 
compiled my Subversion trunk against 2.6.35-rc4 - and THERE it compiles 
clean.  So there are changes sitting in Subversion that fix this that 
apparently I was unaware of and that's why it hasn't appeared in a new 
snapshot.  Clearly I need to just release a new snapshot.  I will do 
that, but first I need to isolate the change that is fixing this and 
ensure that I understand why, in case there are other things lurking 
here.

So stay tuned, there will soon be a new snapshot released of the 
standalone driver.

BTW, if you're really impatient, here's a little secret.  Ensure you 
have Subversion installed and try this:

    svn checkout http://www.isely.net/svn/pvrusb2/trunk pvrusb2

That will give you direct access to the Subversion repository from where 
the snapshots are spawned.  If you do a checkout like this, you will get 
a directory layout that is identical to the standalone snapshots and the 
compilation procedure is the same as that for the standalone driver.  
EXCEPT you will also need to generate a file called "pvrusb2-version.h".  
That is a simple header which labels the version of the driver; it is 
normally generated by the snapshot generating script.  Easiest way to 
understand the header is to copy one from a snapshot and edit its 
contents so you can avoid confusion later.

I guess now this isn't such a secret anymore :-)  No guarantees; the 
access might disappear tomorrow if it becomes a problem and of course 
the driver might not be as stable as a released snapshot.  YMMV.

I will get a new snapshot out as soon as I can (likely one more day so I 
can verify a few other things).

  -Mike



-- 

Mike Isely
isely @ isely (dot) net
PGP: 03 54 43 4D 75 E5 CC 92 71 16 01 E2 B5 F5 C1 E8
_______________________________________________
pvrusb2 mailing list
pvrusb2 at isely.net
http://www.isely.net/cgi-bin/mailman/listinfo/pvrusb2



      


More information about the pvrusb2 mailing list