schedule_work is a new function for Linux that isn't available in all
distributions yet.  Alsa uses schedule_work but checks for its presence to see
whether or not to actually use it.

If your kernel files contain the file include/linux/workqueue.h, then
alas-driver's ./configure will use that file when compiling alsa, expecting that
schedule_work is available on the system.

If it doesn't find that file, it will use (or create) an
include/linux/workqueue.h file in the alsa-driver's source directories.  Then
schedule_work will be defined in adriver.h if your kernel level is less than

In my distribution of RedHat 9 which is kernel level 2.4.20-18, the kernel files
contain include/linux/workqueue.h but the function schedule_work isn't in the
kernel.  It turns out alsa compiles but snd.o won't load properly because of the
undefined symbol schedule_work.

The workaround I used has been mentioned in other posts.  Namely, AFTER you run
./configure for alsa-driver, create an empty workqueue.h file, and then do the
make and make install.  Here is a sample set of commands.  Note that I redirect
the output to a file so I can check for errors.

[alsa-driver-N]$ ./configure
[alsa-driver-N]$ touch include/linux/workqueue.h
[alsa-driver-N]$ make > make.log
[alsa-driver-N]$ make install > makeinstall.log

If you have the schedule_work problem on your system, the makeinstall.log file
will contain a message about unresolved symbols in .../snd.o.  If so, you can do
"make clean", do the touch, and then do the make and make install again.

After more time and frustration than I want to admit, I finally got alsa-0.9.4
working on Red Hat 9 with an Asus A7V8X-X motherboard.  At least it works with
MythTV and "aplay -D hw:0,1 fn.wav" which is all I'm interested in.  I kept
playing with alsamixer, modules.conf, and lots of other suggestions with no
success.  The last thing I did was use alsaconf (you will find it in the
alsa-driver directory).  After this both aplay and MythTV (using /dev/adsp as my
audio output device) played sound.  (I haven't listened to it enough yet to
comment on the quality but initial sounds over cheap speakers seemed fine.)

My other suggestion is that you follow Alsa's installation instructions TO THE
LETTER.  Deviate at your own risk.  (Yes, I'm guilty.)

Hope these suggestions save others lots of time.


BTW:  Instead of just creating an empty include/linux/workqueue.h file, I put
into the file the line '#pragma message("using my workqueue.h")'  (without the
single quotes and with a new line at the end of the line).  gcc doesn't like
this line and gives lots of warning messages about it, but I know the compiler
was using my file instead of the kernel's file and it didn't stop the

This SF.Net email is sponsored by: INetU
Attention Web Developers & Consultants: Become An INetU Hosting Partner.
Refer Dedicated Servers. We Manage Them. You Get 10% Monthly Commission!
INetU Dedicated Managed Hosting
Alsa-user mailing list

Reply via email to