Gotcha's in 2.1.79

Michael H. Warfield (
Sun, 18 Jan 1998 21:47:16 -0500 (EST)

If an earlier message about this ever manages to fumble it's way

past my addressing errors and reach this list - please ignore it.

Well... It was nice to see that the make xconfig problems in 2.1.78
got cleared in 2.1.79... However, I've run into a few errors in trying to
compile the 2.1.79 kernel... Here they are along with the changes I had
to make to get past them...


It looks like drivers/char/tuner.h missed a patch somewhere. When
I compile the kernel with the bttv driver enabled, I get piles of "too many
initializers" warnings then then the driver bombs with an error about a
non-existant structure element.

Doing diffs from 2.1.78 to 2.1.79, it looks like an element was added
to the structure tuners in bttv.c but was missed in tuners.h where it is
defined. Since the initializers grew by one element and there was one
non-existant element complained about by the compiler, I took the wild ass
guess and added that name for the additional structure element and it compiled.

I added this line to the end of the tuners structure definition
in drivers/char/tuner.h and bttv.c then compile. Looks like just an

unchar config;
unchar I2C;
+ ushort IFPCoff;


Next I got this little gem in the fs/fat/fatfs_syms.c:

make[3]: Entering directory `/var/src/linux-2.1.79/fs/fat'
gcc -D__KERNEL__ -I/var/src/linux-2.1.79/include -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -pipe -fno-strength-reduce -m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2 -DCPU=586 -DEXPORT_SYMTAB -c fatfs_syms.c
fatfs_syms.c:53: `fat_get_cluster' undeclared here (not in a function)
fatfs_syms.c:53: initializer element for `__ksymtab_fat_get_cluster.value' is not constant
make[3]: *** [fatfs_syms.o] Error 1

This seems to have been a change in the code to rename the function
get_cluster to fat_get_cluster, but the file include/linux/msdos_fs.h was
not updated to reflect the renaming. The following change got past that:

void cache_lookup(struct inode *inode,int cluster,int *f_clu,int *d_clu);
void cache_add(struct inode *inode,int f_clu,int d_clu);
- int get_cluster(struct inode *inode,int cluster);
+ int fat_get_cluster(struct inode *inode,int cluster);

/* inode.c */
extern int fat_bmap(struct inode *inode,int block);


After that, the file fs/vfat/namei.c bombed with piles of errors
surrounding references to the structure "slot_info" which had also been
defined in include/linux/msdos_fs.h in 2.1.78 but had been renamed to
vfat_slot_info in 2.1.79. Replaced all references to slot_info with
vfat_slot_info in fs/vfat/namei.c and it then compiles clean.


Anyone got any idea if I should be worried about the warning messages
that binfmt_elf.c and binfmt_aout.c give about "conversion between unsigned
int and pointer of different size" on lines like this:

__put_user((elf_caddr_t)(unsigned long)p,argv++);

It all compiles now... Now to see if it runs...

This is on an Intel Platform, 586 build.


 Michael H. Warfield    |  (770) 985-6132   |
  (The Mad Wizard)      |  (770) 925-8248   |
  NIC whois:  MHW9      |  An optimist believes we live in the best of all
 PGP Key: 0xDF1DD471    |  possible worlds.  A pessimist is sure of it!