# Presentation: 406523

## Linux-MVME TargetsUsing Motorola Board Support

*Joe Sullivan – EPICS System Developer (AES/BCDA)*
*14 June 2006*

*Epics Collaboration Meeting – June 2006*
*IOC Operation Systems*

## Overview	

- Future of Embedded Linux
- Linux for vxWorks Developers
- Motorola MVME Linux Support
- Embedded Linux Development Kit
- Embedded Linux Installation and Implementation
- Linux Runtime
- EPICS Target Development
- EPICS Results
- Remaining Work

## Future of Embedded Linux

***Future of Embedded Linux***

- Google “embedded linux” – 6,830,000
- Sponsored Links (2 pages)
- Single Board Computer Vendors claim Linux support
- Motorola, SBS, Xycom, ...
- Web Magazine (_[www.linuxdevices.com](http://www.linuxdevices.com/)_)
- Survey of Embedded Linux Distributions (‘01)
*19 Commercial*
*13 Open Source*
- Wind River Workbench
- Builds Linux targets.
- Popularity of EPICS Soft IOC’s

***Is Linux taking over the world? ******The ‘truthiness’ is....***

## Future of Embedded Linux

## Embedded Linux for VxWorks Developers	

- OS Kernel
- Soft Realtime
- Configurable
- Small
- Board Support Package
- Hardware device support (counter/timers, I/O Ports, mezzanine slots)
- VME Bus Support (memory windows , interrupt service, DMA)
- Customizable (source code)
- Build Tools
- Support Libraries
- Cross Compiler/Linker
- Network Booting (diskless)

## Motorola MVME Linux Support	

- Current MVME Products
- MVME3100 512MB, 844MHz, $2100
- MVME5500 512MB,     1GHz, $3200
- MVME6100  1GMB,  1.2GHz, $4200
- Active in-house development to support Linux
- Current Kernel Supported (v2.6.14)
* **5 months behind the most recent: v2.6.16 (*_*[http://www.kernel.org/pub/linux/kernel](http://www.kernel.org/pub/linux/kernel)*_*)*
- Improving VME bus memory and interrupt drivers based on customer feedback. *(Commercial RT Linux venders perhaps?).*
- Linux Kernel support for other SBC (CompactPCI, PMC, etc)

## Motorola MVME Linux Support

- Distribution is currently...informal
- Contact: Ajit Prem _[Ajit.Prem@motorola.com](mailto:Ajit.Prem@motorola.com)_
- Distribution Contents
- Generic linux kernel patch file
*patch-2.6.14-ecc.ir01.03282006.gz*
- Documentation
*README  (linux_2614_eec_readme.txt)*
*vme_driver.pdf*
- Example code – VME drivers
*vme_utils.tar.gz*
- Recommended Embedded Linux Development Kit
_*[www.denx.de](http://www.denx.de/)*_* -> ELDK*

## Embedded Linux Development Kit

- What is it?
-  Linux distribution targeting embedded system development
- Pre-built cross-platform software development tools for embedded processors (PowerPC, ARM, ....).
- Make, cross-compiler/linker(gcc), libraries.
- Prebuilt root filesystem.
- /bin, /dev, /etc, /lib, /proc, /sys, /var, /usr, .....
- Nothing that could not be produced in-house but ..it’s a pain!

## Installation and Implementation

- Distribution (eldk.tgz – 2Gigbytes)
- Buy CD $99 Euro
- Download:
*http://sunsite.utk.edu/ftp/pub/linux/eldk/4.0/ppc-linux-x86**	**  **	*Use gftp (recursive download ~ 4hrs)*	*
- Unpack distribution
- cd /local/eldk
- tar xzf ~/eldk.tgz
- Documentation
- _[file:///local/linux/eldk/4.0/ppc-linux-x86/distribution/README.html](file:///G:/local/linux/eldk/4.0/ppc-linux-x86/distribution/README.html)_
- Check files for executable permission
- tools/bin/rpm, tools/usr/lib/rpm/rpmd, install, ELDK_MAKEDEV, ELDK_FIXOWNER

**ELDK Installation**

## Installation and Implementation

- Install ELDK
- ./install -d /local/eldk/eldk
- Setup cross-built environment variables
- setenv CROSS_COMPILE ppc_74xx-
- set path=($path /local/eldk/usr/bin /local/eldk/bin)

**ELDK Installation (cont)**

## Installation and Implementation

- Get Kernel patch file and README from Ajit Prem _[Ajit.Prem@motorola.com](mailto:Ajit.Prem@motorola.com)_
- Save: ~/patch-2.6.14-ecc.ir01.03282006.gz
-  Downloaded Linux 2.6.14 Kernel from _[http://www.kernel.org/pub/linux/](http://www.kernel.org/pub/linux/)_
- Save: kernel/v2.6/linux-2.6.14.tar.gz -> ~/linux-2.6.14.tar.gz
- Unzip Linux
- cd /local/linux
- tar xzf  ~/linux-2.6.14.tar.gz
- Patch Linux Kernel
- cd linux-2.6.14
- patch -Np1 < ~/patch-2.6.14-ecc.ir01.03282006

**Embedded Linux Kernel Build**

## Installation and Implementation

- Configure build for target architecture
- /local/linux/ linux-2.6.14/Makefile edit
-     ARCH ?= ppc
-     CROSS_COMPILE ?= ppc_74xx-
- Build Kernel (using ELDK make)
- ppc-linux-make mrproper
- ppc-linux-make menuconfig *(text based screen menus)*
- 	- Load Default Configuration (Load an Alternate Configuration File)
***   ******	******./arch/ppc/configs/mvme5500_defconfig****	*
-      - Set kernel boot command string (Platform Options)
-   		   **See: Motorola README file. **
***    ******See: <linuxTop>/Documentation/nfsroot.txt***
- ppc-linux-make zImage.initrd *<compressed kernel image>*

**Embedded Linux Kernel Build (cont)**

## Installation and Implementation

- Example: CONFIG_CMDLINE="console=ttyS0,9600 root=/dev/nfs rw nfsroot=/local/eldk/eldk/ppc_74xx ip=164.54.8.189:164.54.8.137:164.54.8.1:255.255.252.0:iocxxx:eth0:off vme=vme_slotnum=1"
- Goal: One kernel built for all targets.
- 	nfsroot can use RARP or BOOTP to fill the client IP and name from the server.
- Copy kernel to tftp server:  (required for MOTLoad’s netboot util).
- 	*/local/linux/linux-2.6.14/arch/ppc/boot/images/zImage.initrd.pplus*
***	******Uncompress Kernel Size: ***
***	******	******   ******1676763 zImage.mv5500  (1.67Mb)***

**Embedded Linux Kernel Build (cont)**

## Installation and Implementation

- Make root:/dev directory
- 	> cd /local/eldk/eldk/ppc_74xx/dev
- 	> sudo /local/eldk/distribution/ELDK_MAKEDEV
- Change files to be owned by **root**
- 	> cd /local/eldk
- 	> sudo /local/eldk/distribution/ELDK_FIXOWNER
- Create  sysfs (/sys) (MVME hardware access)
- 	> mkdir (/local/elkd/elkd/ppc_74xx)/sys
-       Add mount point to (/local/elkd/elkd/ppc_74xx)/etc/fstab
*	**none  /sys  sysfs   defaults  0 0*

**ELDK: Root file system setup *****(must be done as root)***

## Installation and Implementation

- Add Linux IOC to server’s export list
- File: /etc/exports
*/local/eldk iocLinux(rw,no_root_squash,secure)*
- Command: *sudo exportfs -a*

**Export IOC’s root file system on NFS Server**

- Connect to MVME thru serial port
- MVME5500> gevInit
- MVME5500> gevEdit mot-script-boot
- netBoot -d/dev/enet1 -c164.54.8.189 -s164.54.8.103 -e400 –f vxworks/MCGLINUX/zImage.mv5500
- <cr>

**MVME network boot of linux kernel (w/autoboot)**

## Linux Runtime

## Linux Runtime

## Linux Runtime

## EPICS Target

- Create new EPICS target architecture **(use vxWorks as a model)**
- See <epics base>/documentation/README.1st
- EPICS Configuration Files
- <top>/configuration/CONFIG_SITE
*CROSS_COMPILER_TARGET_ARCHS = linuxELDK-ppc_74xx*
- configure/os/
*CONFIG.Common.linuxELDK-ppc_74xx*
*CONFIG.linux-x86.linuxELDK-ppc_74xx*
*CONFIG_SITE.Common.linuxELDK-ppc_74xx*
- Use ELDK make *(with proper environment variables)*
- ppc-linux-make

**linuxELDK-ppc_74xx**

## EPICS Results	

- EPICS *linuxELDK-ppc_74xx *cross-compiler target
- EPICS Base - Built and Running (no problems)
- EPICS 3.14.8.2
*exampleApp *
- synApps 5.2
*Excluding (gensub, dxp, ccd, xxx)*
- iocxxx running synApps
*softIOC configuration*

## Remaining Work	

- Figure out the Motorola VME interface
- Memory windows and interrupt handling
- Benchmark MVME Linux performance
- Attempt a port of a vxWorks driver to Linux (OMS VME58).
- Investigate ucLinux (_[www.uclinux.org](http://www.uclinux.org/)_) kernel patches to get around the MMU (get direct access to VME memory and interrupts).

## Future of Embedded Linux