Hi everybody,
I'm learning to make kernel modules and am
currently working on a block device driver.
I had installed kernel version 2.2.16-22 (RH - 7.0)
and then changed it to 2.2.16 (downloaded from
kernel.org).
PROBLEM : When I try to "insmod blkdev.o" it gives
a message
"unresolved
symbol __constant_test_bit
unresolved symbol
__test_bit"
and the module is
not inserted . These two are being generated because I'm using
INIT_REQUEST. If I
put INIT_REQUEST in comments (/* */) the module gets inserted.
But of course it
doesn't work the way it should because of obvious reasons.
Can anybody tell me where am I going wrong ?
NOTE : I've included <asm/bitops.h> which has
these two functions.
HOW I INSTALLED MY NEW KERNEL (2.2.16): Probably
I'm going wrong in my links. So here I
reproduce the actual steps I took
1. tar -xvf linux-2.2.16 in
/usr/src
2. The new source tree was
installed in /usr/src/linux so,
mv linux
linux-new
ln -s
/usr/src/linux-new linux
3. Then I got my links right
i.e. in /usr/include I did
ln -s
/usr/src/linux/include/linux linux
ln -s
/usr/src/linux/include/asm asm
ln -s
/usr/src/linux/include/scsi scsi
4. cd
/usr/src/linux
make mrproper
make
menuconfig
make
dep
make
clean
make
bzImage
make
modules
make
modules_install
5. cp
/usr/src/linux/arch/i-386/boot/bzImage /boot/new
6.
Updated /etc/lilo.conf and ran lilo
7. Rebooted from this new
kernel
8. Now I compiled my block
device driver module and tried to insert it and it gave me the
aforesaid
error.
NOTE : 1. They say RH7.0 doesn't have a stable gcc
so I had done
cd /usr/bin
rm -f gcc
ln -s /usr/bin/kgcc gcc
before recompiling the
kernel.
2. insmod blkdev.o -f doesn't work either
I'm not on any mailing list so please reply to me
separately
Thanks for your time
I'd be glad if somebody can help me
out
Regards
Sumit
|