diff --git a/qla2x00t/doc/qla2x00t-howto.html b/qla2x00t/doc/qla2x00t-howto.html index ae601831e..66b418723 100644 --- a/qla2x00t/doc/qla2x00t-howto.html +++ b/qla2x00t/doc/qla2x00t-howto.html @@ -8,7 +8,7 @@ How to configure QLogic target driver for 22xx/23xx/24xx/25xx adapters @@ -35,12 +35,12 @@ body > ol > li {padding-bottom:3ex;}
qla2xxx 0000:13:00.0: Firmware image unavailable.
 qla2xxx 0000:13:00.0: Failed to initialize adapter
- In this case I had to download ql2300_fw.bin. + In this case I had to download ql2500_fw.bin.
  • Install the necessary kernel development packages. On a Debian system these packages can be installed as follows: -
    [root@proj ]# apt-get install gcc libncurses5-dev linux-headers lsscsi patch subversion
    +
    [root@proj ]# apt-get install gcc libncurses5-dev linux-headers-`uname -r` lsscsi patch subversion
    On RHEL/CentOS/SL systems these packages can be installed as follows:
    [root@proj ]# yum install gcc ncurses-devel kernel-devel lsscsi patch subversion
    And on SUSE systems these packages can be installed by running the following command: @@ -59,18 +59,12 @@ And on SUSE systems these packages can be installed by running the following com been extracted in a single directory. The structure of that directory will be identical to that of the SCST trunk. -
    [root@proj ]# svn co https://scst.svn.sourceforge.net/svnroot/scst/trunk scst
    +
    [root@proj ]# svn co https://svn.code.sf.net/p/scst/svn/trunk scst
    After the above command finished a directory called 'scst' will have been created in the current directory, which is /root in this how-to.
  • -
  • -Unload the qla2xxx kernel module provided by your Linux distribution and blacklist it: -
    [root@proj ]# rmmod qla2xxx
    -[root@proj ]# echo blacklist qla2xxx >/etc/modprobe.d/blacklist-qla2xxx.conf
    -
  • -
  • Find out whether you will need SCSI pass-through and/or the iSCSI zero-copy optimization. If not, skip the kernel download, patch, rebuild @@ -79,112 +73,93 @@ and reboot steps and continue with the SCST build step.
  • Decide whether you want to start from a vanilla Linux kernel source tree or from the kernel source tree specific to your Linux distribution. Vanilla kernel sources can be downloaded from http://www.kernel.org/pub/linux/kernel/. Unzip the downloaded archive under /usr/src: -
    [root@proj src ]# tar -xjf /usr/src/linux-2.6.26.tar.bz2
    +
    [root@proj ]# cd /usr/src
    +[root@proj src ]# tar -xjf /usr/src/linux-3.11.8.tar.bz2
    Instructions for obtaining a distribution-specific kernel source tree vary. An example for Debian: -
    [root@proj src ]# apt-get install linux-source-2.6
    -[root@proj src ]# tar xjf linux-source-2.6.32.tar.bz2
    -
  • - -
  • - Create the necessary symbolic links: -
    [root@proj src ]# pwd
    -/usr/src
    -[root@proj src ]# ln -s /usr/src/linux-2.6.26 linux
    -[root@proj src ]# ln -s /usr/src/linux-2.6.26 kernel
    +
    [root@proj src ]# apt-get install linux-source-`uname -r`
    +[root@proj src ]# tar xjf linux-source-`uname -r`.tar.bz2
  • Patch the kernel that has just been downloaded: -
    [root@proj ]# cd /usr/src/linux-2.6.26
    -[root@proj linux-2.6.26]# patch -p1 < /root/scst/scst/kernel/scst_exec_req_fifo-2.6.26.patch
    +
    [root@proj src ]# ln -s linux-3.11 linux
    +[root@proj src ]# cd linux
    +[root@proj linux ]# patch -p1 < /root/scst/scst/kernel/scst_exec_req_fifo-3.11.patch
  • -
  • - Now build the kernel.

    +
  • The next step is to configure the kernel: +
    [root@proj linux ]# pwd
    +/usr/src/linux
    +[root@proj linux ]# make menuconfig
    - Make sure you disable kernel hacking feature and HIGHMEM4G|HIGHMEM64G, i.e. -
    [root@proj ]# grep -i highmem /usr/src/linux/.config
    +  If you have built a 32-bit kernel make sure to disable HIGHMEM4G and
    +  HIGHMEM64G, i.e.
    +
    [root@proj linux ]# grep -i highmem .config
     CONFIG_NOHIGHMEM=y
     # CONFIG_HIGHMEM4G is not set
     # CONFIG_HIGHMEM64G is not set
    - If you have a system with more than 1GB of memory, consider to change CONFIG_VMSPLIT option to the corresponding value. - -
    [root@proj linux ]# pwd
    -/usr/src/linux
    -[root@proj linux ]# make menuconfig
    -[root@proj linux ]# make bzImage
    -[root@proj linux ]# make modules
    -[root@proj linux ]# make modules_install
    -[root@proj linux ]# make install
    + If you have built a 32-bit kernel on a system with more than 1GB of memory, + consider to change CONFIG_VMSPLIT option to an appropriate value. +
  • +
  • Next, build and install the kernel: +
    [root@proj linux ]# make -j$(ls -1d /sys/devices/system/cpu/cpu[0-9]* | wc -l) bzImage modules
    +[root@proj linux ]# make modules_install install
  • Reboot the system and during boot select the freshly built kernel to boot from.
  • +
  • +Unload the qla2xxx kernel module provided by your Linux distribution and blacklist it: +
    [root@proj ]# echo blacklist qla2xxx >/etc/modprobe.d/blacklist-qla2xxx.conf
    +[root@proj ]# rmmod qla2xxx
    +
  • +
  • OPTIONAL step: clean up the kernel modules directory before building the SCST kernel modules.
    This is only necessary if you encounter the following error message: "scst: disagrees about version of symbol struct_module".

    - That error message indicates that a kernel module - load was compiled against kernel headers that did not match the running - kernel. Doing a clean rebuild of the kernel and SCST should make the - above error go away. To make sure nothing of the old kernel is left, - do a clean rebuild of the Linux kernel and SCST as follows: + That error message indicates that a kernel module was compiled against + kernel headers that did not match the running kernel. Doing a clean rebuild + of the kernel and SCST should make the above error go away. To make sure + nothing of the old kernel is left, do a clean rebuild of the Linux kernel + and SCST as follows: -
    [root@proj linux ] pwd
    +
    [root@proj linux ]# pwd
     /usr/src/linux
    -[root@proj linux ] make oldconfig
    -[root@proj linux ] make clean
    -[root@proj linux ] rm -rf /lib/modules/`uname -r`
    -[root@proj linux ] make modules
    -[root@proj linux ] make modules_install
    -[root@proj linux ] make install
    -[root@proj linux ] reboot
    +[root@proj linux ]# make oldconfig +[root@proj linux ]# make clean +[root@proj linux ]# rm -rf /lib/modules/`uname -r` +[root@proj linux ]# make -j$(ls -1d /sys/devices/system/cpu/cpu[0-9]* | wc -l) bzImage modules +[root@proj linux ]# make modules_install install +[root@proj linux ]# reboot
  • Select a build mode that suits your needs, e.g. optimal performance or debugging SCST. The default mode is debug mode. Here is how to switch to release mode: -
    [root@proj trunk ] pwd
    +
    [root@proj scst ]# pwd
     /root/scst
    -[root@proj trunk ] make 2release
    +[root@proj scst ]# make 2release
  • - Now build the SCST kernel modules.
    - But first verify that the link "/lib/modules/`uname -r`/build"
    - points to the kernel headers of the currently running kernel.

    - -
      -
    1. Build SCST. -
      [root@proj ]# cd /root/scst/scst/src
      -[root@proj ]# make all
      -[root@proj ]# make install
      -
    2. + Now build the SCST kernel modules. But first verify that the link + "/lib/modules/`uname -r`/build" points to the kernel headers of the + currently running kernel. Build and install SCST, e.g. as follows: +
      [root@proj ]# cd /root/scst
      +[root@proj scst ]# BUILD_2X_MODULE=y CONFIG_SCSI_QLA_FC=y CONFIG_SCSI_QLA2XXX_TARGET=y make all install
      -
    3. Build the QLogic target driver as follows:
      -
        -
      1. Change the working directory to the SCST source tree. -
        [root@proj trunk]# pwd
        -/root/scst
      2. -
      3. Install the qla2xxx initiator kernel module from the SCST tree: -
        [root@proj trunk]# BUILD_2X_MODULE=y CONFIG_SCSI_QLA_FC=y CONFIG_SCSI_QLA2XXX_TARGET=y \
        -make -s -C qla2x00t/qla2x00-target install
        -
      4. -
      5. Verify that compilation and installation succeeded: -
        [root@proj trunk]# ls -l /lib/modules/`uname -r`/extra/qla2*
        +  Verify that compilation and installation succeeded:
        +	
        [root@proj scst]# ls -l /lib/modules/`uname -r`/extra/qla2*
         -rw-r--r--  1 root root  36756 Jun 20 18:46 qla2x00tgt.ko
         -rw-r--r--  1 root root 160192 Jun 20 18:46 qla2xxx_scst.ko   
         
        -
      6. -
      -
    4. -
  • @@ -245,15 +220,12 @@ scst: Virtual device handler "scst_user" registered successfully
  • Back up and rebuild the initial RAM disk such that the qla2xxx kernel module in that RAM disk will be replaced by qla2xxx_scst. How to do this depends on your -Linux distribution. For Debian systems, the initial RAM disk can be -rebuilt by running the following command: -
    [root@proj ]# update-initrd -c -k $(uname -r)
    -For Ubuntu systems: -
    [root@proj ]# update-initramfs -c -k $(uname -r)
    -For RHEL/CentOS/SL systems: -
    [root@proj ]# mkinitrd -f /boot/initramfs-$(uname -r).img $(uname -r)
    -And for SUSE systems: -
    [root@proj ]# mkinitrd
    +Linux distribution. The initial RAM disk can be rebuilt e.g. as follows: +
    [root@proj ]# type update-initrd >/dev/null 2>&1 && update-initrd -c -k `uname -r`
    +[root@proj ]# type update-initramfs >/dev/null 2>&1 && update-initramfs -c -k `uname -r`
    +[root@proj ]# if type mkinitrd >/dev/null 2>&1; then
    +if { rpm -q sles-release || rpm -q openSUSE-release; } >/dev/null 2>&1;
    +then mkinitrd; else mkinitrd -f /boot/initramfs-`uname -r`.img `uname -r`; fi; fi
  • @@ -270,35 +242,50 @@ Now let's create our virtual device: /mnt/disk1: data
  • +
  • The next step is to install scstadmin: +
    [root@proj ]# make -C scstadmin -s install
    +
  • +
  • To see the device on the initiator we have to add it in the LUNs set of our target.
    We must have a LUN with number 0 (LUs numeration must not start from, e.g., 1).

    - The simplest way to do that is to write an scstadmin config file: + The simplest way to do that is to generate an scstadmin config file, e.g. as + follows: -
    +
    modprobe qla2x00tgt
    +find /sys/kernel/scst_tgt/targets/qla2x00t -name enabled | \
    +while read f; do echo 1 >$f & done; wait
    +find /sys -name issue_lip | while read f; do echo 1 >$f & done; wait
    +{
    +cat <<EOF
     HANDLER vdisk_fileio {
    -	DEVICE disk1 {
    -		filename /mnt/disk1
    -	}
    +        DEVICE disk1 {
    +                filename /mnt/disk1
    +        }
     }
    +EOF
    +for p in /sys/kernel/scst_tgt/targets/qla2x00t/*; do
    +[ -d $p ] || continue
    +cat <<EOF
     
     TARGET_DRIVER qla2x00t {
    -	TARGET 25:00:00:f0:98:87:92:f3 {
    -		LUN 0 disk1
    +        TARGET $(basename $p) {
    +                enabled 1
     
    -		enabled 1
    -	}
    -}
    + LUN 0 disk1 + } +} +EOF +done +} >scst.conf
    -Before we can apply that file we have to install scstadmin first: +Check the generated config file. If it looks fine to you, move it to the +default location: +
    mv -i scst.conf /etc/scst.conf
    -
    [root@proj ]# make -C scstadmin -s install
    - -Let's save our configuration file as /etc/scst.conf.

    - -That file can be applied via scstadmin: +The SCST configuration in that file can be applied via scstadmin:
    [root@proj ]# scstadmin -config /etc/scst.conf
     
    @@ -320,11 +307,28 @@ The same can be done directly via the sysfs interface of SCST:
     [root@proj ]# echo "add disk1 0" >/sys/kernel/scst_tgt/targets/qla2x00t/25:00:00:f0:98:87:92:f3/luns/mgmt
     [root@proj ]# echo "1" >/sys/kernel/scst_tgt/targets/qla2x00t/25:00:00:f0:98:87:92:f3/enabled
     
    -

    - -
    ON INITIATOR

  • +
  • If you want to configure LUN masking the next step is to configure + one initiator group per initiator. To do that you need to discover the + initiator port WWNs. One way to discover these is as follows: +
    [root@proj ]# ls -d /sys/kernel/scst_tgt/targets/qla2x00t/*/sessions/*|sed 's,.*/,,' | sort -u
    +10:00:00:00:c9:95:c7:1a
    +10:00:00:00:c9:95:c7:1b
    +21:00:00:24:ff:46:c0:84
    +21:00:00:24:ff:46:c0:85
    +21:00:00:24:ff:6c:ca:d8
    +21:00:00:24:ff:6c:ca:d9
    +21:00:00:24:ff:6c:ca:da
    +21:00:00:24:ff:6c:ca:db
    + More information about initiator group configuration together with an + example can be found in the scst.conf man page.
  • + +
    +
    ON INITIATOR
    +
    + +
    1. A quote from the SCST README:
      Without loading appropriate device handler, corresponding device will be invisible for remote