Skip to main content

Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "Mihini/Run Mihini on an Open Hardware platform"

(Step 7 - Install your application over the air)
Line 126: Line 126:
 
* Create a launch/debug configuration and test your script
 
* Create a launch/debug configuration and test your script
  
= Step 7 - Install your application over the air =
+
= Step 7 - Install your application =
 +
 
 +
== Over the air ==
  
 
* Use the Koneki tools to create an application package
 
* Use the Koneki tools to create an application package
Line 132: Line 134:
 
* Connect to the Mihini console and for a connection to the testing server
 
* Connect to the Mihini console and for a connection to the testing server
  
 +
== Manually ==
 +
 +
All you a have to do in order to enable Mihini to handle you application is:
 +
# Create a launcher
 +
# Provide sources
 +
 +
=== Create a launcher ===
 +
 +
Mihini ''Application container'' runs executables. To run a Lua application, we need to set some variables beforehand and then lauch ou application. In order to do so lets create the proper launcher.In the Mihini world, it is an <em>executable file called <code>run</code></em>. Here is its content:
 +
<code><pre>#!/bin/sh
 +
 +
# Setting up paths
 +
export LUA_PATH="/home/pi/mihini/lib/?.lua;/home/pi/mihini/lib/?/init.lua;/home/pi/mihini/lua/?.lua;/home/pi/mihini/lua/?/init.lua;./?.lua"
 +
export LUA_CPATH="/home/pi/mihini/lib/?.so;/home/pi/mihini/lua/?.so"
 +
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/pi/mihini/lib"
 +
 +
# Running app
 +
/home/pi/mihini/bin/lua main.lua
 +
</pre></code>
 +
 +
Now the my application folder looks like
 +
<code><pre>$ find raspapp/
 +
raspapp/
 +
raspapp/run
 +
raspapp/main.lua
 +
</pre></code>
 +
 +
=== Install application ===
 +
 +
It is now time to install our application. Copy you app folder on your device.
 +
 +
<code>scp -r raspapp/ pi@raspberry.local:/tmp</code>
 +
 +
Now that your application is available on your device, lets install it. I suppose you already an Appmon Daemon running. We are about to install an app which will be named <em>'sample'</em>, available at <em>'/tmp/raspapp'</em>, this application will benefit from <em>autostart</em> ( the last <code>true</code> parameter ).
 +
<code><pre>$ telnet localhost 2000
 +
Trying 127.0.0.1...
 +
Connected to localhost.
 +
Escape character is '^]'.
 +
Lua interactive shell
 +
> appcon = require 'agent.appcon'
 +
> = appcon.install('sample', '/tmp/raspapp', true )
 +
= ok
 +
</pre></code>
 +
We can check that the application is properly installed
 +
<code><pre>
 +
> for app, t in pairs(appcon.list()) do
 +
+    print( app )
 +
+    for field, data in pairs(t) do
 +
+        print('\t', field, data)
 +
+    end
 +
+ end
 +
sample
 +
                autostart      true
 +
                runnable        true
 +
</pre></code>
  
 
= MISC. TIP & TRICKS =
 
= MISC. TIP & TRICKS =

Revision as of 13:12, 14 January 2013

This page describes a scenario for illustrating the use of Mihini on an Open Hardware Linux-based platform such as BeagleBoard or RaspberryPi.

The goal would be for someone to be able to be only one hour away from taking a bare development board and have it configured to collect data out of the GPIO sensors and send this data on a remote server. The application should be updatable over-the-air.

Step 1 - Build Mihini

  • Download the sources
  • Cross-compile (or compile directly on the target) the Mihini runtime
  • TODO at that stage, can we try to create a dpkg? That'd be very useful...

Step 1 (alternative) - Get a ready-to-use "Mihini for XXX" SD card binary image

  • Download a ready-to-use .img file and put it on the SD card used on the development board

Step 2 - Configure network connection

3G connection

Ethernet connection

  • Configure/verifiy that there is Ethernet connection as a fall-back

Step 3 - Configure Mihini

Compile Mihini

First of all you will need prerequisites sudo apt-get install git build-essential cmake Now get the sources

cd /tmp/
git clone ssh://host/mihini.git

Then there will be some configuration on agent/agent/defaultconfig.lua.

  • Enable the application container
    • appcon.activate = true in defaultconfig.lua
  • Enable the update manager
    • update.activate = true in defaultconfig.lua
  • OPTIONAL (but useful :)), enable Lua shell on all network interfaces by adding
    • shell.address = '*'

Now you can choose to compile directly on your device or cross compile it then send in to your device of choice. For the following sample a RaspberryPi has been used.

Compiling on device

Move the repository you just cloned to your device ( in my case using scp ). Installed the prerequisites mentioned above on your device and simply run the following in the repository you just copied.

#
# On raspberrypi itself
#
cd mihini/bin
./build.sh
#
# Compiling Lua
#
cd build.default/
make lua

Cross compiling

#
# Cross compiling
#

# Get linaro toolchain
cd /where/you/want/it
git clone https://github.com/raspberrypi/tools.git

# Define path to the arm toolchain you just downloaded
cd /tmp/mihini
vim cmake/toolchain.raspberrypi-linaro.cmake
cd bin/
./build.sh -t raspberrypi-linaro

#
# Compiling Lua
#
cd build.raspberrypi-linaro/
make lua

# Send all this on raspberrypi
scp -r runtime pi@yourPiIp:mihini


Start Mihini daemon on your device

One of the features of Mihini is to manage the life cycle of your application. In order to do so, applications are run from another program. We need to start it.

Manually

On your device ( here a Raspberry Pi)

$ cd mihini/bin/
$ sudo ./appmon_daemon -u pi -g pi && cd .. && ./start.sh

Notice: we launched appmon_daemon with user pi in order to benefit from valid user rights.

As a service

Step 4 - Setup Koneki environment

  • Download Lua Development Tools
  • Install "Mihini target management"
  • Define your device and configure its "SSH Lua" paths like this
    SshLuaConfiguration.png
    • If you want the text version
LUA_PATH: /home/pi/mihini/lib/?.lua;/home/pi/mihini/lib/?/init.lua;/home/pi/mihini/lua/?.lua;/home/pi/mihini/lua/?/init.lua;./?.lua
LUA_CPATH: /home/pi/mihini/lib/?.so;/home/pi/mihini/lua/?.so
LD_LIBRARY_PATH: $LD_LIBRARY_PATH:/home/pi/mihini/lib
  • Configure the "Mihini execution environment" (provides nice autocompletion...)

Step 5 - Create your first application

  • TODO (blink a LED, use a touch sensor, measure the temperature and available RAM of the board...)

Step 6 - Test the application

  • Configure the remote target in the Koneki environment
    • You will need to know the IP address of the target, but you likely know it already :-)
  • Create a launch/debug configuration and test your script

Step 7 - Install your application

Over the air

  • Use the Koneki tools to create an application package
  • Deploy the package on a publically available web server
  • Connect to the Mihini console and for a connection to the testing server

Manually

All you a have to do in order to enable Mihini to handle you application is:

  1. Create a launcher
  2. Provide sources

Create a launcher

Mihini Application container runs executables. To run a Lua application, we need to set some variables beforehand and then lauch ou application. In order to do so lets create the proper launcher.In the Mihini world, it is an executable file called run. Here is its content:

#!/bin/sh

# Setting up paths
export LUA_PATH="/home/pi/mihini/lib/?.lua;/home/pi/mihini/lib/?/init.lua;/home/pi/mihini/lua/?.lua;/home/pi/mihini/lua/?/init.lua;./?.lua"
export LUA_CPATH="/home/pi/mihini/lib/?.so;/home/pi/mihini/lua/?.so"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/pi/mihini/lib"

# Running app
/home/pi/mihini/bin/lua main.lua

Now the my application folder looks like

$ find raspapp/
raspapp/
raspapp/run
raspapp/main.lua

Install application

It is now time to install our application. Copy you app folder on your device.

scp -r raspapp/ pi@raspberry.local:/tmp

Now that your application is available on your device, lets install it. I suppose you already an Appmon Daemon running. We are about to install an app which will be named 'sample', available at '/tmp/raspapp', this application will benefit from autostart ( the last true parameter ).

$ telnet localhost 2000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Lua interactive shell
> appcon = require 'agent.appcon'
> = appcon.install('sample', '/tmp/raspapp', true )
= ok

We can check that the application is properly installed

> for app, t in pairs(appcon.list()) do
+     print( app )
+     for field, data in pairs(t) do
+         print('\t', field, data)
+     end
+ end
sample
                autostart       true
                runnable        true

MISC. TIP & TRICKS

  • You may want to have udev rules so as your USB devices (typically the 3G stick) does not end up having an always changing /dev/ttyUSB<something> file descriptor...
    • For a Sierra 3G stick, create a 99-aircard.rules in /etc/udev/rules.d, with the following rules (your ID_VENDOR_ID and ID_MODEL_ID may be different):

SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ENV{ID_VENDOR_ID}=="1199", ENV{ID_MODEL_ID}=="68a3", ENV{ID_USB_INTERFACE_NUM}=="03", SYMLINK+="ttyATConsole0" SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ENV{ID_VENDOR_ID}=="1199", ENV{ID_MODEL_ID}=="68a3", ENV{ID_USB_INTERFACE_NUM}=="04", SYMLINK+="ttyATConsole1"

TODO

Back to the top