User Tools

Site Tools


code:work:lvisf:2022:centos65minimal:start

This is an old revision of the document!


Intro: Minimal CentOS 6.5

FIXME - Need to update this since CentOS is no longer installed.

The Spectrum XMC1151 digitizer libraries we have require a specific flavour of Linux to operate.

Download the specific version by getting the http://vault.centos.org/6.5/isos/x86_64/CentOS-6.5-x86_64-minimal.iso which is the “minimal” CentOS 6.5.

Kernel from OS install 2016.04.14

Linux lvisf 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

In case your kernel is wrong, you can download the RPM and install directly

  1. Download the correct one (see above) http://vault.centos.org/6.5/centosplus/x86_64/Packages/kernel-2.6.32-431.el6.centos.plus.x86_64.rpm
    cd ~/download
    wget http://vault.centos.org/6.5/centosplus/x86_64/Packages/kernel-2.6.32-431.el6.centos.plus.x86_64.rpm
    wget http://vault.centos.org/6.5/centosplus/x86_64/Packages/kernel-devel-2.6.32-431.el6.centos.plus.x86_64.rpm
  2. Install
    sudo rpm -ivh --oldpackage kernel-2.6.32-431.el6.centos.plus.x86_64.rpm
    sudo rpm -ivh --oldpackage kernel-devel-2.6.32-431.el6.centos.plus.x86_64.rpm

Kontron BIOS Changes

  • To make these BIOS changes, we need to get to the UEFI shell.
    1. Reboot the computer
    2. Press <DEL> key while booting to get to BIOS menu
    3. Boot → Boot Option #1 → UEFI: Built-in Shell
    4. Save and Exit (F4)
    5. Press <ESC> while booting to get to the Shell> prompt.
  1. Increase the boot delay so that the Spectrum Digitizers have time to initialise.
    1. Enter the following on the Shell>
      kboardconfig PciCfgDelay 5s
    2. Double check by running without the argument too see what the parameter is set to
      kboardconfig PciCfgDelay
      # will see [5s] highlighted in green (and that is the longest delay available)
  2. Disable hyperthreading and whatever VT stands for NOTE: The non-RT version works great with hyperthreading (at least so far: — David Lloyd Rabine 2018/04/27 18:13 )
    # ONLY RT version needs this DO NOT DO THIS for normal operations with NORT build (build02 / v2)
    kboardconfig IntelVT disabled
    kboardconfig IntelHT disabled
  3. Exit the bios
    exit
  • What is SpeedStep? What is CpuTurbo? Sounds like things we don't want on!

Base CentOS

Using the 500_00746_r100_SDR7000_Linux_SG.pdf document, set up the core data system.

CentOS Package Servers

Adding Online Resources

This did work in adding the 6.10 repository to our system: (from) https://www.mark-gilbert.co.uk/fixing-yum-repos-on-centos-6-now-its-eol/

curl http://mark-gilbert-co-uk.s3-website-eu-west-1.amazonaws.com/CentOS-Base.repo --output /etc/yum.repos.d/CentOS-Base.repo
curl http://mark-gilbert-co-uk.s3-website-eu-west-1.amazonaws.com/epel.repo --output /etc/yum.repos.d/epel.repo

Use Archived Packages?

Maybe we should grab what we need? I dunno. Maybe we just make an image that we can expand to a 64 GB drive and be happy.

DVD Boot

NOTE: Press the Delete key while booting in order to change the boot to either the USB PLEXTOR drive or the LEXAR CFAST drive

  • BIOS (delete key after eSATA RAID Marvel BIOS) → Boot → Boot Option #1
  • Then F4: Save & Exit
  1. Attached the external USB CDROM drive to the computer via the USB3 port (USB stick with UNETBOOTIN did NOT WORK for me?!) (UnetBootin will work with later version of CentOS image… 6.5 is broken)
  2. Insert the Minimal CentOS 6.5 Install Disk
  3. Boot and set the BIOS to boot off the Plextor drive (our USB based DVD drive)
  4. At CentOS 6 Welcome, Click → Next
  5. Language: English (English)
  6. Keyboard: U.S. English
  7. Storage Devices: Basic Storage Devices
  8. NOTE: If another OS detected, select: Fresh Installation (SURE YOU WANT TO DELETE THAT OS!?)
  9. Hostname: lvisf
  10. Timezone: New York
  11. root Password: the usual
  12. Partitioning: Create Custom Layout (bottom option)
    1. Delete any partitions on the new target drive (this 32GB cfast is the demo target)
    2. Select the Free disk area → Create a new partition
    3. Select → Standard Partition (top option)
      1. Mount Point: /boot/efi
      2. File System Type: EFI System Partition
      3. Size (MB): 1024
      4. Additional Size Options: Fixed Size (default, but make sure)
      5. OK
    4. Select → Standard Partition (top option)
      1. Mount Point: /
      2. File System Type: ext4
      3. Size (MB): 15360
      4. Additional Size Options: Fixed Size (default, but make sure)
      5. OK
    5. Next
  13. Select the drive (for this case, the 60 GB (or 60000 MB drive) and put that to the right, then Write Changes
  14. Wait for install to complete (205 packages in ~4 minutes)
  15. Drive will eject
  16. Remove DVD
  17. Reboot
  18. Load BIOS on reboot and select the cfast drive as the standard boot device

Hard Drive / Raid

CentOS Configure

Virtual Box

Some notes on using virtual box

Used RedHat 64 Bit as the base machine, worked fine with the CentOS minimal

Local Network

In order to ssh to your host, you can add a rule to port forward into your VM

  1. Network → Advanced → Port Forwarding
  2. Add a rules that maps
    1. Name: Forward SSH (whatever you want)
    2. Protocol: TCP
    3. Host IP: 127.0.1.1
    4. Host Port: 2222
    5. Guest IP: 10.0.2.15 (or whatever your machine is)
    6. Guest Port: 22
  3. Now you can ssh directly from your host pc to the VM (so I can copy and paste from the wiki, yeah!!)
    1. Example:
      ssh -CY root@127.0.1.1 -p2222

Screen Scale

  1. Display settings for the host, you can scale the screen directly now, up to 200%. YAY!

lvisf Config

Filesystem

  1. Add the navigation, internal and external drives to the /etc/fstab file
    1. Edit
      sudo nano /etc/fstab
    2. Add these lines
      LABEL=LVISF_INTERNAL	/mnt/internal		ext4	defaults,noatime 	0 0
      LABEL=LVISF_EXTERNAL	/mnt/external		ext4	defaults,noatime 	0 0
      LABEL=LVISF_NAV		/mnt/nav		ext4	defaults,noatime 	0 0
      tmpfs                   /mnt/ramdisk            tmpfs   nodev,nosuid,noexec,nodiratime,size=1M   0 0
    3. Make these directories for mount points
      sudo mkdir /mnt/internal /mnt/external /mnt/nav /mnt/tmp /mnt/usb /mnt/nfs /mnt/ramdisk

Network Temporary Configuration (DHCP)

  1. Setup the system for DHCP for now
    1. Log in as root
    2. Use vi to edit /etc/sysconfig/network-scripts/ifcfg-eth0 so
      ONBOOT=yes
    3. Startup network (will take a moment, DHCP)
      sudo ifup eth0
  2. Logout and now, you should ssh to gs694-lvisdev.gsfc.nasa.gov and then to the new machine (whatever its DHCP IP address is now on the local LAN)

Prerequisites for Compiling Kernel Modules

  1. Install the development tools
    yum groupinstall 'Development Tools'
  2. Get some useful programs
    yum install ftp -y
    yum install nano -y
    yum install wget -y
  3. Grab the ethernet driver while you still have access
    1. Current driver is here: https://downloadmirror.intel.com/13663/eng/igb-5.3.5.3.tar.gz
      mkdir ~/down
      cd ~/down
      wget https://downloadmirror.intel.com/13663/eng/igb-5.3.5.3.tar.gz

Ethernet Driver Install and Configuration

  1. Log in as root on the main console since ethernet will be disabled by default
  2. Install Intel ethernet drivers [Only needed if compiling on Kontron flight hardware]:
    1. Download igb-5.3.4.4.tar.gz to a USB drive
    2. Uncompress in the home directory
      tar xvf igb-5.3.4.4.tar.gz
    3. Build and install the drvier
      cd ~/tmp/igb-5.3.4.4/src/
      make
      sudo make install
    4. Modify this module file
      sudo nano /etc/sysconfig/modules/lvisf.modules
    5. Put the following into this file
      #!/bin/sh
      
      # start intel network driver
      /sbin/modprobe igb
    6. Change permissions so this script runs at boot time
      sudo chmod 755 /etc/sysconfig/modules/lvisf.modules

NOTE: you can just do this

sudo cp /opt/lvisf/src/lvisF/scripts/ifcfg-eth* /etc/sysconfig/network-scripts/
  1. Configure our network device
    1. Change the eth0 definition
      1. editing the config file
        vi /etc/sysconfig/network-scripts/ifcfg-eth0
      2. to the following
        DEVICE=eth0
        HWADDR=00:80:82:1B:E7:04
        TYPE=Ethernet
        UUID=98bd88d8-8fe8-4b8e-bca0-a58bd3306717
        ONBOOT=yes
        NM_CONTROLLED=yes
        BOOTPROTO=static
        NAME="System eth0"
        IPADDR=10.4.1.2
        NETMASK=255.255.255.0
    2. Add our default gateway
      1. Edit the network configuration
        vi /etc/sysconfig/network
      2. End up looking like this
        NETWORKING=yes
        HOSTNAME=lvisf
        NETWORKING_IPV6=no
        IPV6INIT=no
        GATEWAY=10.4.1.1  # or 10.4.1.254 if using Dell Laptop Gateway for WiFi still
    3. Ensure our name server can be found
      1. Edit resolv.conf
        vi /etc/resolv.conf
      2. End up with this
        search gsfc.nasa.gov
        nameserver 128.183.10.134
        nameserver 128.183.50.17
    4. Turn off IPV6 (found here: https://www.centos.org/forums/viewtopic.php?t=7989)
      sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
      sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
    5. Change the eth1 definition
      1. editing the config file
        vi /etc/sysconfig/network-scripts/ifcfg-eth1
      2. to the following
        DEVICE=eth1
        HWADDR=00:80:82:1B:E7:05
        TYPE=Ethernet
        UUID=5eb0ea0f-b1e8-43ab-a64d-83d3d9e1dc95
        ONBOOT=yes
        NM_CONTROLLED=yes
        BOOTPROTO=static
        NAME="System eth1"
        IPADDR=192.168.0.2
        NETMASK=255.255.255.0
    6. Change the eth1:1 definition
      1. editing the config file
        vi /etc/sysconfig/network-scripts/ifcfg-eth1:1
      2. to the following
        DEVICE=eth1:1
        HWADDR=00:80:82:1B:E7:05
        TYPE=Ethernet
        UUID=5eb0ea0f-b1e8-43ab-a64d-83d3d9e1dc95
        ONBOOT=yes
        NM_CONTROLLED=yes
        BOOTPROTO=static
        NAME="System eth1:1"
        IPADDR=129.100.0.2
        NETMASK=255.255.255.0
  2. REMOVE the keyboard and mouse and never use them again (USB interrupts)
  3. Add lvis user to the system (still as root (logged in via SSH for me now))
    1. Add the user
      useradd lvis
    2. Set password
      passwd lvis
  4. Add lvis user to the list of sudo users
    1. Modify the super user file with the following (as logged in as root)
      visudo
    2. After the line that has root and ALL and ALL permissions, insert this line
      lvis    ALL=(ALL)       ALL

File System Extras

  1. Add ntfs drive capability
    1. Add the epel repository
      sudo yum install epel-release
    2. Add ntfs to our system
      sudo yum install fuse fuse-ntfs-3g
  2. Add Exfat drive capability
    1. Add the epel repository and this Nux Dextop repository
      sudo yum install epel-release
      sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm
    2. Add Exfat to our system
      sudo yum install exfat-utils fuse-exfat
    3. An example mounting an Exfat system is
      sudo  mount -t exfat /dev/sdc1 /mnt/tmp

X11

  1. This will allow you to run X11
    # core X11
    sudo yum install xorg-x11-xauth xorg-x11-fonts-* xorg-x11-utils xterm -y
    # required for tuna
    sudo yum install xauth pygtk2-libglade -y
  2. Install tuna tuning package
    sudo yum install tuna -y
  3. Modify /etc/ssh/sshd_config and add this line to forward X11 (or make sure it is not commented out… this was already enabled last I checked)
    X11Forwarding yes

Remove Unused Services

  1. Remove exim (NOTE, this was not on the CentOS Minimal I just installed 2018.01.04 (but leaving for historical))
    1. Stop the service
      sudo service exim stop
    2. Remove the package from the system
      sudo rpm -e --nodeps exim
  2. Remove auditd
    sudo service auditd stop # now
    sudo chkconfig auditd off # after reboot
  3. Remove postfix
    1. Stop the service
      sudo service postfix stop
    2. Remove the package from the system
      sudo rpm -e --nodeps postfix

eSATA Speed Limit

Our eSATA connection to the raid (and any external ATA devices) was occasionaly running into issues when running at high speed (6.0 GBPS). Dan Caplan found online notes that people put a speed limit on the kernel module that regulates the ATA commuincations, and that solved the types of errors we have been seeing.

  1. Modify /etc/grub.conf by adding this to the kernel starting command line
    libata.force=3.0

/etc/grub.conf

#boot=/dev/sda1
device (hd0) HD(1,800,200000,a70d9e49-77c1-4fc8-b5ce-81ede8517477)
default=0
timeout=5
splashimage=(hd0,1)/boot/grub/splash.xpm.gz
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal --timeout=5 serial console
hiddenmenu
title CentOS (2.6.32-431.el6.x86_64)
        root (hd0,1)
        kernel /boot/vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=2804bc4c-c850-4d83-9fec-7de10cb1e2b4 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarc
yrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb console=tty0 console=ttyS0,115200n8 libata.force=3.0
        initrd /boot/initramfs-2.6.32-431.el6.x86_64.img

Kernel Console Redirection

If you want to send the kernel messages out to the serial port for logging.

  1. Modify /etc/grub.conf so the default kernel command line redirects console to the serial port
    sudo nano /etc/grub.conf
    1. Change
      rhgb quiet
    2. To
      rhgb console=tty0 console=ttyS0,115200n8

Enable Serial Console Login

And, to make it such that you can log onto the system over that console port…

  1. Modify the grub boot line and add the following lines above all the kernel options
    1. Edit /etc/grub.conf
      sudo nano /etc/grub.conf
    2. Make the top look like this
      serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
      terminal --timeout=5 serial console
      hiddenmenu
    3. Add these lines to the kernel that you are using (probably already done, see above!)
      console=tty0 console=ttyS0,115200n8
  2. Add ttyS0 to the /etc/securetty file
    1. Edit
      sudo nano /etc/securetty
    2. Append this to the bottom of the file
      ttyS0
  3. Modify /etc/init/ttyS0.conf
    sudo nano /etc/init/ttyS0.conf
  4. And fill it with the following code
    # ttyS0 - getty
    #
    # This service maintains a getty on ttyS0 from the point the system is
    # started until it is shut down again.
    
    start on stopped rc RUNLEVEL=[2345] and (
                not-container or
                container CONTAINER=lxc or
                container CONTAINER=lxc-libvirt)
    
    stop on runlevel [!2345]
    
    respawn
    exec /sbin/getty -L 115200 ttyS0 vt102
    ########

Spectrum Config

Still as root logged into the main desktop

  1. Disable the Firewall
    1. Turn off the firewall
      sudo service iptables stop
      sudo service ip6tables stop
    2. Make this permanent
      sudo chkconfig iptables off
      sudo chkconfig ip6tables off
  2. Disable SELinux
    1. Edit the configuration file
      sudo vi /etc/selinux/config
    2. Modify the file
      1. From
        SELINUX=enforcing
      2. To
        SELINUX=disabled
  3. Reboot for all changes to take place

Minimize Kernel Modules

  1. Disable ipv6, this addition is required along with a line in the modprobe file below
    1. Modifiy /etc/sysconfig/network
      sudo vi /etc/sysconfig/network
    2. And append the following two lines
      NETWORKING_IPV6=no
      IPV6INIT=no
    3. Add these two lines to sshd_config
      sudo nano /etc/ssh/sshd_config
      # lvisf - ipv4 only
      AddressFamily inet
      ListenAddress 0.0.0.0
  2. Blacklist kernel modules we don't require
    1. Edit a file lvisf-blacklist.conf
      sudo vi /etc/modprobe.d/lvisf-blacklist.conf
    2. Add the following lines
      # lvisf kernel module blacklist
      # version 1.0 - dlr - 20160418
      
      # ipv6
      blacklist ipv6
      
      # NMI watchdog
      blacklist iTCO_wdt 
      blacklist iTCO_vendor_support
      
      blacklist i2c_i801
      # blacklist igb
      blacklist lpc_ich
      blacklist shpchp
      blacklist dm_mirror
      
      # intel sound
      blacklist soundcore
      blacklist snd
      blacklist snd_seq
      blacklist snd_hda_intel
      blacklist snd_hda_codec_hdmi
      
      # USB controller (still loads)
      blacklist xhci_hcd
      
      
      # this is required to REMOVE ipv6 module, I am not sure why
      # http://www.cyberciti.biz/faq/redhat-centos-disable-ipv6-networking/
      install ipv6 /bin/true

Extras

  • These two commands will remove some other modules I couldn't figure out how to make permanently go away
    # USB driver... if you're using the nousb kernel, this will work
    sudo modprobe --remove xhci_hcd
    sudo modprobe --remove dm_mirror

Minimal Modules

Module                  Size  Used by
e1000                 170646  0 
sg                     29350  0 
ext4                  374902  3 
jbd2                   93427  1 ext4
mbcache                 8193  1 ext4
sd_mod                 39069  3 
crc_t10dif              1541  1 sd_mod
ahci                   42215  2 
i915                  624511  1 
drm_kms_helper         44321  1 i915
drm                   280012  2 i915,drm_kms_helper
i2c_algo_bit            5935  1 i915
i2c_core               31084  4 i915,drm_kms_helper,drm,i2c_algo_bit
video                  20674  1 i915
output                  2409  1 video
dm_mod                 84209  9 

lvisf code

SVN Repository

:!: NOTE: This is obsolete (the repository link), but left here for posterity.

  • Dave Yancich sent me this note back in May:
    Repository URL:  https://zj.yancich.com:8443/svn/NASA/trunk/lvisF
    username "lvis"
    password: standard lvis password
    
    This is a cmake project.
    
    To rebuild the make files:
    In "build" directory type "cmake ../"
    Then "make" to build everything.
    "make clean" to clean the programs and kernel modules.

Build Document

(Yancich sent this to me in March 2016) Original document is configuration_and_build_procedures_for_lvisf_and_support_libraries.docx

Requirements

  1. Install cmake
    sudo yum install cmake -y
  2. Install htop
    sudo yum install htop -y
  3. Install jed
    sudo yum install ftp://ftp.pbone.net/mirror/centos.karan.org/el5/extras/testing/i386/RPMS/jed-0.99.18-5.el5.kb.i386.rpm -y
  4. Install nano
    sudo yum install nano -y
  5. Install p7zip and pigz
    sudo yum install p7zip pigz -y
  6. Install PCI utilities
    sudo yum install pciutils -y
  7. Install screen
    sudo yum install screen -y
  8. Install telnet
    sudo yum install telnet -y
  9. Install wget
    sudo yum install wget -y
  10. Install the development package
    sudo yum groupinstall "Development Tools"
  11. Install development libraries for md5sum and gzip in real time
    sudo yum install openssl-devel -y
  12. Install the ncurses development library assuming our console gets written using it
    sudo yum install ncurses-devel -y
  13. Install md5deep so we can check file integrity
    sudo yum install md5deep -y
  14. Install man pages
    sudo yum install man -y
    sudo yum install man-pages -y
  15. Install kernel development source
    cd
    mkdir download
    cd ~/download
    wget http://vault.centos.org/6.5/os/x86_64/Packages/kernel-devel-2.6.32-431.el6.x86_64.rpm
    sudo yum --nogpgcheck localinstall ~/download/kernel-devel-2.6.32-431.el6.x86_64.rpm -y
  16. Install gdisk for partition manipulation on modern drives
    sudo yum install gdisk -y
  17. Install the TIFF I/O Library for the CIMG library used for the DEM library
    sudo yum install libtiff-devel -y
  18. Install the X11 Development library also used for the DEM library
    sudo yum install libX11-devel -y

Debugging

  1. Install gdb and gdbserver
    sudo yum install gdb gdb-gdbserver
    1. Add these yum utility
      sudo yum install yum-utils
    2. Modify this file and enable the repo by setting enable to = 1
      sudo /etc/yum.repos.d/CentOS-Debuginfo.repo
      # and set
      # enabled=1
    3. Install this
      sudo debuginfo-install glibc

3rd Party Libs to Build from Source

GSL (GNU Scientific Library)

Download version 2.5 and follow install instructions. This will build libgsl and libgslcblas need for the DEM library.

  1. Grab the library and uncompress
    cd ~/download
    wget http://mirror.rit.edu/gnu/gsl/gsl-2.5.tar.gz
    cd ~/code
    tar -xvf ~/download/gsl-2.5.tar.gz
  2. Compile
    cd ~/code/gsl-2.5
    ./configure
    make
    sudo make install

Code Base

  1. Create the repoistory home and check out the source code
    1. Create a repository home in /opt
      sudo mkdir /opt/lvisf
    2. Set proper permissions
      sudo chown -R lvis:lvis /opt/lvisf
    3. [Optional] Uncompress our locally attached mount with snapshot (faster than network initial checkout)
      cd /
      tar jxvf /media/LVIS-GH-2TB_WD209/lvisf_build/lvisf_sourcesnapshot_20160816_svn439.tar.bz2
      1. [Either] Check out he raw source code from scratch
        cd /opt/lvisf
        svn co https://svn.yancich.com:8443/svn/NASA/LVIS/trunk/ src
      2. [Or] Update it if you used the tar above
        cd /opt/lvisf/src
        svn update
    4. Enter the user home directory and create symbolic links
      cd /home/lvis
      mkdir src
      ln -s /opt/lvisf/src/* /home/lvis/src/
  2. Add the following lines to the .bashrc for the lvis user
    1. Edit the file
      nano /home/lvis/.bash_profile
    2. Add these lines
      # For SVN commit comment editor
      export SVN_EDITOR=nano
      
      # For the Innovative digitizer
      export WD_BASEDIR=/home/lvis/src/Innovative/WinDriver
      
      # For the SyncClock timer card
      export PLX_SDK_DIR=/home/lvis/src/PLX/PlxSdk
      
      # For the spectrum digitizer
      export SSP_INSTALL_ROOT=/home/lvis/src/spectrum
    3. Load this environment (re-run this script)
      source ~/.bash_profile
  3. Edit the file
    sudo nano /etc/ld.so.conf.d/lvisf.conf
    1. Add these lines
      /home/lvis/src/Innovative/winCloudDrvr/winclouddrvr_installation/lib
      /home/lvis/src/MIC3753/linux_driver_source_3.2.7.0_64bit/libs
      /home/lvis/src/spectrum/shared/linux/pc64/lib
    2. Reload the library path
      sudo ldconfig

SyncClock32 PLX Drivers

  1. Build all drivers
    1. Go to the source code home directory
      cd /home/lvis/src/PLX/PlxSdk/Driver
    2. Execute the build script
      ./buildalldrivers
  2. Build the samples
    1. Go to the source directory
      cd /home/lvis/src/PLX/PlxSdk
    2. Make the programs
      make clean
      make
  3. Load the driver
    1. To the binary directory
      cd /home/lvis/src/PLX/PlxSdk/Bin
    2. Execute the script for the 9030 card (our syncclock32)
      sudo ./Plx_load 9030
      
      # to just see what boards are supported, run the script with no argument
      ./Plx_load

MIC 3753 DIO Drivers

NOTE These drivers NEED to be built as root, you cannot sudo to build these drivers

  1. Become root all the time
    sudo bash
  2. Go to the code base directory
    cd /home/lvis/src/MIC3753/linux_driver_source_3.2.7.0_64bit/drivers/driver_base/src/lnx_ko
  3. Build the drivers
    make
  4. Go into our specific card directory
    cd /home/lvis/src/MIC3753/linux_driver_source_3.2.7.0_64bit/drivers/pci1753_mic3753_pcm3753i/src/lnx_ko
  5. Build the drivers
    # to disable IRQs in this driver, just use this code where the IRQ calls are commented out
    cp init.c.no_irq init.c
    make
  6. Make symbolic links to these drivers in the kernel module
    ln -s /opt/lvisf/src/MIC3753/linux_driver_source_3.2.7.0_64bit/drivers/bin/*.ko /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/misc/
  7. Load the drivers (this crashes when i load the bio1753 (IRQ!!! issue)
    cd /home/lvis/src/MIC3753/linux_driver_source_3.2.7.0_64bit/drivers/bin
    insmod biokernbase.ko
    insmod bio1753.ko
  8. Exit the sudo bash
    exit

Innovative Digitizer Drivers

Described in LinuxNotes.pdf (might be this /usr/Innovative/MalibuRed-1.3/KerPlug/LinuxNotes.pdf)

  1. Link our Innovative directory to /usr/Innovative
    sudo ln -s /opt/lvisf/src/Innovative /usr/Innovative
  2. Untar the latest driver
    tar -zxvf /opt/lvisf/src/tars/64WinDriver-12.3-0.X86_64.tgz.tar.gz --directory=/usr/Innovative/
  3. Build 12.3 Windriver
    1. Link 12.3 as our Windriver
      cd /usr/Innovative
      rm /usr/Innovative/WinDriver
      ln -s WinDriver-12.3 WinDriver
  4. Go here
    cd /usr/Innovative/WinDriver/redist
    1. Configure
      ./configure
      make
      sudo make install # they say do not do this, we live on the edge
  5. Kerplug
    1. Build (builds in the LINUX directory for the RT kernel)
      cd /usr/Innovative/KerPlug/linux
      ./configure
      make
    2. OK, this SHOULD fail.
    3. Edit the Makefile with
      nano Makefile
      1. Add seven dot dot slashes to the line:
        1. Convert this
          MOD_CSRCS = $(WD_BASEDIR)/redist/linux_wrappers.c
        2. to this
          MOD_CSRCS = ../../../../../../../$(WD_BASEDIR)/redist/linux_wrappers.c
      2. Change 1180 to 1230
    4. Run make again
      make
    5. Load the driver
      sudo insmod LINUX.2.6.32-431.el6.x86_64.x86_64/kp_malibu_module.ko
    6. Need to link the generic library name with the compiled library
      cd /usr/Innovative/KerPlug
      sudo ./quicklink wdapi 1230
  6. Final license issue with changed authorization mode
    1. Install qt development
      sudo yum install qt4 -y
      sudo yum install qt4-devel -y
    2. Rebuild (and this will also copy the files where they need to go) (NOTE: I believe this is unnecessary, but it does not hurt anything to do this)
      cd /home/lvis/src/Innovative/Malibu/Qt/Os_Mb
      qmake-qt4
      make

Historical Log

All of this below is just for historical records. Do NOT need to do any more Innovative.

Raw code from /etc/rc.local from the primary machine to load this

sudo bash
cd /usr/Innovative/WinDriver-12.3/redist && ./wdreg LINUX.2.6.32-431.el6.x86_64.x86_64/windrvr1230 auto
#/usr/Innovative/winCloudDrvr/winclouddrvr_installation/redist/wdreg winCloudDrvr auto
#chmod 666 /dev/winCloudDrvr
insmod /usr/Innovative/KerPlug/linux/LINUX.2.6.32-431.el6.x86_64.x86_64/kp_malibu_module.ko
exit
Field Addendum

In the field we noticed that the driver was saying unregistered, and would only run for 60 minutes (sometimes it ran longer, but this was an issue). Dave found these instructions from an email:

FIRST!

Make sure this folder exists:

/usr/Innovative/Lib/Dll (and it is linked to the Innovative folder in src)

Make sure LicenseLoader.so exists in that folder.

(I have attached that file and a tar of the 3 others needed to rebuild)

Hopefully its just that the .so did not make it to that system disk. 

If is does exist:

Copy all the files in the tar to:

/home/lvis/src/Innovative/Malibu

Cd to /home/lvis/src/Innovative/Malibu/Qt/Os_Mb

“qmake-qt4”
“make”
 
This will make the Os library and copy it to the correct folder.
 
“That is all I got” 😊
 
Dave

Spectrum Digitizer Drivers

  1. Create the symbolic link for /spectrum
    sudo ln -s /opt/lvisf/src/spectrum /spectrum
  2. Enter the code directory
    cd /home/lvis/src/spectrum/shared/linux/pc64/bin
  3. Copy the drivers for our kernel into the binary directory
    cp -a /home/lvis/src/spectrum/shared/linux/pc64/bin/`uname -r`/*.ko /home/lvis/src/spectrum/shared/linux/pc64/bin/
  4. Execute the setup script
    chmod 755 *.sh   # not sure why these were not already executable
    sudo bash ./setup_xmc1151_dvt.sh
  5. Select the proper option: 1)Install

Auto-load MIC-3753 Driver

  1. symlink the drivers into the kernel directory
    sudo ln -s /opt/lvisf/src/MIC3753/linux_driver_source_3.2.7.0_64bit/drivers/bin/*.ko /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/misc/
  2. add to our startup script /etc/sysconfig/modules/lvisf.modules
    1. modify the file
      sudo nano /etc/sysconfig/modules/lvisf.modules
      sudo chmod 755 /etc/sysconfig/modules/lvisf.modules
    2. add the following
      # start the MIC-3753 drivers
      /sbin/modprobe biokernbase
      /sbin/modprobe bio1753

Auto-load Plx9030 Driver

NOTE: (in lieu of step 2 below) I had this not work when I manually edited it the first time. A copy of the file is in the repository, you could just copy that file in:

sudo cp /opt/lvisf/src/lvisF/scripts/lvisf.modules /etc/sysconfig/modules/lvisf.modules
  1. symlink the driver into the kernel so it will come up on boot
    sudo ln -s /opt/lvisf/src/PLX/PlxSdk/Driver/Source.Plx9000/Output/Plx9030.ko /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/misc/
  2. add to our startup script /etc/sysconfig/modules/lvisf.modules
    1. modify the file
      sudo nano /etc/sysconfig/modules/lvisf.modules
    2. add the following
      # start the Plx9030 syncclock32 driver
      /sbin/modprobe Plx9030
  3. symbolically link in our rc.local into /etc/rc.local
    1. remove the original
      # remove the symlink
      sudo rm /etc/rc.local
      # move the original to something else
      sudo mv /etc/rc.d/rc.local /etc/rc.d/rc.local_orig
    2. link in the lvisf version
      sudo ln -s /opt/lvisf/src/lvisF/scripts/rc.local /etc/rc.d/rc.local
      sudo ln -s /etc/rc.d/rc.local /etc/rc.local
    3. verify that the system will not try to launch on boot (unless that is what you want!)
      # look for this near the top
      AUTOSTART_LVISF="false"

Installing Boost Library

The boost C++ library is required for the data system. The tarball of the 1.6.2 version is in the repository. Or download the latest from http://www.boost.org/users/download/. Here is the latest as of 2018.01.04 https://dl.bintray.com/boostorg/release/1.66.0/source/boost_1_66_0.tar.bz2

  1. Uncompress the tar into /opt
    cd /opt
    sudo tar -jxvf /opt/lvisf/src/tars/boost_1_62_0.tar.bz2
  2. Symbolically link to a generic boost directory
    sudo ln -s /opt/boost_1_62_0 /opt/boost
  3. Chown it all to lvis user
    sudo chown -R lvis:lvis /opt/boost_1_62_0
  4. Set the environment variable for the BOOST_ROOT variable
    1. Edit the file /home/lvis/.bash_profile
      nano /home/lvis/.bash_profile 
    2. Add the line
      # Add the boost root directory
      export BOOST_ROOT=/opt/boost
    3. Run our profile to load this variable
      source /home/lvis/.bash_profile
  5. Compile the boost libraries
    cd /opt/boost
    ./bootstrap.sh
    ./b2 -j $(nproc --all)  # should figure out number of cpus automagically

Installing Ethernet to Serial MOXA Drivers

Follow the instructions here:

Installing USB Temperature Library

Follow the instructions below to compile the USB temperature monitoring device libraries required.

LVIS User Binary Path

  1. Create this directory
    mkdir ~/bin
  2. Symbolically link in programs into this path from the scripts directory
    ln -s /opt/lvisf/src/lvisF/scripts/applanix* ~/bin/.
    ln -s /opt/lvisf/src/lvisF/scripts/build* ~/bin/.
    ln -s /opt/lvisf/src/lvisF/scripts/javad* ~/bin/.
    ln -s /opt/lvisf/src/lvisF/scripts/lvis* ~/bin/.
    ln -s /opt/lvisf/src/lvisF/scripts/query* ~/bin/.
    ln -s /opt/lvisf/src/lvisF/scripts/run* ~/bin/.

Clean Boot Operations

Load Drivers

  1. Load the MIC-3753 DIO Drivers
    sudo insmod /home/lvis/src/MIC3753/linux_driver_source_3.2.7.0_64bit/drivers/bin/biokernbase.ko
    sudo insmod /home/lvis/src/MIC3753/linux_driver_source_3.2.7.0_64bit/drivers/bin/bio1753.ko
  2. Load the SyncClock32 Timer Drivers
    cd /home/lvis/src/PLX/PlxSdk/Bin
    sudo ./Plx_load 9030

Compile Code

  1. Enter the build directory for lvisf
    cd /home/lvis/src/lvisF/build
  2. Use cmake
    cmake ../
  3. Build code
    make

Run Tests

User Space Latency Test

  1. Enter the testing program
    cd /home/lvis/src/lvisF/build/bin/tests/syncclock
  2. Run the latency program
    sudo ./galvMove

Latency Tweaking

  • Set CPU affinity to CPU 3 with something like, made it much more consistent since I guess most things go for CPU 0 by default
    CPU_SET(3, &cpus);
  • Change the scheduler policy, this information is displayed in the syncclock test program
    sudo chrt --fifo 99 ./galvMove
  • Isolate a CPU, and then have the code attach itself to that cpu
    • In /etc/grub.conf add this command to the kernel command line, so all user space code will avoid CPU 2 and 3 in this example, leaving 0 and 1 for the OS
      isolcpus=2,3
    • Change the program such that
      CPU_SET(3, &cpus);
    • Run the program with chrt or not
      sudo chrt --fifo 99 ./galvMove
  • Set the timer card interrupt affinity to a single CPU (not the prime)
    sudo bash -c 'echo 2 > /proc/irq/19/smp_affinity'
    • Using 2 here put the interrupt 19 servicing on CPU 1 exclusively
  • More low latency items to add to the kernel command line for /etc/grub.conf
    rhgb nousb quiet isolcpus=2,3 nosoftlockup mce=ignore_ce audit=0
    • nosoftlockup disables backtrace functionality
    • mce=ignore_ce ignores corrected errors
    • audit=0 disables kernel components of the audit subsystem

Testing

  • Testing delays
    • Install perf
      sudo yum install perf
    • Run this command to record some latency data
      cd /opt/lvisf/src/lvisF/build/bin/tests/syncclock
      sudo perf sched record -o /dev/shm/perf.data chrt --fifo 99 ./galvMove
    • Run the following to read the data
      sudo perf sched -i /dev/shm/perf.data latency > /tmp/perf.latency.report

Show Interrupt Status

  • This command shows interrupts for each core / CPU
    cat /proc/interrupts
    # notice that CPU1 has all the timer card interrupts (PLx9030)
    [lvis@lvisf syncclock]$ cat /proc/interrupts
               CPU0       CPU1       CPU2       CPU3       
      0:        125          0          0          0  IR-IO-APIC-edge      timer
      8:          1          0          0          0  IR-IO-APIC-edge      rtc0
      9:          0          0          0          0  IR-IO-APIC-fasteoi   acpi
     18:       1968          0          0          0  IR-IO-APIC-fasteoi   eth2
     19:          0    2021327          0          0  IR-IO-APIC-fasteoi   Plx9030
     24:          0          0          0          0  DMAR_MSI-edge      dmar0
     25:          0          0          0          0  DMAR_MSI-edge      dmar1
     26:          2          0          0          0  IR-HPET_MSI-edge      hpet2
     27:          0          0          0          0  IR-HPET_MSI-edge      hpet3
     28:          0          0          0          0  IR-HPET_MSI-edge      hpet4
     29:          0          0          0          0  IR-HPET_MSI-edge      hpet5
     34:        235          0          0          0  IR-PCI-MSI-edge      i915
     35:          0          0          0          0  IR-PCI-MSI-edge      ahci
     36:       7971          0          0          0  IR-PCI-MSI-edge      ahci
    NMI:          0          0          0          0   Non-maskable interrupts
    LOC:      20569      29227      10924      50493   Local timer interrupts
    SPU:          0          0          0          0   Spurious interrupts
    PMI:          0          0          0          0   Performance monitoring interrupts
    IWI:          0          0          0          0   IRQ work interrupts
    RES:        324        194        372        353   Rescheduling interrupts
    CAL:         47        197        178        211   Function call interrupts
    TLB:        142        610        312          1   TLB shootdowns
    TRM:          0          0          0          0   Thermal event interrupts
    THR:          0          0          0          0   Threshold APIC interrupts
    MCE:          0          0          0          0   Machine check exceptions
    MCP:          1          1          1          1   Machine check polls
    ERR:          0
    MIS:          0

Test Results

  • 2016.04.27: Ran a test for 2.7 hours. We missed 46 shots out of 49097902 at 5khz (200 useconds) so as far as actually reacting to the interrupt, we are in good shape.
  • Time to make a build 1 data system and get better numbers as we do all our tasks.
code/work/lvisf/2022/centos65minimal/start.1645220827.txt.gz · Last modified: 2022/02/18 21:47 by david