AppleTalk Kernel Module for Red Hat Enterprise Linux 4


Red Hat does not provide AppleTalk kernel modules for Red Hat Enterprise Linux 4. For common systems pre-compiled kernel modules from HELIOS are available. Optionally you may compile kernel modules on your own.
Note: This description covers Red Hat Enterprise Linux 4 but should be similar on other distributions.

1. Determining kernel version details

To check your kernel version and patch details enter the following command on a shell:
# uname -r
2.6.9-55.ELsmp

To check the processor architecture enter the following command on a shell:
# uname -m
i386

   i386 or i686   

   x86_64

32-bit

64-bit

 


2. Pre-compiled kernel modules

Pre-compiled kernel modules should fit for most customers. The installation is straightforward.
There are three modules available for download:
Red Hat Enterprise Linux 4 32-bit (single CPU)
Red Hat Enterprise Linux 4 32-bit SMP*
Red Hat Enterprise Linux 4 64-bit SMP*
* Symmetric Multiprocessing

Note: We compiled the modules for kernel version 2.6.9-55, which is the current version. Other or upcoming kernel patch levels, superseding level 55, have not been tested yet and may need to be compiled manually.

Download the pre-compiled kernel modules from:
http://webshare.helios.de
User Name: tools
Password: tools

  • Login to WebShare and go to the HELIOS Tools sharepoint. Open the “RHEL4 AppleTalk modules” folder, select the “.tar” file that contains the appropriate kernel module for your machine and and select “Transfer” > “Download” from the menu bar.
     
  • To extract the archive, enter the following commands:
    # cd /usr/local/helios
    # tar xf <archive_name>

     
  • Two files are extracted from the archive:
    • The kernel module (“HELIOSDIR/etc/kernel/appletalk.ko”)
    • The pre-start script that loads the kernel module when starting the HELIOS services (“HELIOSDIR/etc/startstop/31helatalk”)

3. Compile the kernel module on your own

Note: This section addresses experts.

  • Log in on a shell as “root” (No “sudo” nor “su”!).
     
  • Since Red Hat does not provide the complete kernel sources, you must download the source from www.kernel.org.
     
  • Check your kernel version details (see 1. Determining kernel version details).
     
  • Go to: www.kernel.org and get the kernel source for kernel 2.6.9
  • Direct download: www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.9.tar.gz

  • Create a new directory for the kernel source and change into it:
    # mkdir /usr/src/kernel.org
    # cd /usr/src/kernel.org

     
  • Copy the downloaded kernel to the newly created directory and extract it using the following command:
    # tar xzf linux-2.6.9.tar.gz
     
  • Important: The kernel source directory needs to be available on path “/usr/src/linux”, so create a symbolic link, then go to the directory:
    # cd /usr/src
    # ln -s kernel.org/linux-2.6.9 linux
    # cd linux

  • Copy the configuration file of the running Red Hat kernel (check uname -r) from the “/boot” directory into the current directory:
    # cp /boot/config-2.6.9-55.ELsmp .config

    Note: In most installations there are several configuration files. Make sure to copy the configuration file with the correct version string.
     
  • Activate the AppleTalk module in the kernel configuration using the “menuconfig” option:
    # make menuconfig

    Navigate to “Device Drivers” > “Networking support” > “Networking options” and find the “Appletalk protocol support” entry. With the space bar you can toggle to “M” (for “module”). Select “Exit” until you will be asked to save the configuration. Save the configuration.
     
  • The Makefile must now be adjusted for kernel version and function mapping.
    First make a backup of your Makefile:
    # cp Makefile Makefile.sav

    Open the Makefile and enter the kernel extra version (Red Hat Enterprise Linux patch level) as parameter EXTRAVERSION, like shown in the example below. Make sure that the specified version information matches exactly the one used for your current kernel (check uname -r):
    # uname -r
    2.6.9-55.ELsmp


    For the example given above the Makefile would look like this:
    VERSION = 2
    PATCHLEVEL = 6
    SUBLEVEL = 9
    EXTRAVERSION = -55.ELsmp


    If you use a 64-bit system, save the Makefile and continue with step 11.

    If you use a 32-bit system, due to optimized routines, you must map some functions, otherwise you will not be able to load the kernel module into the kernel later:

    Search for the line:
    MODFLAGS = -DMODULE

    Change it to:
    MODFLAGS = -DMODULE -Dcopy_from_user=__copy_from_user -Dcopy_to_user=__copy_to_user

    Save the edited Makefile.
     
  • To create the files required for module compilation start “make”.

    Interrupt the build process (CTRL-C) after about 25 lines (Make sure that the "scripts" directory has been processed!), because at that time, the files you need will be ready.

    # make
     CHK     include/linux/version.h
     UPD     include/linux/version.h
     SYMLINK include/asm -> include/asm-i386
     SPLIT   include/linux/autoconf.h -> include/config/*
     HOSTCC  scripts/genksyms/genksyms.o
     SHIPPED scripts/genksyms/lex.c
     SHIPPED scripts/genksyms/parse.h
     SHIPPED scripts/genksyms/keywords.c
     HOSTCC  scripts/genksyms/lex.o
     SHIPPED scripts/genksyms/parse.c
     HOSTCC  scripts/genksyms/parse.o
     HOSTLD  scripts/genksyms/genksyms
     CC      scripts/mod/empty.o
     HOSTCC  scripts/mod/mk_elfconfig
     MKELF   scripts/mod/elfconfig.h
     HOSTCC  scripts/mod/file2alias.o
     HOSTCC  scripts/mod/modpost.o
     HOSTCC  scripts/mod/sumversion.o
     HOSTLD  scripts/mod/modpost
     HOSTCC  scripts/kallsyms
     HOSTCC  scripts/pnmtologo
     HOSTCC  scripts/conmakehash
     CC      arch/i386/kernel/asm-offsets.s
     CHK     include/asm-i386/asm_offsets.h
     UPD     include/asm-i386/asm_offsets.h
     CC      init/main.o
     CHK     include/linux/compile.h
     UPD     include/linux/compile.h
     CC      init/version.o
     CC      init/do_mounts.o
     CC      init/do_mounts_rd.o
    make[1]: *** [init/do_mounts_rd.o] Interrupt
    make:    *** wait: No child processes.  Stop.
    make:    *** Waiting for unfinished jobs….
    make:    *** wait: No child processes.  Stop.

     
  • Compile the AppleTalk module:

    # make M=net/appletalk
     LD      net/appletalk/built-in.o
     CC [M]  net/appletalk/aarp.o
     CC [M]  net/appletalk/ddp.o
     CC [M]  net/appletalk/atalk_proc.o
     CC [M]  net/appletalk/sysctl_net_atalk.o
     LD [M]  net/appletalk/appletalk.o
     Building modules, stage 2
     MODPOST
     CC      net/appletalk/appletalk.mod.o
     LD [M]  net/appletalk/appletalk.ko


    The AppleTalk module has been created as “net/appletalk/appletalk.ko”.
     
  • To test the new AppleTalk kernel module type:
    # insmod net/appletalk/appletalk.ko

    The following line should be written to the system messages:
    kernel: NET: Registered protocol family 5
     
  • To unload the kernel module, enter rmmod appletalk. Make sure that the HELIOS services are not running when doing so.
     
  • To get the kernel module loaded automatically when starting the HELIOS services, copy the module to "HELIOSDIR/etc/kernel" and use the "31helatalk" script.
    The script is available from:

    http://webshare.helios.de
    User Name: tools
    Password: tools

    Login, go to “HELIOS Tools” > “RHEL4 AppleTalk modules”, select “script-only.tar” and click the “Download” button. To extract the archive, enter the following commands:
    # cd /usr/local/helios
    # tar xf script-only.tar


    The module will now be loaded every time the HELIOS services are started.

Note: Feedback is appreciated!