ラベル 開発環境 の投稿を表示しています。 すべての投稿を表示
ラベル 開発環境 の投稿を表示しています。 すべての投稿を表示

2014-11-25

OpenBlocks IoT BX1 ハンズオン開催中

OpenBlocks IoT BX1のハンズオンDayを正式にスタートしました。

今週より、BX1本体およびDockBoard(ES版)との組み合わせにてご利用いただけます。

 
天王洲アイル、Samurai Startup Islandにて毎週水曜日(10:00-18:00)に開催。
予約制となりますので、以下の開催概要にそってご予約下さい。
当日でも空いていれば予約可能です。

現在ほぼマンツーマンのハンズオンとなっており、使用できるセットも限られているため、多人数となる場合は、早めにご連絡いただき、機材などの調整をさせてください。


------

「ハンズオンDay」開催概要

  • 実施内容
    当社IoT向けマイクロサーバー「OpenBlocks® IoT BX1」を使用したハンズオンです。
    実際にOpenBlocks® IoT BX1の実機や開発環境に触れながら基本操作の確認や、アプリケーション開発、システム構築に必要となる事項の事前サーベイなどが可能です。

    参考:OpenBlocks® IoT BX1特設サイトURL
    http://openblocks.plathome.co.jp/products/special/bx1_sp/
  • 対象となる方
    IoTのアプリケーション開発や、センサーデバイス接続開発、IoTサービス開発などを検討している方に最適です。
  • 開催スケジュール
    原則、毎週水曜日に実施致します。詳細なスケジュールは下記URLよりご確認下さい。
    http://goo.gl/vUxmwv
  • 参加方法
    機材の都合上事前予約が必要となります。開催スケジュールをご確認のうえ、当社WEBサイトの参加申込フォームよりお申込み下さい。

    参加申込フォームURL
    https://openblocks.plathome.co.jp/form/bx1_handson/input.html
  • 参加費用
    無料です。
  • 開催場所
    Samurai Startup Island
    住所:東京都品川区 東品川2-2-28 Tビル2F
    アクセス:天王洲アイル駅より徒歩5分
    http://samurai-startupisland.asia/access

2014-05-14

[.tested] express + socket.ioによるWebSocket実装方法について [debian Wheezy][AX3][A7][A6]

前回インストールした、node.js上でexpressおよびsocket.ioを使用した、Websocket通信のテストを行ってみました。
Aシリーズでのnode.jsのビルド方法については、前回の記事を参考にしてください。

[.tested] node.js [debian Wheezy][AX3][A7][A6]

<検証環境>
Debian 7.1 Wheezy
OpenBlocks AX3/4 kernel: 3.2.40
OpenBlocks A7 Ketnel 3.2.40

<使用機器>
OpenBlocks AX3 DPパッケージ (もしくは、SSD搭載モデル)
OpenBlocks A7 DPパッケージ (もしくは、SSD搭載モデル)

1. 導入前の準備


express 4.0以降、雛形を作成するexpressコマンドは分離されているため、express-generatorをインストールします。

# sudo npm install -g express-generator

2. socket.ioのサンプルプログラムの作成


下記の記事を参考に、chatのサンプルプログラムをexpress 4.0向けに導入してみました。


雛形を作成します。

# express -e sample

以下、sampleというディレクトリに雛形が作成されます。

package.jsonを以下の内容に修正します。
  socket.ioを追加することにより、npm installによりsocket.ioも組み込まれます。

{
  "name": "application-name",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "express": "~4.0.0",
    "static-favicon": "~1.0.0",
    "morgan": "~1.0.0",
    "cookie-parser": "~1.0.1",
    "body-parser": "~1.0.0",
    "debug": "~0.7.4",
    "ejs": "~0.8.5",
    "socket.io": "~*"
  }
}

bin/wwwにchatプログラム本体を記述します。
// add以下が追加される部分です。

#!/usr/bin/env node
var debug = require('debug')('my-application');
var app = require('../app');

app.set('port', process.env.PORT || 3000);

var server = app.listen(app.get('port'), function() {
  debug('Express server listening on port ' + server.address().port);
}); 

// add start
var socketIO = require('socket.io');
// クライアントの接続を待つ(IPアドレスとポート番号を結びつけます)
var io = socketIO.listen(server);

// クライアントが接続してきたときの処理
io.sockets.on('connection', function(socket) {
  console.log("connection");
  // メッセージを受けたときの処理
  socket.on('message', function(data) {
    // つながっているクライアント全員に送信
    console.log("message");
    io.sockets.emit('message', { value: data.value });
  });
  
  // クライアントが切断したときの処理
  socket.on('disconnect', function(){
    console.log("disconnect");
  });
});

クライアントサイドとして、views/index.ejsを作成します。

<script src="/socket.io/socket.io.js"></script>
<script type="text/javascript">
var socket = io.connect('http://接続するサーバのURLまたはIPアドレス:3000');
socket.on('connect', function(msg) {
  console.log("connet");
  document.getElementById("connectId").innerHTML = 
    "あなたの接続ID::" + socket.socket.transport.sessid;
  document.getElementById("type").innerHTML = 
    "接続方式::" + socket.socket.transport.name;
});

// メッセージを受けたとき
socket.on('message', function(msg) {
  // メッセージを画面に表示する
  document.getElementById("receiveMsg").innerHTML = msg.value;
});

// メッセージを送る
function SendMsg() {
  var msg = document.getElementById("message").value;
  // メッセージを発射する
  socket.emit('message', { value: msg });
}
// 切断する
function DisConnect() {
  var msg = socket.socket.transport.sessid + "は切断しました。";
  // メッセージを発射する
  socket.emit('message', { value: msg });
  // socketを切断する
  socket.disconnect();
}
</script>

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>

  <h1>socket.ioのサンプルプログラム</h1>
  <div id="connectId"></div>
  <div id="type"></div>
  <br>
  <input type="text" id="message" value="">
  <input type="button" value="メッセージを送る" onclick="SendMsg()">
  <input type="button" value="切断する" onclick="DisConnect()">
  <div id="receiveMsg"></div>

  </body>
</html>

必要なパッケージをインストールします。

# npm install

3. 動作確認


サーバを起動します。

# ./bin/www

Webブラウザを立ち上げ、以下のURLまたはIPアドレスを指定してアクセスしてください。

http://サーバのURLまたはIPアドレス:3000

複数のブラウザ画面を立ち上げ、相互に入力した文字が表示されることを確認してください。


4. さいごに


上記の手順により、Aシリーズ上でビルドしたnode.jsのsocket.ioモジュールによるWebSocket通信の確認を行いました。

今回は、express 4の場合、functionの定義方法などが異なるため、参考にしたサイトより、必要な部分だけを抜き出して利用させていただきました。

2014-05-09

[.tested] node.js [debian Wheezy][AX3][A7][A6]

node.jsはサーバサイドのJavaScriptインタプリタです。
今回は、node.jsのOpenBlocks Aシリーズへの導入を行いました。

<検証環境>
Debian 7.1 Wheezy
OpenBlocks AX3/4 kernel: 3.2.40
OpenBlocks A7 Ketnel 3.2.40

<使用機器>
OpenBlocks AX3 DPパッケージ (もしくは、SSD搭載モデル)
OpenBlocks A7 DPパッケージ (もしくは、SSD搭載モデル)

1. 導入前の準備


node.jsは、公式サイトからソースコードをダウンロードしてビルドを行います。
そのため、開発環境のインストールを行っておく必要があります。

OpenBlocks における開発環境構築手順について [debian Wheezy][AX3][A7][A6]

検索などをすると、npmのインストールのためにcurlを入れる事例などありますが、現状では、node.jsのインストールによりnpmもインストールされますので必要ありません。

2. node.jsのビルド


node.jsの公式サイトより最新のソースパッケージを入手してください。


以下の例は、2014/05/09時点での最新のバージョンです。

# wget http://nodejs.org/dist/v0.10.28/node-v0.10.28.tar.gz

展開します。

# tar xvzf node-v0.10.28.tar.gz
# cd node-v0.10.28

一般的には、ここでconfigureしてmakeするだけなのですが、Aシリーズの場合は、以下のパラメータを指定する必要があります。

AX3の場合

# ./configure --without-snapshot --with-arm-float-abi=hard

A7/6の場合

# ./configure --without-snapshot

また、A7/6の場合、一部のソースコードを修正する必要があります。

# vi deps/v8/src/arm/macro-assembler-arm.cc

以下のイタリック表記の3行を追加してください。

// We always generate arm code, never thumb code, even if V8 is compiled to
// thumb, so we require inter-working support
#if defined(__thumb__) && !defined(USE_THUMB_INTERWORK)
#error "flag -mthumb-interwork missing"
#endif

// ADD THESE THREE LINES TO macro-assembler-arm.cc

#if !defined(CAN_USE_THUMB_INSTRUCTIONS)
# define CAN_USE_THUMB_INSTRUCTIONS 1
#endif


// We do not support thumb inter-working with an arm architecture not supporting
// the blx instruction (below v5t).  If you know what CPU you are compiling for
// you can use -march=armv7 or similar.
#if defined(USE_THUMB_INTERWORK) && !defined(CAN_USE_THUMB_INSTRUCTIONS)
# error "For thumb inter-working we require an architecture which supports blx"
#endif

上記の修正および、configureの実行を行った後、makeを実行し、インストールします。

# make
# make install


3. 動作確認その他


インストール後、nodeコマンドを実行し動作を確認してください。

# node -v
v0.10.28

前述しましたが、npmは同時にインストールされます。


プロジェクト毎に必要なモジュールはインストールされますので、特にグローバルにインストールする必要はないようです。

*) 2014/05/12 expressに関しての記述は削除しました。

2014-04-25

[.tested] Tomcat7の導入について [debian Wheezy][AX3][A7][A6]

Apache Tomcatの導入方法について、若干のTipsも交えてご紹介します。



<検証環境>
Debian 7.1 Wheezy
OpenBlocks AX3/4 kernel: 3.2.40
OpenBlocks A7 Ketnel 3.2.40
OpenBlocks A6 kernel: 3.2.40

<使用機器>
OpenBlocks AX3 DPパッケージ (もしくは、SSD搭載モデル)
OpenBlocks A7 DPパッケージ (もしくは、SSD搭載モデル)
OpenBlocks A6 DPパッケージ (DPパッケージのみjavaライセンス付きでの出荷をしています)

1.Tomcat 7 のインストール


Apache Tomcat 7は、Debian Wheezyのパッケージとしても用意されていますが、合わせてOpenJDK6を導入してしまいます。
OpenBlocksシリーズは、Oracle Javaを標準搭載していますので(A6はDPモデルのみ)、Tomcatのパッケージのみを公式のサイトよりダウンロードしてインストールすることをおすすめします。

Apache Tomcat

# wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/tomcat/tomcat-7/v7.0.53/bin/apache-tomcat-7.0.53.tar.gz

/usr/localの下に展開します。

# tar zxpvf apache-tomcat-7.0.53.tar.gz -C /usr/local

setenv.shを作成します。

# vi /usr/local/apache-tomcat-7.0.53/bin/setenv.sh

下記の内容を記述してください。

#!/bin/bash
JRE_HOME=/usr/lib/jre
JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom"

JAVA_OPTSの設定は、linuxの/dev/randumの仕様によるもので、特にOpenBlocks A7の場合において、再起動時の環境ノイズの再収集時間に起因する起動遅延を解消するものです。
randomを使用する場合は、上記の記述を削除してください。(A7の場合30分程度、AX3の場合はばらつきがあり、20秒程度で立ち上がる場合もあれば、6分かかる場合もありました)

2. 動作確認および開発環境の構築について


手動での立ち上げは以下の様に行ってください。


# /usr/local/apache-tomcat-7.0.53/bin/startup.sh

ブラウザで動作確認をする場合は、以下のURLとなります。

http://URLまたはIPアドレス:8080


2014-04-23

[.tested] RXTXによるjavaのシリアル通信について [debian Wheezy][AX3][A7][A6]

RXTXライブラリを使用したjavaのシリアル通信を行う際のパッケージ導入方法について説明します。

<検証環境>
Debian 7.1 Wheezy
OpenBlocks AX3/4 kernel: 3.2.40
OpenBlocks A7 Ketnel 3.2.40
OpenBlocks A6 kernel: 3.2.40

<使用機器>
OpenBlocks AX3 DPパッケージ (もしくは、SSD搭載モデル)
OpenBlocks A7 DPパッケージ (もしくは、SSD搭載モデル)
OpenBlocks A6 DPパッケージ (DPパッケージのみjavaライセンス付きでの出荷をしています)

1. RXTXライブラリおよびlibrxtxSerialのインストール


それぞれ、Debainのパッケージによりインストールします。

# aptitude install librxtx-java
# aptitude install libserializer-java

RXTXライブラリを以下の場所にコピーします。

# cp /usr/share/java/RXTXcomm.jar /usr/lib/jre/lib/ext/

librxtxSerialを以下の場所にコピーします。

# cp /usr/lib/jni/librxtxSerial-2.2pre1.so /usr/lib/jre/lib/arm/librxtxSerial.so

2. 動作確認および開発環境の構築について


RXTXによるシリアル通信を行うのであれば、上記のセットアップにより、基本的には、他のプラットフォーム上で開発したclassファイルやjarファイルを実行できるかと思います。

OpenBlocks上で開発も行う場合は、一つの方法としては、Debianのパッケージより、java7-jdkなどを導入する方法があります。( 導入されるのはopenjdkです )

# aptitude install java7-jdk

java7-jdkにも、librxtxSerialが含まれますので、こちらを使用する場合は、libserializer-javaの導入の必要はありません。

作成したプログラムは、以下のようにjavacにてクラスファイルに変換してください。

# javac -cp /usr/lib/jre/lib/ext/RXTXcomm.jar test.java

2014-04-18

OpenBlocks Aシリーズ rootfs変更方法 (SSD(SATA)ブート) [debian Wheezy][AX3][A7][A6]

OpenBlocks Aシリーズのカーネルの起動をSSD(SATA)から行う方法について

本機能は、OpenBlocksの機能の一部として実装されているものですが、当社の提供する標準のパッケージ構成ではないため、動作の保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。

<検証環境>
Debian 7.1 Wheezy
OpenBlocks AX3/4 kernel: 3.2.40
OpenBlocks A7 Ketnel 3.2.40
OpenBlocks A6 kernel: 3.2.40

<使用機器>
OpenBlocks AX3 DPパッケージ (もしくは、SSD搭載モデル)
OpenBlocks A7 DPパッケージ (もしくは、SSD搭載モデル)
OpenBlocks A6 DPパッケージ (もしくは、SSD搭載モデル)

1. SSDの準備


SSDを用意します。もし、標準構成でDEBIANのラベルを設定済みでしたら、ラベルを削除し、本体を再起動してください。

# e2label /dev/sda1 ""

再起動後、ラベルを/に変更します。
を再起動してください。

# e2label /dev/sda1 /

ファイルシステムは、現在のAシリーズはすべてext4を採用していますが、ubootがカーネルの起動を行うドライブは、ext3までしか対応していません。
再フォーマットが必要な場合は、以下の通り、ext3などを使用してください。

# mke2fs -j -L "/" /dev/sda1

2. debootstrapによるrootfsの作成と修正


rootfs は、以下の記事と同様に、debootstrapで作成しました。詳細については、以下の記事を参考にしてください。

OpenBlocks Aシリーズ rootfs変更方法 (FlashROMブート) [debian Wheezy][AX3][A7][A6]

3. SSDブート用のファームウェアの作成


SSDブート用ファームウェアは、LinuxであればPCでもAシリーズでも作成することができます。
  1. FTPサイトよりSSDブート用のラムディスクイメージを取ってきます。

    A6/A7 : ftp://ftp.plathome.co.jp/pub/ssdlinux/1.0.0-LATEST/arm-obsa6/installation/ramdisk.image-extboot.obsa6.gz

    AX3 : ftp://ftp.plathome.co.jp/pub/ssdlinux/1.1.0-LATEST/arm-obsax3/installation/ramdisk.image-extboot.obsax3.gz

  2.  FTPサイトよりカーネルを取ってきます。

    A6 : ftp://ftp.plathome.co.jp/pub/OBSA6/wheezy/3.2.40-3/zImage

    A7 : ftp://ftp.plathome.co.jp/pub/OBSA7/wheezy/3.2.40-4/zImage

    AX3 : ftp://ftp.plathome.co.jp/pub/OBSAX3/wheezy/3.2.40-4/zImage
  3. uboot-mkimageパッケージをインストールします。

    # apt-get install uboot-mkimage

    
    
  4. mkimageコマンドでSSDブート用ファームウェアを作成します。

    AX3の場合(A6/A7ではラムディスク名とファームウェア名を変更します)

    # mkimage -n "コメント(日付やバージョンなど)" -A arm -O linux -T multi -C none -a 0x8000 -e 0x8000 -d zImage:ramdisk.image-extboot.obsax3.gz uImage.initrd-extboot.obsax3

  5. rootfsの/bootにSSDブート用ファームウェアをコピーします。

    AX3でSSDがsda1の場合

    # mount /dev/sda1 /mnt
    # cp uImage.initrd-extboot.obsax3 /mnt/boot
    # umount /mnt

  6. rootfsとするパーティションのラベルを"/"にします。

    rootfsが/dev/sda1の場合

    # e2label /dev/sda1 /
3. ブート方式の切り替え


ユーザーズマニュアルを参考に、本体のDIP SW3をONにして立ち上げます。(SATA起動)
SATA起動に切り替えた場合のconsoleメッセージは以下の通りです。

U-Boot 1.1.4 (Feb  5 2014 - 12:38:30)
Plat'Home version: 1.2.13 A7 (Base: Marvell version: 3.5.9)

U-Boot code: 00600000 -> 0067FFF0  BSS: -> 006CF480

Soc: 88F6282 A1CPU running @ 600Mhz L2 running @ 300Mhz
SysClock = 300Mhz , TClock = 200Mhz

DRAM (DDR3) CAS Latency = 6 tRP = 5 tRAS = 15 tRCD=5
DRAM CS[0] base 0x00000000   size 256MB
DRAM CS[1] base 0x10000000   size 256MB
DRAM CS[2] base 0x20000000   size 256MB
DRAM CS[3] base 0x30000000   size 256MB
DRAM Total size   1GB  16bit width
Addresses 8M - 0M are saved for the U-Boot usage.
Mem malloc Initialization (8M - 7M): Done
NAND:256 MB
POST:  mac verify Eth0 PASSED Eth1 PASSED

CPU : Marvell Feroceon (Rev 1)

Streaming disabled
Write allocate disabled

Module 0 is RGMII

USB 0: host mode
USB 1: host mode
USB 2: host mode
USB 3: host mode
Net:   egiga0, egiga1
Hit any key to stop autoboot:  0

Run Boot Selection Script

*** SW 1 IS OFF ***

*** SW 2 IS OFF ***

*** SW 3 IS ON, Boot from SATA ***


Reset IDE:
Marvell Serial ATA Adapter
Integrated Sata device found
[0 0 0]: Enable DMA mode (6)
  Device 0 @ 0 0:
Model: ADATA SSD S396 30GB                    Firm: 3.3.2    Ser#: 02501132500100000227
            Type: Hard Disk
            Supports 48-bit addressing
            Capacity: 30533.8 MB = 29.8 GB (62533296 x 512)


Loading ...

2926770 bytes read
Bootargs: ramdisk_size=8192 root=LABEL=/ vmalloc=200M rootdelay=7 mtdparts=nand_mtd:0x1c0000@0x0(uboot)

ro,0x2c0000@0x1c0000(env),0x160000@0x480000(test)ro,0x540000@0x5e0000(conf),0x3d40000@0xb20000(linux),0x9660000@0x4860000

(user),0x2140000@0xdec0000(opt) console=ttyS0,115200
## Booting image at 02000000 ...
   Image Name:   OBS-A7-3.2.40-4
   Created:      2014-04-18   2:37:42 UTC
   Image Type:   ARM Linux Multi-File Image (uncompressed)
   Data Size:    2926706 Bytes =  2.8 MB
   Load Address: 00008000
   Entry Point:  00008000
   Contents:
   Image 0:  2542808 Bytes =  2.4 MB
   Image 1:   383886 Bytes = 374.9 kB
   Verifying Checksum ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Linux version 3.2.40 (root@release-firmware) (gcc version 4.7.2 (Debian 4.7.2-4) ) #1 Fri Mar 7 16:24:48 JST 2014
CPU: Feroceon 88FR131 [56251311] revision 1 (ARMv5TE), cr=00053977
CPU: VIVT data cache, VIVT instruction cache
Machine: Plat'Home OpenBlocks A7
Memory policy: ECC disabled, Data cache writeback
BUG: mapping for 0xf4000000 at 0xf4000000 overlaps vmalloc space
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 260096
Kernel command line: ramdisk_size=8192 root=LABEL=/ vmalloc=200M rootdelay=7 mtdparts=nand_mtd:0x1c0000@0x0(uboot)

ro,0x2c0000@0x1c0000(env),0x160000@0x480000(test)ro,0x540000@0x5e0000(conf),0x3d40000@0xb20000(linux),0x9660000@0x4860000

(user),0x2140000@0xdec0000(opt) console=ttyS0,115200
PID hash table entries: 4096 (order: 2, 16384 bytes)
Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
Memory: 1024MB = 1024MB total
Memory: 1033400k/1033400k available, 15176k reserved, 229376K highmem

電源を入れ直すか、bootと入力して起動してください。

4. 補足


SATA起動は、ext3以前のファイルシステムをサポートしており、現状では、ext4でフォーマットされたドライブからの起動が出来ません。
rootfsをext4で使用したい場合は、起動用のパーティションとして、/dev/sda1を、rootfs用のパーティションとして/dev/sda2を別に作成して使用してください。


2014-02-27

OpenBlocks における開発環境構築手順について [debian Wheezy][AX3][A7][A6]

Debian Wheezy環境でのソフトウェア評価記事に関してのインデックスを右のタグから飛べるソフトウェア動作検証のページにまとめました。

また、当ブログでは、OpenBlocksの開発環境はすでにあるものとして記事を書いてきましたが、DPモデルではない、SSDオプションとの組み合わせや、USBおよびeSATA(AX3モデルのみ)の外付けストレージデバイスを使用した場合の環境構築方法にいての一連の手順を、本記事にまとめて上記ページよりリンクしておきます。

1. ストレージデバイスの用意


本体内蔵のSSDオプションを用意するか、もしくは、USB,eSATA(AX3のみ)ポートにストレージデバイスを接続します。

<内蔵ハーフサイズSSD>

<内蔵2.5inchSSD>

 <外付けUSBデバイス例>

2.パーティションの設定とフォーマット


fdiskによりパーティションを作成します。

# fdisk /dev/sda
Using /dev/sda
Command (m for help): o
Command (m for help): n
Partition type
   e   extended
   p   primary partition (1-4)
p
First cylinder  (default 0cyl): (Enter key)
Last cylinder or +size or +sizeMB or +sizeKB  (default 991cyl): (Enter key)
Warning: You requested a partition from 0cyl to 991cyl.
The closest location we can manage is 0cyl to 990cyl.  Is this still acceptable to you?
   y   Yes
   n   No
y
Command (m for help): w
Information: Don't forget to update /etc/fstab, if necessary.

Writing all changes to /dev/sda.

mke2fsによりフォーマットを行い、ボリュームラベルとしてDEBIANを設定します。

# mke2fs -j -L DEBIAN /dev/sda1
mke2fs 1.42.5 (29-Jul-2012)
Filesystem label=DEBIAN
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
991232 inodes, 3964030 blocks
198201 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4060086272
121 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done.

2. 起動後の確認


以下の例では、内蔵のSSD(/dev/sda)が接続された状態で、外付けのUSBメモリにボリュームラベルとしてDEBIANを設定していますので、/dev/sdb1が使用されています。

# mount
/dev/root on / type ext2 (rw,relatime,errors=continue,user_xattr,acl)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=51132k,mode=755)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev type tmpfs (rw,relatime,size=10240k,mode=755)
tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=102260k)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620)
/dev/sdb1 on /.rw type ext3 (rw,relatime,errors=continue,user_xattr,acl,barrier=1,data=ordered)
aufs on /etc type aufs (rw,relatime,si=57e9d387)
aufs on /bin type aufs (rw,relatime,si=57e9d987)
aufs on /home type aufs (rw,relatime,si=57e9de87)
aufs on /lib type aufs (rw,relatime,si=57e9df87)
aufs on /sbin type aufs (rw,relatime,si=57e9dc87)
aufs on /usr type aufs (rw,relatime,si=57e9d287)
aufs on /var type aufs (rw,relatime,si=57e9d687)
aufs on /root type aufs (rw,relatime,si=57e9d087)
aufs on /opt type aufs (rw,relatime,si=57e9d887)
aufs on /srv type aufs (rw,relatime,si=57e9db87)
aufs on /media type aufs (rw,relatime,si=45009587)

3. 環境の設定


一連の手順はユーザマニュアルに記載があります。
私がいつも行う手順は以下の通りです。

ネットワークの設定

# vi /etc/network/interfaces

DHCPによりアドレスを取得する場合

auto eth0
iface eth0 inet dhcp

固定アドレスを割り振る場合 ( アドレスはお使いのものに置き換えます)

auto eth0
iface eth0 inet static
     address 192.168.254.254
     network 192.168.254.0
     netmask 255.255.255.0
     broadcast 192.168.254.255
     gateway 192.168.254.1

設定後再起動するか、ifdown / ifup コマンドでネットワークインターフェースの設定を反映させます。

インストール可能なパッケージ情報の更新


#aptitude update


インストール済みパッケージの更新


#aptitude safe-upgrade

インストール済みのdebianの各種パッケージおよび、本体ファームウェアについても最新のものがリリースされていれば更新されます。

タイムゾーンの設定

# dpkg-reconfigure tzdata

ロケールの設定

# aptitude install locales
# dpkg-reconfigure locales

特にポリシーがないならば、ja_JP.UTF-8で設定しておくことをお勧めします。
また、日本語の扱いなどが必要ないならば、デフォルトのままでも構いません。

4. 開発環境の構築


 よく利用されるツール一式をインストールします。

# tasksel install standard

開発ツール一式をインストールします。(debianのパッケージ開発ツール)

# aptitude install build-essential

Webアプリケーションなどを構築する際のLAMP環境、Ruby環境などについては別途必要なものをインストールしてください。
いくつかのパッケージのインストール手順に関しては、本blogでも事前準備として記述していますので、参考にして下さい。

5. さいごに


今回は、ディスク共有モードでの一連の開発を行うための環境構築について説明をしました。
RAMディスクモードにおいて、ファームウェアや各種ランタイムプログラムを再構築する手順に関しては、以下の記事において解説しています。

OpenBlocks ファームウェア作成ガイドをgithubにて公開しました


2013-07-25

[.tested] LXC 0.8.0-rc1 [Debian Wheezy][AX3][A6]



LXCはOSレベル仮想化ソフトウェアであり、VTを持たないOpenBlocks Aシリーズにおいても導入が可能です。 仮想化環境はクラウド環境を支える技術ですが、OpenBlocksのようなマイクロサーバ環境においても、コンテナ上で開発環境を構築することにより、開発環境の初期化や複製が簡単に行え、ミドルウェアのバージョンの違いによる環境の再構築などの作業も軽減出来ます。

このパッケージに関しては、、Debian 6.0 (Squeeze) 環境では、以下の記事においてlxc-0.7.5をビルドして評価を行っています。

 OpenBlocks AX3でLXCによる仮想化を試してみる

今回は、Debian 7.1環境ににおいてパッケージ提供される、lxc-0.8.0-rc1の導入について、その手順を報告します。

( 7/23 追記 )
Debian 7.1正式版が公開されましたので、再度検証しました。
Debian 7.1環境でlxcパッケージを試される方は、 上記リンクより、リリース版のファームウェアをご利用下さい。

OBDN技術ブログによる動作検証は、該当するソフトウェアの動作を保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。

<検証環境>
Debian 7.1 Wheezy
OpenBlocks AX3/4 kernel: 3.2.40
OpenBlocks A6 kernel: 3.2.40

<使用機器>
OpenBlocks AX3 DPパッケージ (もしくは、SSD搭載モデル)
OpenBlocks A6 DPパッケージ (もしくは、SSD搭載モデル)

1. カーネルの再構築


AX3の場合はカーネルの再構築は必要ありません。
A6の場合は、devptsが組み込まれていないため、再構築の必要があります。

A6のカーネル再構築のためには、開発環境が必要になります。
ユーザマニュアルに書かれた、タイムゾーン等の最初の設定、標準ツールのインストールに加え、基本的な開発環境をインストールしてください。

# aptitude install build-essential

また、ファームウェア構築のためには、mkimageが必要となります。

# aptitude install uboot-mkimage

当社ftpサイトより、カーネルソースファイルと、A6に対応したramdiskイメージを入手し、展開してください。

# cd /usr/src
# wget ftp://ftp.plathome.co.jp//pub/OBSA6/wheezy/3.2.40-0/linux-3.2.40-20130710-2.tar.gz

# tar xvzf  linux-3.2.40-20130710-2.tar.gz

A6のramdiskイメージ
# wget  ftp://ftp.plathome.co.jp//pub/OBSA6/wheezy/3.2.40-0/ramdisk-wheezy.obsa6.img.lzma

/usr/src/linux-3.2.40/arch/arm/configs/obsa6_defconfig
を編集します。

# diff -u obsa6_defconfig.org obsa6_defconfig
--- obsa6_defconfig.org 2013-07-23 13:55:33.000000000 +0900
+++ obsa6_defconfig     2013-07-23 13:56:47.000000000 +0900
@@ -1764,7 +1764,7 @@
 CONFIG_HW_CONSOLE=y
 # CONFIG_VT_HW_CONSOLE_BINDING is not set
 CONFIG_UNIX98_PTYS=y
-# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=16
 # CONFIG_SERIAL_NONSTANDARD is not set

上記のconfig情報を元に、カーネルの再構築を行います。

# cd /usr/src/linux-3.2.40
# make obsa6_defconfig arch=ARM oldconfig
# make zImage modules
# make modules_install

上記作業が終了したら、ファームウェアイメージを作成します。

# cd /usr/src
# gzip -9 < linux-3.2.40/arch/arm/boot/zImage > zImage.gz
# mkimage -n "OBSA6LXC 3.2.40" -A arm -O linux -T multi -C gzip -a 0x8000 -e 0x8000 -d zImage.gz:ramdisk-wheezy.obsa6.img.lzma uImage.initrd.obsa6

ファームウェアをFlashROMへ書き込みます。

# flashcfg -y -f uImage.initrd.obsa6

上記の作業に関しては、作業内容をご理解の上、自己責任の元に慎重に行ってください。
なお、現行ファームウェアと同様、正式なリリース時には上記変更を行ったカーネルへのアップデートが行われる場合もあります。

2. lxc-0.8.0-rc1およびオプションパッケージのインストール


debian 7.0 Wheezyにて提供される、lxcのバージョンは、0.8.0-rc1であり、今回はこのパッケージを導入します。
また、ネットワーク設定において、bridge-utilsが必要になります。

# aptitude install lxc bridge-utils

3. cgroupのマウント設定


/etc/fstabへ以下の行を追加します。

cgroup  /sys/fs/cgroup  cgroup  defaults  0   0

rebootするか、mount -aにてマウントを行ってください。

4. カーネルの構成チェック


カーネルがlxcを実行するために問題ない構成になっているかを、チェックします。
先にカーネルの構成情報をアップデートします。

# modprobe configs

# lxc-checkconfig
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled

--- Control groups ---
Cgroup: enabled
Cgroup namespace: CONFIG_CGROUP_NSmissing
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled

--- Misc ---
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
File capabilities: enabled

Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig

Cgroup namespaceはCONFIG_CGROUP_NSのようですが、Linux Kernel 3.0以降では削除されているようなので無視します。

5. ネットワーク設定


/etc/network/interfaces より、eth0の記述を削除し、以下の記述を追加します。
固定アドレスにする場合は、dhcpではなく、staticに書き換え、必要な設定を追加してください。

auto br0
iface br0 inet dhcp
bridge_ports eth0

6. コンテナの作成


以下のコマンドでコンテナを対話的に作成することが出来ます。

# lxc-create -n test -t debian

ただし、そのままではうまく動作しません。
/var/lib/lxc/<コンテナ名>/configに以下の行を追加し、

lxc.devttydir                           = lxc

/var/lib/lxc/<コンテナ名>/rootfs/etc/securettyの以下の記述を変更してくささい。

lxc/console
lxc/tty1
lxc/tty2
lxc/tty3

また、別の方法としては、ここを参考にして、コンテナを作成する方法もあります。
この場合は、修正は特に必要ありません。

Usage: lxc-debian.sh <distribution> <container-name> <container-number>

# wget https://gist.github.com/raw/3008518/e3b87deb423ace3c67628fe501af79d46d9de04c/lxc-debian.sh
# chmod +x lxc-debian.sh
# ./lxc-debian.sh wheezy test 2

後述しますが、どちらの方法で作成したコンテナにおいても、inittabにおいて、consoleにgettyを割り付けることにより、起動+オペレーションが可能になります。


7. ゲストOSの起動、コンソール操作、停止、コピー


・ゲストOSの起動

# lxc-start -d -n test

起動のテストをする場合は、-dオプションを外して起動すると、エラー等の確認が出来ます。
そのままコンソールを出してオペレーションしたい場合は、 コンテナ内の/etc/inittabに、以下の行を追加してください。
立ち上げ前に作業する場合は、/var/liv/lxc/<コンテナ名>/rootfs/etc/inittabを編集します。

c0:2345:respawn:/sbin/getty 38400 console

上記の設定を行なわない場合は、別のコンソールからはlxc-consoleコマンドでログインします。

・コンソールへの接続

# lxc-console -n test

Ctrl+a q でコンソール操作を停止します。

・ゲストOSの停止

# lxc-stop -n test

・ゲストOSのコピー
 環境によっては、rsyncをインストールする必要があります。

# lxc-clone -o test -n test2

このコマンドは、環境をコピーしますが、新たに作成されたconfigが元の環境の設定そのままであるため、新たにコピーされたrootfsが指定されていません。
そのため、config内のコンテナ名を全て新しいコンテナ名に書き換える必要があります。

8.さいごに


今回、Debian 7.1(wheezy)環境でのインストール、起動の確認を行いました。
今後、上記環境を利用した、ソフトウェア検証等を行っていく予定です。

2013-02-13

USBシリアルコンバータを使用したコンソール接続について

ノートPCをOpenBlocksのコンソールにする場合、よほど古いものを使わない限り、RS-232Cの口がないため、USBシリアルインタフェースを使う必要があります。

自分の場合も、通常はRATOCのREX-USB60F(FTDI chip)を使用しているのですが、先日出張先のどこかで置いてきてしまい、同じものを買うのも悔しいので、秋葉原でノーブランドのUSBシリアルコンバータ(PL2303)を買ってきました。



PCはWindows7で、Prolificのドライバは自動で導入されます。また、Prolificのサイトからドライバ一式をダウンロードしてドキュメントを読むと、Windows7の場合は、ネットワーク越しのupdateで最新版が適用されるようです。

ご存知の方も多いとは思いますが、このchipsetを使ったUSBシリアルコンバータは、115200bpsで使用するとデータを落としやすいという話が多く、今回使用したモジュールでも、Teratermの使用では度々障害が出ました。
ただ、puttyで使用する限りは問題なく使えていますので、このモジュールを使用する場合はputtyを使用してください。

PuTTY: A Free Telnet/SSH Client

--
*2/27 puttyなら問題なく使えるという指摘がありましたので、puttyで検証し、訂正しました。

2012-06-21

OpenBlocks A Familyの開発環境やportingの状況

現在、当社からA Family向けに提供する開発環境は、以下の通りです。

OpenBlocks AX3シリーズ
Kernel version: 3.0.6
Distribution: Debian 6.0 または SSD/Linux
OpenBlocks A6シリーズ
Kernel version: 2.6.31.8
Distribution: Debian 6.0 または SSD/Linux

また、AX3シリーズには、Java SE for Embedded (6または7)をパッケージしたモデルが用意されます。

その他の状況に関してですが、

上記以外のLinux/ARM Distribution
・Ubuntu
http://www.ubuntu.com/download/arm
Marvell Armada-XPをサポートしています。検証してみたい方はご連絡下さい。
・Fedra
ARM Projectがあります。こちらではまだ検証していません。検証してみたい方はご連絡下さい。
・CentOS
Redsleeveがありますが、まだ検証していません。
http://www.redsleeve.org/

BSD系OS
7月のopenbsd hackathonにて、AX3を持ち込んで貰う予定です。
その他、netbsdや、FreeBSDなど、開発/検証を考えている方はご連絡下さい。

・その他DebianのARMツリーにないパッケージのporting状況
Vyatta のLinux/ARMへのportingは試していません。
Astariskのportingもまだ試していません。SIP Phone、どこかで借りてこないと。
etc, etc

つまりは、ちょっとportingしてみるからハード貸して、という方は、gotoまでご連絡下さい、というオチです。
ポーティングの状況については随時このブログにてご報告します。

2012-05-23

【最新ITトピック】 低価格ボードコンピュータの流れが来るか。Raspberry Piに続き、VIAから$49のAndroid PC

VIAから$49のSoCベースのボードコンピュータが発表されました。

APC

前にこのblogでRaspberry Piを紹介したときも書きましたが、同様のSoCベースのメディアプレーヤのサンプル価格をAribabaなどで調べれば分かる通り、基板のみの価格としてはあまり捻りのない製品とも思います。

また、元がNPOがサポートするFedra/LinuxベースのRaspberry Piと比べると、まだ提供される開発環境やその体制が見えないため、何に使うかと問われれば、明確な利点が見出せません。

Android開発者にとっては、完成品の安価なAndroidタブレットが数多くありますし、
メディアプレーヤ向けの性能を堪能したいなら、同等品のメディアプレーヤの完成品は7000円ですばらしいものが買えますし、AppleTVだって8800円です。

現状では、Linuxでの学習に最適なポジションを得たRasberry PIに比べると、このボードは、若干安価なAndroidターゲットのベアボードとしか映りません。

ただ、VIAがリリースするなら流通に流れるのは早いですね。

2012-05-17

FreeBSDハンドブックをkindleで

作ってみたら割と便利そうなので、メモを置いておきます。

・なぜKindleか
E-ink端末ですので、バッテリーの持ちが桁違いです。無線オフで約1ヶ月というスペックは、ドキュメントリーダとして、バッテリー寿命を気にすることなく使うことが出来るということです。
また、最新のKindle4は非常にコンパクトです。

・何をどうするのか
HTMLで作られたドキュメントをKindleが食えるmobi形式にします。

今回は、FreeBSDハンドブックを以下のサイトからダウンロードしました。
ftp://ftp.freebsd.org/pub/FreeBSD/doc/ja/books/handbook/

・手順
 Kindle Personal Document Serviceもありますが、今回はオフライン作業を行います。

以下のサイトを参考にしてください。

Kindle 電子書籍の作り方まとめ

今回使ったツールはこちら
Mobipocket Creater

ここに解凍したファイルを指定して、変換し、本体に転送するだけで、とりあえず以下の画面までは出るようになります。
(Kindle4まではUSBケーブルにより直接picturesディレクトリ下にコピーします。touchの場合は、メール経由で転送します)



自分で使うだけならこのままでいいかとも思いますが、もう少し体裁を整えて読みやすくするといいかもしれません。

なお、通常のテキストドキュメントに関しては、
ChainLP
というツールにより、テキスト->PDF変換を行っています。
今回OSC名古屋のライトニングトークでも使っていましたが、スピーチの原稿等を入れておくと便利ですね。

2012-04-25

Kinesis キーボードについてのメモ

当社では、かつてKinesisキーボードの輸入販売を行っていました。
正式な代理店ではありませんが、パーツ単位での供給も受け、簡単な修理も行っていました。

ただ、日本で誰が最初にKINESISキーボードを紹介したのか、ということに関しては、記録が見つかりません。
今分かっているのは、当社が最初に取り扱ったきっかけは自分ではなく、当時の店舗に来て頂いていた、とあるISPに所属される方からの依頼であるということです。
その方から腱鞘炎のために指を下げた状態で使うキーボード、つまりはKINESISが手に入らないかという話を聞き、当時は本多のオヤジさんの何でも入れてみろという方針もあり輸入を開始したのです。
おそらくその方の依頼がなければ、取り扱うことがなかったか、もしくは、取り扱いがもう少し先になったと思います。

現在は、国内に正規の代理店があります。
http://www.edikun.co.jp/kinesis/index.htm
一部の分離型キーボード(オリジナルのエルゴノミクス形状ではない)はサンワサプライでも扱いがあります。
【ぷらっとオンライン】サンワサプライ エルゴキーボード (SKB-ERG2)

ちなみに、HHK / HHK Liteについては面白いエピソードがあるのですが、それを書くことがないことを祈っています。

2012-03-29

ウィルキンソンジンジャーエールPET、今度は大丈夫(いや何が?)

昨日この件を書くのをすっかり忘れていました。

ついに解禁『ウィルキンソン ジンジャエール』PETで新発売!

これで、リターナル瓶の処理に困ることもありません。
近くのコンビニで買えるので、早速試しましたが、今回は大丈夫(だから何が、と)で、早速箱買いに走った猛者もいるようです。

なぜにウィルキンソンジンジャーエール? と思われる方も多いと思います。
実は、昔ぷらっとホームの店舗にはウィルキンソンジンジャーエール(無印瓶)が常備されていました。
それは建前上は「自分が飲むため」で、定期的に秋葉原の赤塚酒店より配達されていました。
ただ、限りなくフリーアクセスに近い形で置いてあり、料金箱にお金さえ入れて置けば勝手に飲めるようになっていました。
ウィルキンソンジンジャーエールだけ飲みに来た、という人もいたはず。

ちなみに、商品の仕入れとして買うわけではないので、購入価格のまま、としていましたが、次の配達で支払い分に足りない、ということは一度もありませんでした。
ひと昔ほど前の、良き秋葉原時代の思い出です。

2012-03-27

【最新ITトピック】 How Emacs changed my life

今年のFSF Award for the Advancement of Free Softwareは、Rubyの生みの親、まつもとゆきひろさんが受賞されました。アジア人としても初、とのこと。
受賞式での発表のスライドが公開されています。非常にシンプルですが、それだけに思いを強く感じます。

How Emacs changed my life

2012-03-13

【最新ITトピック】 Androidマーケットを巡るビジネス判断

先ごろから、Androidに関しての悪い話が続いていますが、これはどうなのでしょうか。
 
ITmedia: 「Androidはもうからない」――人気ゲームメーカーが開発終了を発表: ITmedia

撤退するにはいくつかの理由があると思いますが、Android向けのアプリケーション開発は、OSのバージョンの違い、スペックの違いなど、機種毎に調整する項目が多すぎて、手間がかかること、一般的に言われていることですが、App Storeのユーザと違い、Androidマーケットのユーザはあまり有料アプリにお金を払わないことなどがあります。
そして、そのような開発環境上の不備があるにも関らず、ここに来て3D対応などに伴うアプリサイズの上限変更など、F1でいうところのレギュレーションの上方修正をしてきた、と。
他のゲームコンソールでもあったスペックのインフレには体力的に対応できないという話。
ただ、単純にAndoroidだけの話だとは思いません。モバイル端末向けアプリも別のステージに立たされているだけの話だと思います。