Blame README.org

Packit Service d8d8ac
Packit Service d8d8ac
* Introduction
Packit Service d8d8ac
Packit Service d8d8ac
  This software is an implementation of the Precision Time Protocol
Packit Service d8d8ac
  (PTP) according to IEEE standard 1588 for Linux. The dual design
Packit Service d8d8ac
  goals are to provide a robust implementation of the standard and to
Packit Service d8d8ac
  use the most relevant and modern Application Programming Interfaces
Packit Service d8d8ac
  (API) offered by the Linux kernel. Supporting legacy APIs and other
Packit Service d8d8ac
  platforms is not a goal.
Packit Service d8d8ac
Packit Service d8d8ac
* License
Packit Service d8d8ac
Packit Service d8d8ac
  The software is copyrighted by the authors and is licensed under the
Packit Service d8d8ac
  GNU General Public License. See the file, COPYING, for details of
Packit Service d8d8ac
  the license terms.
Packit Service d8d8ac
Packit Service d8d8ac
* Features
Packit Service d8d8ac
Packit Service d8d8ac
  - Supports hardware and software time stamping via the Linux
Packit Service d8d8ac
    SO_TIMESTAMPING socket option.
Packit Service d8d8ac
Packit Service d8d8ac
  - Supports the Linux PTP Hardware Clock (PHC) subsystem by using the
Packit Service d8d8ac
    clock_gettime family of calls, including the new clock_adjtimex
Packit Service d8d8ac
    system call.
Packit Service d8d8ac
Packit Service d8d8ac
  - Implements Boundary Clock (BC) and Ordinary Clock (OC).
Packit Service d8d8ac
Packit Service d8d8ac
  - Transport over UDP/IPv4, UDP/IPv6, and raw Ethernet (Layer 2).
Packit Service d8d8ac
Packit Service d8d8ac
  - Supports IEEE 802.1AS-2011 in the role of end station.
Packit Service d8d8ac
Packit Service d8d8ac
  - Modular design allowing painless addition of new transports and
Packit Service d8d8ac
    clock servos.
Packit Service d8d8ac
Packit Service d8d8ac
* Getting the Code
Packit Service d8d8ac
Packit Service d8d8ac
  You can download the latest released version at Source Forge.
Packit Service d8d8ac
Packit Service d8d8ac
  http://sourceforge.net/projects/linuxptp/files/latest/download
Packit Service d8d8ac
Packit Service d8d8ac
  The source code is managed using the git version control system. To
Packit Service d8d8ac
  get your own copy of the project sources, use the following command.
Packit Service d8d8ac
Packit Service d8d8ac
#+BEGIN_EXAMPLE
Packit Service d8d8ac
  git clone git://git.code.sf.net/p/linuxptp/code linuxptp
Packit Service d8d8ac
#+END_EXAMPLE
Packit Service d8d8ac
Packit Service d8d8ac
  If the git protocol is blocked by your local area network, then you
Packit Service d8d8ac
  can use the alternative HTTP protocol instead.
Packit Service d8d8ac
Packit Service d8d8ac
#+BEGIN_EXAMPLE
Packit Service d8d8ac
  git clone http://git.code.sf.net/p/linuxptp/code linuxptp
Packit Service d8d8ac
#+END_EXAMPLE
Packit Service d8d8ac
Packit Service d8d8ac
* System Requirements
Packit Service d8d8ac
Packit Service d8d8ac
  In order to run this software, you need Linux kernel
Packit Service d8d8ac
  version 3.0 or newer, and the kernel header files must available at
Packit Service d8d8ac
  compile time.
Packit Service d8d8ac
Packit Service d8d8ac
  In addition, you will also need to have either:
Packit Service d8d8ac
Packit Service d8d8ac
  1. A supported Ethernet MAC device.
Packit Service d8d8ac
Packit Service d8d8ac
  2. A supported PHY device paired with a MAC that allows time
Packit Service d8d8ac
     stamping in the PHY (indicated by PHY=Y in the table below).
Packit Service d8d8ac
Packit Service d8d8ac
** Linux Kernel Support
Packit Service d8d8ac
Packit Service d8d8ac
   In order to support PTP, the operating system needs to provide two
Packit Service d8d8ac
   services: network packet time stamping and clock control. In 2009,
Packit Service d8d8ac
   Patrick Ohly added a new socket option called SO_TIMESTAMPING for
Packit Service d8d8ac
   packet time stamping, especially for PTP. This work appeared in
Packit Service d8d8ac
   Linux version 2.6.30.
Packit Service d8d8ac
Packit Service d8d8ac
   In July of 2011, the PTP Hardware Clock (PHC) subsystem was merged
Packit Service d8d8ac
   into Linux version 3.0. The PHC code provides a driver framework and
Packit Service d8d8ac
   the user space API for clock control.
Packit Service d8d8ac
Packit Service d8d8ac
** Ethtool Support
Packit Service d8d8ac
Packit Service d8d8ac
   Starting with version 3.5 of the Linux kernel, you can query the
Packit Service d8d8ac
   time stamping capabilities of a network interface using the
Packit Service d8d8ac
   ETHTOOL_GET_TS_INFO ioctl. Using ethtool version 3.4 or later, you
Packit Service d8d8ac
   can check your system's time stamping support as shown in the
Packit Service d8d8ac
   following example.
Packit Service d8d8ac
Packit Service d8d8ac
#+BEGIN_EXAMPLE
Packit Service d8d8ac
  ethtool -T eth0
Packit Service d8d8ac
#+END_EXAMPLE
Packit Service d8d8ac
Packit Service d8d8ac
   If the ethtool ioctl is available, then the ptp4l program will use
Packit Service d8d8ac
   it in order to discover the proper PHC device.
Packit Service d8d8ac
Packit Service d8d8ac
** Driver Support Matrix
Packit Service d8d8ac
Packit Service d8d8ac
   The following two tables list the drivers that support the PHC
Packit Service d8d8ac
   subsystem and the Linux kernel version when they first appeared.
Packit Service d8d8ac
   These drivers will create a PHC device for controlling the hardware
Packit Service d8d8ac
   clock.
Packit Service d8d8ac
Packit Service d8d8ac
*** Hardware Timestamping - PHY
Packit Service d8d8ac
Packit Service d8d8ac
    |---------+-------------------------------+---------|
Packit Service d8d8ac
    | Driver  | Hardware                      | Version |
Packit Service d8d8ac
    |---------+-------------------------------+---------|
Packit Service d8d8ac
    | dp83640 | National Semiconductor PHYTER |     3.0 |
Packit Service d8d8ac
    |---------+-------------------------------+---------|
Packit Service d8d8ac
Packit Service d8d8ac
*** Hardware Timestamping - MAC
Packit Service d8d8ac
Packit Service d8d8ac
    |------------+--------------------------+---------|
Packit Service d8d8ac
    | Driver     | Hardware                 | Version |
Packit Service d8d8ac
    |------------+--------------------------+---------|
Packit Service d8d8ac
    | amd-xgbe   | AMD 10GbE Ethernet Soc   |    3.17 |
Packit Service d8d8ac
    | bfin_mac   | Analog Blackfin          |     3.8 |
Packit Service d8d8ac
    | bnx2x      | Broadcom NetXtremeII 10G |    3.18 |
Packit Service d8d8ac
    | cpts       | Texas Instruments am335x |     3.8 |
Packit Service d8d8ac
    | e1000e     | Intel 82574, 82583       |     3.9 |
Packit Service d8d8ac
    | fm10k      | Intel FM10000            |    3.18 |
Packit Service d8d8ac
    | fec        | Freescale i.mx6          |     3.8 |
Packit Service d8d8ac
    | gianfar    | Freescale eTSEC PowerPC  |     3.0 |
Packit Service d8d8ac
    | i40e       | Intel XL710 Family       |    3.14 |
Packit Service d8d8ac
    | igb        | Intel 82576, 82580       |     3.5 |
Packit Service d8d8ac
    | ixgbe      | Intel 82599              |     3.5 |
Packit Service d8d8ac
    | mlx4       | Mellanox 40G PCI         |    3.14 |
Packit Service d8d8ac
    | ptp_ixp46x | Intel IXP465             |     3.0 |
Packit Service d8d8ac
    | ptp_phc    | Lapis EG20T PCH          |     3.5 |
Packit Service d8d8ac
    | sfc        | Solarflare SFC9000       |     3.7 |
Packit Service d8d8ac
    | stmmac     | STM Synopsys IP Core     |    3.10 |
Packit Service d8d8ac
    | tg3        | Broadcom Tigon3 PCI      |     3.8 |
Packit Service d8d8ac
    | tilegx     | Tilera GBE/XGBE          |    3.12 |
Packit Service d8d8ac
    |------------+--------------------------+---------|
Packit Service d8d8ac
Packit Service d8d8ac
*** Software Timestamping
Packit Service d8d8ac
Packit Service d8d8ac
    The table below shows the Linux drivers that support software time
Packit Service d8d8ac
    stamping. In addition, the 'PHY' column indicates whether the
Packit Service d8d8ac
    Ethernet MAC driver can support a PTP Hardware Clock in an
Packit Service d8d8ac
    external PHY. The letter 'Y' in this column means that if you
Packit Service d8d8ac
    design a mother board that combines such a MAC with a PTP capable
Packit Service d8d8ac
    PHY, then it will work with the Linux PHC subsystem.
Packit Service d8d8ac
Packit Service d8d8ac
    |--------------+--------------------------+---------+-----|
Packit Service d8d8ac
    | Driver       | Hardware                 | Version | PHY |
Packit Service d8d8ac
    |--------------+--------------------------+---------+-----|
Packit Service d8d8ac
    | 3c59x        | 3Com EtherLink PCI       |    3.14 | N   |
Packit Service d8d8ac
    | altera_tse   | Altera Triple-Speed MAC  |    3.15 | Y   |
Packit Service d8d8ac
    | bna          | Brocade 1010/1020 10Gb   |    3.14 | N   |
Packit Service d8d8ac
    | bnx2x        | Broadcom Everest         |     3.5 | N   |
Packit Service d8d8ac
    | davinci_emac | TI DaVinci, Sitara       |     3.1 | Y   |
Packit Service d8d8ac
    | dnet         | Dave Ethernet MAC        |     3.1 | Y   |
Packit Service d8d8ac
    | e100         | Intel PRO/100            |     3.5 | N   |
Packit Service d8d8ac
    | e1000        | Intel PRO/1000 PCI/PCI-X |     3.5 | N   |
Packit Service d8d8ac
    | e1000e       | Intel PRO/1000 PCIe      |     3.5 | N   |
Packit Service d8d8ac
    | emaclite     | Xilinx Ethernet Lite     |     3.1 | Y   |
Packit Service d8d8ac
    | ethoc        | OpenCores 10/100 MAC     |     3.1 | Y   |
Packit Service d8d8ac
    | fec          | Freescale Coldfire       |     3.1 | Y   |
Packit Service d8d8ac
    | fec_mpc52xx  | Freescale MPC5200        |     3.1 | Y   |
Packit Service d8d8ac
    | forcedeth    | NVIDIA nForce            |     3.5 | N   |
Packit Service d8d8ac
    | fs_enet      | Freescale MPC512x        |     3.1 | Y   |
Packit Service d8d8ac
    | genet        | Broadcom GENET           |    3.15 | Y   |
Packit Service d8d8ac
    | ixp4xx_eth   | Intel IXP4xx             |     3.0 | Y   |
Packit Service d8d8ac
    | lib8390      | Asix AX88796             |     3.1 | Y   |
Packit Service d8d8ac
    | lib8390      | Various 8390 based HW    |     3.1 | N   |
Packit Service d8d8ac
    | ll_temac     | Xilinx LL TEMAC          |     3.1 | Y   |
Packit Service d8d8ac
    | macb         | Atmel AT32, AT91         |     3.1 | Y   |
Packit Service d8d8ac
    | mv643xx_eth  | Marvell Discovery, Orion |     3.1 | Y   |
Packit Service d8d8ac
    | pxa168_eth   | Marvell pxa168           |     3.1 | Y   |
Packit Service d8d8ac
    | r6040        | RDC Ethernet MAC         |     3.1 | Y   |
Packit Service d8d8ac
    | r8169        | Realtek 8169/8168/8101   |     3.4 | N   |
Packit Service d8d8ac
    | samsun-sxgbe | Samsung SXGBE 10G        |    3.15 | Y   |
Packit Service d8d8ac
    | smsc911x     | SMSC LAN911x, LAN921x    |     3.1 | Y   |
Packit Service d8d8ac
    | smsc9420     | SMSC LAN9420 PCI         |     3.1 | Y   |
Packit Service d8d8ac
    | stmmac       | STM Synopsys IP Core     |     3.1 | Y   |
Packit Service d8d8ac
    | tg3          | Broadcom Tigon3 PCI      |     3.1 | Y   |
Packit Service d8d8ac
    | ucc_geth     | Freescale QE Gigabit     |     3.1 | Y   |
Packit Service d8d8ac
    | usbnet       | USB network devices      |     3.2 | Y/N |
Packit Service d8d8ac
    | xgene-enet   | APM X-Gene SoC           |    3.17 | Y   |
Packit Service d8d8ac
    |--------------+--------------------------+---------+-----|
Packit Service d8d8ac
Packit Service d8d8ac
* Installation
Packit Service d8d8ac
Packit Service d8d8ac
** Linux kernel
Packit Service d8d8ac
Packit Service d8d8ac
   There are many ways of getting a precompiled Linux kernel or
Packit Service d8d8ac
   compiling your own, so this section is only meant as an example. It
Packit Service d8d8ac
   is important to have the kernel headers available when compiling
Packit Service d8d8ac
   the Linux PTP stack.
Packit Service d8d8ac
Packit Service d8d8ac
#+BEGIN_EXAMPLE
Packit Service d8d8ac
   export ARCH=x86
Packit Service d8d8ac
   export CROSS_COMPILE=
Packit Service d8d8ac
   export KBUILD_OUTPUT=/home/richard/kernel/ptp_debian
Packit Service d8d8ac
   mkdir -p $KBUILD_OUTPUT
Packit Service d8d8ac
   cp /boot/config-2.6.38-bpo.2-686 $KBUILD_OUTPUT/.config
Packit Service d8d8ac
   make oldnoconfig
Packit Service d8d8ac
   make menuconfig
Packit Service d8d8ac
   time make -j4
Packit Service d8d8ac
   make headers_install
Packit Service d8d8ac
#+END_EXAMPLE
Packit Service d8d8ac
Packit Service d8d8ac
   Here is a table of kernel configuration options needed for PTP
Packit Service d8d8ac
   support. In addtion to these, you should enable the specific
Packit Service d8d8ac
   Ethernet MAC and PHY drivers for your hardware.
Packit Service d8d8ac
Packit Service d8d8ac
   |---------------------------------+-----------------------------|
Packit Service d8d8ac
   | Option                          | Description                 |
Packit Service d8d8ac
   |---------------------------------+-----------------------------|
Packit Service d8d8ac
   | CONFIG_PPS                      | Required                    |
Packit Service d8d8ac
   | CONFIG_NETWORK_PHY_TIMESTAMPING | Timestamping in PHY devices |
Packit Service d8d8ac
   | PTP_1588_CLOCK                  | PTP clock support           |
Packit Service d8d8ac
   |---------------------------------+-----------------------------|
Packit Service d8d8ac
Packit Service d8d8ac
** PTP stack
Packit Service d8d8ac
Packit Service d8d8ac
   1. Just type 'make'
Packit Service d8d8ac
Packit Service d8d8ac
   2. If you compiled your own kernel (and the headers are not
Packit Service d8d8ac
      installed into the system path), then you should set the
Packit Service d8d8ac
      KBUILD_OUTPUT environment variable as in the example, above.
Packit Service d8d8ac
Packit Service d8d8ac
   3. In order to install the programs and man pages into /usr/local,
Packit Service d8d8ac
      run the 'make install' target. You can change the installation
Packit Service d8d8ac
      directories by setttings the variables prefix, sbindir, mandir,
Packit Service d8d8ac
      and man8dir on the make command line.
Packit Service d8d8ac
Packit Service d8d8ac
* Getting Involved
Packit Service d8d8ac
Packit Service d8d8ac
  The software development is hosted at Source Forge.
Packit Service d8d8ac
Packit Service d8d8ac
  https://sourceforge.net/projects/linuxptp/
Packit Service d8d8ac
Packit Service d8d8ac
** Reporting Bugs
Packit Service d8d8ac
Packit Service d8d8ac
   Please report any bugs or other issues with the software to the
Packit Service d8d8ac
   linuxptp-users mailing list.
Packit Service d8d8ac
Packit Service d8d8ac
   https://lists.sourceforge.net/lists/listinfo/linuxptp-users
Packit Service d8d8ac
Packit Service d8d8ac
** Development
Packit Service d8d8ac
Packit Service d8d8ac
   If you would like to get involved in improving the software, please
Packit Service d8d8ac
   join the linuxptp-devel mailing list.
Packit Service d8d8ac
Packit Service d8d8ac
   https://lists.sourceforge.net/lists/listinfo/linuxptp-devel
Packit Service d8d8ac
Packit Service d8d8ac
*** Submitting Patches
Packit Service d8d8ac
Packit Service d8d8ac
   1. Before submitting patches, please make sure that you are starting
Packit Service d8d8ac
      your work on the *current HEAD* of the git repository.
Packit Service d8d8ac
Packit Service d8d8ac
   2. Please checkout the ~CODING_STYLE.org~ file for guidelines on how to
Packit Service d8d8ac
      properly format your code.
Packit Service d8d8ac
Packit Service d8d8ac
   3. Describe your changes. Each patch will be reviewed, and the reviewers
Packit Service d8d8ac
      need to understand why you did what you did.
Packit Service d8d8ac
Packit Service d8d8ac
   4. *Sign-Off* each commit, so the changes can be properly attributed to
Packit Service d8d8ac
      you and you explicitely give your agreement for distribution under
Packit Service d8d8ac
      linuxptp's license. Signing-off is as simple as:
Packit Service d8d8ac
Packit Service d8d8ac
      #+BEGIN_EXAMPLE
Packit Service d8d8ac
      git commit -s
Packit Service d8d8ac
      #+END_EXAMPLE
Packit Service d8d8ac
Packit Service d8d8ac
      or by adding the following line (replace your real name and email)
Packit Service d8d8ac
      to your patch:
Packit Service d8d8ac
Packit Service d8d8ac
      #+BEGIN_EXAMPLE
Packit Service d8d8ac
      Signed-off-by: Random J Developer <random@developer.example.org>
Packit Service d8d8ac
      #+END_EXAMPLE
Packit Service d8d8ac
Packit Service d8d8ac
   5. Finally, send your patches via email to the linuxptp-devel mailing
Packit Service d8d8ac
      list, where they will be reviewed, and eventually be included in the
Packit Service d8d8ac
      official code base.
Packit Service d8d8ac
Packit Service d8d8ac
      #+BEGIN_EXAMPLE
Packit Service d8d8ac
      git send-email --to linuxptp-devel@lists.sourceforge.net origin/master
Packit Service d8d8ac
      #+END_EXAMPLE
Packit Service d8d8ac
Packit Service d8d8ac
* Thanks
Packit Service d8d8ac
Packit Service d8d8ac
  Thanks to AudioScience Inc for sponsoring the 8021.AS support.
Packit Service d8d8ac
Packit Service d8d8ac
  - http://www.audioscience.com
Packit Service d8d8ac
Packit Service d8d8ac
  Thanks to Exablaze for donating an ExaNIC X10
Packit Service d8d8ac
Packit Service d8d8ac
  - http://exablaze.com/exanic-x10
Packit Service d8d8ac
Packit Service d8d8ac
  Thanks to Intel Corporation for donating four NICs, the 82574,
Packit Service d8d8ac
  82580, 82599, and the i210.
Packit Service d8d8ac
Packit Service d8d8ac
  - http://www.intel.com
Packit Service d8d8ac
  - http://e1000.sourceforge.net
Packit Service d8d8ac
Packit Service d8d8ac
  Thanks to Meinberg Funkuhren for donating a LANTIME M1000.
Packit Service d8d8ac
Packit Service d8d8ac
  - https://www.meinbergglobal.com
Packit Service d8d8ac
Packit Service d8d8ac
  For testing I use an OTMC 100 grandmaster clock donated by OMICRON Lab.
Packit Service d8d8ac
Packit Service d8d8ac
  - http://www.omicron-lab.com/ptp