Archived:NI-KAL Fails to Load When I Have Greater Than 4GB of RAM

Updated May 16, 2019

National Instruments does not actively maintain this document.

This content provides support for older products and technology, so you may notice outdated links or obsolete information about operating systems or other relevant products.

Reported In

Operating System

  • Linux

Issue Details

I have greater than 4GB of RAM in my system, and when I try to install National Instruments drivers in Linux I see the error message:

Installing NI-KAL (nikal): Starting NI-KAL failed!

How do I fix this?
sed to the mem=XX method. 


This document only applies to versions of NI software released prior to NI Linux Device Drivers. For new designs, NI recommends using NI Linux Device Drivers to take advantage of repository-based installation and more frequent updates to support.

​​​​​​​NI-KAL does not support Physical Address Extension on 32-bit systems, and thus will fail to load if it detects RAM beyond this 4GB address limit on a 32-bit system. The BIOS typically needs to reserve the physical address space right below 4GB for device mapping. For example, if you have 4GB of RAM, there are two approaches that the BIOS may use to deal with this:
  1. Map 4GB of memory from 0-4GB physical address, and overlap the RAM area right below 4GB for device mapping. This way, you cannot use some of your RAM in the area overlapped by the device mapping region.
  2. Map about the first 3 to 3.5GB of memory below 4GB, leaving some space for the device mapping region, and map the excess memory above 4GB.

The older BIOSes typically use the former approach, and the newer BIOSes use the latter. Unfortunately, in order to use NI-KAL, you cannot have any physical memory located above the 4GB physical address region.

To make use of NI-KAL, use a Linux kernel configuration that only recognizes 4GB of addressable memory or less. Refer to your distribution documentation on how to do this and which versions are appropriate. Alternatively you can configure your kernel to recognize a specific amount of addressable memory by passing memmap=60G$0x100000000 to the kernel at boot time. This will tell the BIOS to ignore 60GB of memory above the 0x100000000 memory location thereby ensuring that the user is unable to address memory outside of the addressable range. 
Another way to do this is to pass mem=## to the kernel at boot time, for example mem=4096M. However, in some cases, mem=4096M may allocate 4GBs outside of the addressable range. This is why it is encouraged to use the memmap method as opposed to the mem=XX method.

Additional Information

NI-KAL will load with more than 4GB on a supported 64-bit system