RTEMS+Cexp+GeSys

Gedare Bloom gedare at rtems.org
Fri May 4 14:36:54 UTC 2018


Hello Anton,

On Wed, Dec 13, 2017 at 9:13 PM, Anton Derbenev <aaderbenev at gmail.com> wrote:
> Hello all,
>
> at NSLS-II, we have several dozen MVME3100 VME crates running RTEMS with
> EPICS driver for various diagnostics and MRF timing hardware. The entire
> setup was handily created quite some time ago by combining RTEMS 4.9 with
> Cexp and GeSys to provide convenient booting and debugging capabilities. As
> an effort to make the setup more up-to-date, I made an attempt to compose a
> how-to which would describe how to successfully compile a bootable
> RTEMS+Cexp+GeSys image. A nice "bonus" would be if that image also worked
> when being run on a crate.
>
> It is not my first attempt as I already tried to do a similar thing for
> RTEMS 4.10. While in both cases I found lots of work being put by the
> community in helpful toolsets and documentation, the building process was
> not as straightforward as one would imagine by reading the QuickStart guide.
> There are many stumbles which, while probably being primitive in most cases,
> could be annoying to a user who lacks core developer knowledge and
> perspective. Some things can be mentioned _somewhere_ and can only be found
> quickly by google-fu and/or luck.
>
> This time I reached for RTEMS 5 right away. Results which I achieved are
> very similar to those which I had for RTEMS 4.10 - I can create a bootable
> image which appears to have working GeSys and Cexp shell, but access to
> "st.sys" fails along with other suspicious symptoms.
>
> Below is my "how-to" process which yields a bootable "rtems.ralf" file, and
> results for our test MVME3100 system boot procedure. Some points highlighted
> will probably be useful for further users' reference, and some of them come
> from earlier conversations on the mailing list. My hope is that someone
> knowledgeable will kindly review my steps and give some hint why the image
> fails to work as expected. Perhaps it would be great to have a step-by-step
> how-to as a part of documentation somewhere.
>
> ====================
> RTEMS 5 + Cexp + GeSys How-To
>
> 1. Get RTEMS source builder (rsb). As a part of its configuration, rsb will
> try to fetch various sources from multiple locations. If rsb is being
> configured in a protected environment (e.g. http proxy, firewalls, etc.),
> source locations can be unavailable. Get rsb sources on a machine which can
> freely download from git.rtems.org, github.com etc. with both http(s) and
> git protocol:
>
> $ mkdir --parents ~/src/RTEMS
> $ cd ~/src/RTEMS
> $ git clone http://github.com/RTEMS/rtems-source-builder.git rsb
> $ cd rsb/rtems
>
> Perform dry configuration and only download sources, as suggested here:
>
> https://lists.rtems.org/pipermail/users/2017-September/031647.html
>
> Choose profile as appropriate (rtems-powerpc for MVME3100):
>
> $ ../source-builder/sb-set-builder --dry-run --with-download
> --without-error-report --without-release-url 5/rtems-powerpc
>
> 2. If firewalls and proxies are not a problem for you, skip this step. Even
> though sources were pre-downloaded, rsb will try to fetch the rtems-tools
> repository during the build process (even if --no-download is specified). We
> need to make sure the repository is accessible or the lengthy build process
> (~ hour on two cores) will fail. In our environment, git protocol didn't
> work through http(s) proxy, so git config was modified:
>
> $ cd ~/src/RTEMS/rsb/rtems
> $ nano sources/git/rtems-tools.git/.git/config
>
> Replace:
> url = git://git.rtems.org/rtems-tools.git
> with:
> url = https://github.com/RTEMS/rtems-tools.git
>
> 3. rsb now has sources and patches downloaded. If you will build RTEMS on a
> different host, move the entire folder to the build machine.
>
> My build setup:
>
> $ uname -a
> Linux sandbox8 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2+deb8u2 (2017-06-26)
> x86_64 GNU/Linux
> $ cat /etc/debian_version
> 8.9
>
> All further steps are performed on the build machine.
>
> 4. Run sb-check and install necessary packages if the check tool complains:
>
> $ cd ~/src/RTEMS/rsb
> $ ./source-builder/sb-check
>
> Alas, sb-check doesn't check for everything. For example, the build process
> can fail with something like:
>
> checking for python... /usr/bin/python
> checking for python2.7... no
>
> This is resolved by being lucky in finding a similar issue discussed on the
> mailing list. Additional packages may be needed, in the mentioned case it
> was:
>
> $ sudo apt-get install python2.7-dev
>
> 5. Build rsb (takes a while, was an hour on my dual-core VM). Since sources
> were pre-downloaded, specify "--no-download" (however rtems-tools will still
> be fetched!):
>
> $ ../source-builder/sb-set-builder --no-download --prefix=$HOME/src/RTEMS/5
> 5/rtems-powerpc
>
> 6. Build rtems. First make sure rsb tools are in path:
>
> $ export PATH=$HOME/src/RTEMS/5/bin:$PATH
>
> Get RTEMS source:
>
> $ cd ~/src/RTEMS
> $ mkdir kernel
> $ cd kernel
> $ git clone https://github.com/RTEMS/rtems.git
>
> Run bootstrap scripts to generate files which are missing in cloned
> repository:
>
> $ cd rtems
> $ ./bootstrap -c
> $ ./bootstrap -p
> $ ../../rsb/source-builder/sb-bootstrap
> $ cd ..
>
> Configure and build RTEMS for the target:
>
> $ mkdir build-mvme3100
> $ cd build-mvme3100
> $ ../rtems/configure --enable-networking --enable-cxx --enable-rdbg
> --enable-posix --prefix=$HOME/src/RTEMS/5 --target=powerpc-rtems5
> --enable-rtemsbsp=mvme3100
> $ make -j 8
> $ make install
>
> 7. Build Cexp. Two things which are not straightforward is getting all
> submodules and running "make prep".
>
> $ cd ~/src/RTEMS
> $ mkdir cexp
> $ cd cexp
> $ git clone https://github.com/till-s/cexpsh.git
> $ cd cexpsh
> $ git submodule update --init --recursive
>
> As with RTEMS bootstrap, we need to generate some missing files. Stunningly,
> I didn't find it mentioned in cexpsh/INSTALL:
>
> $ make prep
>
> Now the code is ready to be configured and built. Use
> "--enable-std-rtems-installdirs" to perform installation on top of the
> previously built RTEMS tree:
>
> $ cd ..
> $ mkdir build-mvme3100
> $ cd build-mvme3100
> $ ../cexpsh/configure --enable-std-rtems-installdirs
> --with-rtems-top=$HOME/src/RTEMS/5 --host=powerpc-rtems5
> --enable-rtemsbsp=mvme3100
> $ make -j 8
> $ make install
>
> 8. Build GeSys. Another trickery here - before configuring, it is necessary
> to build the ldep tool as mentioned in documentation.
>
> Get all GeSys sources and submodules:
>
> $ cd ~/src/RTEMS
> $ mkdir gesys
> $ cd gesys
> $ git clone https://github.com/till-s/rtems-gesys.git
> $ cd rtems-gesys
> $ git submodule update --init --recursive
>
> As for other parts, generate missing files by running the bootstrap tool:
>
> $ ./bootstrap
>
> Another bootstrap is necessary for ldep:
>
> $ cd ldep
> $ ./bootstrap
> $ mkdir build
> $ cd build
>
> Configure and install ldep to where all rsb stuff is:
>
> $ ../configure --prefix=$HOME/src/RTEMS/5
> $ make
> $ make install
>
> Configure and install GeSys in the same tree where RTEMS and Cexp are by
> using "--enable-std-rtems-installdirs". Note that $HOME/src/RTEMS/5/bin must
> be in PATH:
>
> $ cd ~/src/RTEMS/gesys
> $ mkdir build-mvme3100
> $ cd build-mvme3100
> $ ../rtems-gesys/configure --enable-std-rtems-installdirs
> --with-rtems-top=$HOME/src/RTEMS/5 --host=powerpc-rtems5
> --enable-rtemsbsp=mvme3100
> $ make -j 8
> $ make install
>
> 9. Behold the build binaries:
>
> $ cd ~/src/RTEMS/5/powerpc-rtems5/bin
> $ ls
> ar  ld      nm       objdump  readelf    rtems.ralf  st.sys
> as  ld.bfd  objcopy  ranlib   rtems.exe  strip
>
> rtems.ralf is the thing. It worth mentioning that none of .obj files loaded
> in the "st.sys" are present (telnetd.obj, monitor.obj etc.)
>
> ====================
> Boot the image
>
> I put the resulting image in our VME timing test setup which successfully
> boots and runs RTEMS 4.9. Boot procedure is DHCP with MOTLoad netBoot.
> "rtems.ralf" was renamed to "rtems.boot" for booting purposes. Boot
> sequence:
>
> ********************
> Copyright(C)2008-2013,Emerson Network Power-Embedded Computing,Inc.
> All Rights Reserved
> Copyright Motorola Inc. 1999-2007, All Rights Reserved
> MOTLoad RTOS Version 2.0,  PAL Version 1.2 RM04
> Wed Nov  6 17:17:43 MST 2013
>
> MPU-Type             =MPC8540
> MPU-Int Clock Speed  =666MHz
> MPU-CCB Clock Speed  =333MHz
> MPU-DDR Clock Speed  =166MHz
> MPU-PCI Clock Speed  =66MHz, PCI, 64-bit
> MPU-Int Cache(L2) Enabled, 256KB, L2CTL =A8000300
>
> Reset/Boot Vector    =Flash0
>
> Local Memory Found   =10000000 (&268435456)
> User Download Buffer =0159D000:0179CFFF
>
> MVME3100> bootmem=malloc 0x500000
> return = 0193D000 (&26464256)
> errno  = 00000000
> MVME3100> netBoot -d/dev/enet0 -v -abootmem -p -h -u
> Network Loading from: /dev/enet0
>
> Locating BOOTP Server... Found It!
>
> Client IP Address      = 10.0.1.104
> Server IP Address      = 10.0.1.1
> Gateway IP Address     = 0.0.0.0
> Subnet IP Address Mask = 255.255.255.0
> Boot File Name         = rtems-5/rtems.boot
> Load Address           = 0193D000
> Buffer Size = ffffffff
>
> Network Boot File Load Start - Press <ESC> to Bypass, <SPC> to Continue
>
> Network Boot File Load in Progress - Press <CTRL-C> to Abort[]>>>>
> ...
> Bytes Received =&4886264, Bytes Loaded =&4886264
> Bytes/Second   =&488626, Elapsed Time =10 Second(s)
>
> Execution Halted on Request
> MV-----------------------------------------
> Welcome to rtems-5.0.0 (PowerPC/Generic (no FPU)/mvme3100)
> BSP: mvme3100, CVS Release ($Name$)
> CPU 0x8020 - rev 0x20
> Additionnal boot options are H
> Initial system stack at 14c9980
> Software IRQ stack starts at 14c9a90 with size 16384
> Going to start PCI buses scanning and initialization
> Board Type: MVME3100-1152 (S/N E10EA0D)
> External (=PCI Bus) Clock Freq   :   66666666 Hz
> Core Complex Bus (CCB) Clock Freq:  333333330 Hz
> CPU Clock Freq:                     133333332 Hz
> Ethernet 0                  EC:9E:CD:0E:16:5B
> Ethernet 1                  EC:9E:CD:0E:16:5C
> Ethernet 2                  EC:9E:CD:0E:16:5D
> Number of PCI buses found is : 2
> BUS:SLOT:FUN  VENDOR-DEV_ID: COMMAND STATUS BASE_ADDR0 BASE_ADDR1 IRQ_PIN ->
> IRQ_LINE
>   0:0x00:0    0x1057-0x0008:  0x0006 0x20b0 0x80000000 0x00000000       0 ->
> 0 (=0x00)
>   0:0x11:0    0x10e3-0x0148:  0x0146 0x02b0 0x80100004 0x00000000       1 ->
> 0 (=0x00)
>   0:0x12:0    0x10b5-0x6520:  0x0147 0x02b0 0x00000000 0x00000000       0 ->
> 0 (=0x00)
>   0:0x14:0    0x1095-0x3124:  0x01c7 0x02b0 0x80300004 0x00000000       1 ->
> 2 (=0x02)
>   1:0x00:0    0x10b5-0x9030:  0x0142 0x0290 0x80200000 0x00000000       1 ->
> 4 (=0x04)
> Memory:                             268435456 bytes
> Cleared PCI errors: pci_stat was 0x20b0
> OpenPIC Version 1.2 (1 CPUs and 56 IRQ sources) at 0x3775135744
> OpenPIC Vendor 0 (Unknown), Device 0 (Unknown), Stepping 0
> OpenPIC timer frequency is 41666666 Hz
> MSR is 0x00001000, TCR 0x04000000
> -----------------------------------------
> Exit from bspstart
> libi2c: Library not initialized
> Registering mpc8540 i2c bus driver :No such file or directory
> Tundra Tsi148 PCI-VME bridge detected at 0x80100000, IRQ 0
> Tsi148 Outbound Ports:
> Port  VME-Addr   Size       PCI-Adrs   Mode:
> 0:    0x20000000 0x0e000000 0xc0000000 A32, SUP, D32, SCT
> 1:    0x00000000 0x00ff0000 0xcf000000 A24, SUP, D32, SCT
> 2:    0x00000000 0x00010000 0xcfff0000 A16, SUP, D32, SCT
> 7:    0x00000000 0x01000000 0xce000000 CSR, SUP, D32, SCT
> Tsi148 Inbound Ports:
> Port  VME-Addr   Size       PCI-Adrs   Mode:
> 0:    0xc0000000 0x10000000 0x00000000 A32, PGM, DAT, SUP, USR, MBLT, BLT
> vmeTsi148 IRQ manager: looking for registers on VME...
> Trying to find CSR on VME...
> vmeTsi148 - IRQ manager using VME CSR to flush FIFO
> Registering /dev/console as minor 0 (==/dev/ttyS0)
> Welcome to RTEMS 5.0.0 GeSys
> This system  was built on 20171213EST19:00:39
> Installing TIOCGWINSZ line discipline: ok.
> To skip initialization, press a key now...
> bootpc_init: using network interface 'tse1'
> bootpc hw address is ec:9e:cd:e:16:5b
> My ip address is 10 .0 .1 .104
> Time Server is 10 .0 .1 .1
> Domain name is cs.nsls2.local
> Boot file is rtems-5/rtems.boot
> Command line is IOCNAME=timing
> Subnet mask is 255 .255 .255 .0
> Server ip address is 10 .0 .1 .1
> Gateway ip address is 0 .0 .0 .0
> Log server ip address is 10 .0 .1 .1
> bootpc_adjust_interface: add net route, error=114
> Trying to synchronize NTP...OK
> Trying symfile 'BUILTIN', system script 'st.sys'
> 'st.sys':
> opening script file: No such file or directory
> Type 'cexpsh.help()' for help (no quotes)
> ********************
>
> There are several suspicious points: PCI buses scanning not reporting
> anything, i2c library/driver errors, bootpc_adjust_interface error, and of
> course "st.sys" script not being found. Peculiar enough, I can perform NFS
> mount and run a script from there. It doesn't work smoothly however and
> nfsMountsShow output is odd:
>
> Cexp>nfsInit(0,0)
> RTEMS-NFS, Till Straumann, Stanford/SLAC/SSRL 2002, See LICENSE file for
> licensing info.
> 0x00000000 (0)
> Cexp>nfsMount("10.0.1.1","/srv/tftp/rtems-5","/common")
> Trying to mount 10.0.1.1:/srv/tftp/rtems-5 on /common
> RTEMS-RPCIOD, Till Straumann, Stanford/SLAC/SSRL 2002, See LICENSE file for
> licensing info.
> 0x00000000 (0)
> Cexp>nfsMountsShow(0)
> Currently Mounted NFS:
> 10.0.1.1:/srv/tftp/rtems-5 on /
> 0x00000000 (0)
>
> ====================
> Conclusion
>
> To conclude that, I'd be happy to hear any suggestions and insights to the
> procedure described. It might be something as obvious as missing an option
> somewhere. It would be also great if anyone who has a working
> RTEMS+Cexp+GeSys setup would share instructions on how to make it work
> properly.
>

I don't know if you ever worked this out for yourself. libnetworking
does not get a lot of usage in RTEMS-5.0. Heinz Junkes tells me that
he got EPICS-7 working on RTEMS-5 with PPC/MVME6100, but I don't know
if they use the cexp/gesys modules yet.

Gedare

> Best regards,
> Anton A. Derbenev
> NSLS-II
> Brookhaven National Laboratory
>
>
> _______________________________________________
> users mailing list
> users at rtems.org
> http://lists.rtems.org/mailman/listinfo/users


More information about the users mailing list