最近Dropboxの容量が逼迫していたのですが,良さそうなサービスを見つけました.Copyというクラウドストレージです.
初期容量が15GB,誰かを紹介すると5GB増えるとの事.
導入はDropbox並に簡単でした.
ここにアクセス(修正:現在はサービス終了しています)して,First Name, Last Name, Email, passwordを入れるだけ.
最初から20GBのストレージが使用可能です.
Mac上での同期もDropbox並にできますし,iPadでも使用可能なアプリが用意されています.
2014年3月31日月曜日
2014年3月11日火曜日
Minix on BeagleBone Black
Minix 3.1.2がBeagleBone Blackで動くらしいが,どこにもイメージが置いてないので自分でやってみた.
MinixをARM用にcross buildするのだが,重要なのはMinixでやる訳ではないらしい.当方で用いた環境は以下のとおり.
結局のところ,buildは別として,BeagleBone Black用のSD imageを作成するために,FATとminixfsのファイルシステムをディスクイメージのファイル上に作成できる環境が必要ということらしい.ここで,最初にminix上で開発が始まったため,今でもminixfsをサポートしているLinuxのメリットが出てくる.
■ VirtualBoxでUbuntuの環境を整備
動いた!
MinixをARM用にcross buildするのだが,重要なのはMinixでやる訳ではないらしい.当方で用いた環境は以下のとおり.
- Mac (OS X 10.9.2)
- VirtualBox 4.3.8
- Ubuntu 12.04
結局のところ,buildは別として,BeagleBone Black用のSD imageを作成するために,FATとminixfsのファイルシステムをディスクイメージのファイル上に作成できる環境が必要ということらしい.ここで,最初にminix上で開発が始まったため,今でもminixfsをサポートしているLinuxのメリットが出てくる.
お気楽にVirtualBox用のディスクイメージをダウンロードする.パーティションサイズはだいたい64GB.これをメモリ512MBで設定する.
さらに,このページに従ってツールをいくつか追加する.
さらに,このページに従ってツールをいくつか追加する.
sudo apt-get install git sudo apt-get install zlibc zlib1g zlib1g-dev sudo apt-get install g++ |
■ Ubuntu上でARM Minixのbuild
gitでMinixのsource codeを丸ごと持って来る.
cd ~ mkdir Minix cd Minix git clone git://git.minix3.org/minix src cd src |
次に,src/releasetools/arm_sdimage.shを編集する.Webではshellで環境変数を設定すれば良いと書いてあったが,一度失敗したので実際にコメントアウトされているBeagleBone用の
U_BOOT_BIN_DIR=build/am335x_evm/
CONSOLE=tty00
CONSOLE=tty00
の2行を有効にし,現在有効になっているBeagleBoard用の2行をコメントアウトする.
releasetoolsの中にあるarm_sdimage.shでbuildする.
bash ./releasetools/arm_sdimage.sh |
/bin/shだと駄目だった.arm_sdimage.shは途中でFTPからU-Bootを持って来る.さらに,通常のMinixのbuild.sh自体がFTPからgccやらbinutilsやらを持って来るので,これらのツールを手作業でMinix上に持ってこない場合にはネットワーク接続が必要.
1時間ぐらいでsrcの下に2GBのイメージ
1時間ぐらいでsrcの下に2GBのイメージ
minix_arm_sd.img
ができる.これをOS Xにscpしてきてddで書き込む.ddコマンドでboot diskを作ってbootなんて,まるでMinixの1.2から1.5を使っていたころみたい.懐かしい.
■ BeagleBone Blackでboot
$ sudo cu -s 115200 -l /dev/tty.usbserial-A702IYA4 Connected. U-Boot SPL 2013.04-dirty (Jul 10 2013 - 14:02:53) musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, HB-ISO Rx, HB-ISO Tx, SoftConn) musb-hdrc: MHDRC RTL version 2.0 musb-hdrc: setup fifo_mode 4 musb-hdrc: 28/31 max ep, 16384/16384 memory USB Peripheral mode controller at 47401000 using PIO, IRQ 0 musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, HB-ISO Rx, HB-ISO Tx, SoftConn) musb-hdrc: MHDRC RTL version 2.0 musb-hdrc: setup fifo_mode 4 musb-hdrc: 28/31 max ep, 16384/16384 memory USB Host mode controller at 47401800 using PIO, IRQ 0 OMAP SD/MMC: 0 mmc_send_cmd : timeout: No status update reading u-boot.img reading u-boot.img U-Boot 2013.04-dirty (Jul 10 2013 - 14:02:53) I2C: ready DRAM: 512 MiB WARNING: Caches not enabled NAND: No NAND device found!!! 0 MiB MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1 *** Warning - readenv() failed, using default environment musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, HB-ISO Rx, HB-ISO Tx, SoftConn) musb-hdrc: MHDRC RTL version 2.0 musb-hdrc: setup fifo_mode 4 musb-hdrc: 28/31 max ep, 16384/16384 memory USB Peripheral mode controller at 47401000 using PIO, IRQ 0 musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, HB-ISO Rx, HB-ISO Tx, SoftConn) musb-hdrc: MHDRC RTL version 2.0 musb-hdrc: setup fifo_mode 4 musb-hdrc: 28/31 max ep, 16384/16384 memory USB Host mode controller at 47401800 using PIO, IRQ 0 Net: <ethaddr> not set. Validating first E-fuse MAC cpsw, usb_ether Hit any key to stop autoboot: 0 gpio: pin 53 (gpio 53) value is 1 mmc0 is current device micro SD card found mmc0 is current device gpio: pin 54 (gpio 54) value is 1 SD/MMC found on device 0 reading uEnv.txt 1334 bytes read in 5 ms (259.8 KiB/s) Loaded environment from uEnv.txt Importing environment from mmc ... Running uenvcmd ... starting from MMC mmc - MMC sub system Usage: mmc read addr blk# cnt mmc write addr blk# cnt mmc erase blk# cnt mmc rescan mmc part - lists available partition on current mmc device mmc dev [dev] [part] - show or set current mmc device [partition] mmc list - lists available devices mmc rstn - enable hardware reset of emmc reading kernel.bin 257088 bytes read in 35 ms (7 MiB/s) reading ds.elf 60452 bytes read in 12 ms (4.8 MiB/s) reading rs.elf 80476 bytes read in 15 ms (5.1 MiB/s) reading pm.elf 57192 bytes read in 12 ms (4.5 MiB/s) reading sched.elf 30500 bytes read in 10 ms (2.9 MiB/s) reading vfs.elf 138400 bytes read in 22 ms (6 MiB/s) reading memory.elf 2496380 bytes read in 290 ms (8.2 MiB/s) reading log.elf 38736 bytes read in 11 ms (3.4 MiB/s) reading tty.elf 46940 bytes read in 11 ms (4.1 MiB/s) reading mfs.elf 84036 bytes read in 16 ms (5 MiB/s) reading vm.elf 149008 bytes read in 23 ms (6.2 MiB/s) reading pfs.elf 238796 bytes read in 33 ms (6.9 MiB/s) reading init.elf 171636 bytes read in 26 ms (6.3 MiB/s) Unknown command 'dcache' - try 'help' Unknown command 'icache' - try 'help' console=tty00 rootdevname=c0d0p1 verbose=3 hz=1000 filemap=0 board_name=A335BNLT ## Starting application at 0x80200000 ... MINIX booting cstart intr_init(0) main() initializing asyncm... done initializing idle... done initializing clock... done initializing system... done initializing kernel... done initializing ds... done initializing rs... done initializing pm... done initializing sched... done initializing vfs... done initializing memory... done initializing log... done initializing tty... done initializing mfs... done initializing vm... done initializing pfs... done initializing init... done system_init()... done MINIX 3.2.1. Copyright 2012, Vrije Universiteit, Amsterdam, The Netherlands MINIX is open source software, see http://www.minix3.org cycles_accounting_init()... done IRQ 72 handler registered by tty / 5 Started VFS: 8 worker thread(s) Starting the mmc driver mmc_block(info)Initializing the MMC block device mmc_host_mmchs(info)Using instance number 0 IRQ 64 handler registered by mmc / 73129 mmc_block(info)System event framework fresh start Root device name is /dev/c0d0p1 mmc_host_mmchs(info)Enabling high speed mode /dev/c0d0p1: clean mmc_host_mmchs(info)Enabling high speed mode mmc_host_mmchs(info)Enabling high speed mode /dev/c0d0p1 is mounted on / none is mounted on /proc /dev/c0d0p2: clean /dev/c0d0p3: clean size on /dev/imgrd set to 0kB Multiuser startup in progress ... Starting services: randomrm /dev/eth0 rm /dev/eth mknod /dev/psip0 c 7 1 ln /dev/psip0 /dev/psip ln /dev/ip0 /dev/ip ln /dev/tcp0 /dev/tcp ln /dev/udp0 /dev/udp inet: unable to read random data from /dev/random: resource temporarily unavailable inet: using current time for random-number seed inet ipc. Starting daemons: update cron syslogd. Starting i2c subsystem: IRQ 70 handler registered by i2c / 73140 i2cIRQ 71 handler registered by i2c / 73141 i2cIRQ 30 handler registered by i2c / 73142 i2c. Running on a BeagleBone Black Starting i2c device drivers: cat24c256IRQ 7 handler registered by tps65217 / 73144 tps65217 tda19988. Starting networking: nonamed. Local packages (start): done. Minix Release 3 Version 2.1 (console) 10.0.0.1 login: root Copyright (c) 2012, Vrije Universiteit, Amsterdam, The Netherlands To install additional packages, run 'pkgin'. To install packages from the online package repository, if you have a working network connection from MINIX: first do a 'pkgin update' to update the list of available packages, and then do a 'pkgin' to get a list of commands. For example, 'pkgin install vim' installs the 'vim' package, and 'pkgin available' will list all available packages. To install packages from the installation CD: same, but use pkgin_cd. To switch to the online repository, do 'pkgin update' again. To install all packages, do pkgin_all. MINIX 3 supports multiple virtual terminals. Just use ALT+F1, F2, F3 and F4 to navigate among them. For more information on how to use MINIX 3, see the wiki: http://wiki.minix3.org. # df Filesystem Size (kB) Free Used % Files% Mounted on /dev/c0d0p1 65536 42904 22632 35% 2% / none 0 0 0 0% 0% /proc /dev/c0d0p2 131072 128968 2104 2% 1% /home /dev/c0d0p3 1572864 1099860 473004 31% 3% /usr # |
動いた!
GPIOとI2Cが両方動いているので,この手の環境を使いたい場合はFreeBSD/NetBSD/OpenBSDよりも進んでいることになるのかな.
MathJax in Blogger
BloggerでMathJaxを使ってTeXっぽく数式を入れる方法 ってのを見つけた.
MathJax っていうツールを使うと,Webの中に数式が書けるらしい.
Bloggerでの使用方法は ここ にあるので,書かれているとおりに,HTMLのテンプレートの<head>の直後にマクロを入れてみる.
で,文章中に\$で囲んでTeXの数式で\$\sin^2 \theta + \cos^2 \theta = 1\$と書くとインラインで$\sin^2 \theta + \cos^2 \theta = 1$と表示される.さらに,\$\$で囲んで\$\$\sin^2 \theta + \cos^2 \theta = 1\$\$と書くと別立ての数式で
$$\sin^2 \theta + \cos^2 \theta = 1$$と表示される.
MathJax っていうツールを使うと,Webの中に数式が書けるらしい.
Bloggerでの使用方法は ここ にあるので,書かれているとおりに,HTMLのテンプレートの<head>の直後にマクロを入れてみる.
で,文章中に\$で囲んでTeXの数式で\$\sin^2 \theta + \cos^2 \theta = 1\$と書くとインラインで$\sin^2 \theta + \cos^2 \theta = 1$と表示される.さらに,\$\$で囲んで\$\$\sin^2 \theta + \cos^2 \theta = 1\$\$と書くと別立ての数式で
$$\sin^2 \theta + \cos^2 \theta = 1$$と表示される.
2014年3月7日金曜日
BeagleBone BlackでCloud9 IDEからLEDチカチカ
ミニブレッドボードが Arduino で動いたので,本命の BeagleBone Black (BBB)で使ってみます.
BBBは,miniUSBにUSBケーブルを出してパソコンのUSBケーブルに差すと,まずUSB storageとして認識されて,HTMLファイルを開くと設定方法が見られます.
この間,裏ではUSB経由で電源が供給されて,内蔵のフラッシュメモリにインストールされているOS (AngstromというLinuxのディストリビューション)が起動しています.
この画面からUSB用のネットワークドライバをパソコンにインストールすると,パソコンとBBBとの間がIP networkでつながって,パソコン側のWebブラウザで
これは簡単.
しかも,
早速やってみました.
Ethernetコネクタが上になるように置いたとき,右側の列にGPIOが集まっています.
ピン番号は,上から順に
次にCloud9 IDE上で新しくmyblink1.jsというファイルを作成し,下記のようにソースを書きます.
できた!!!
ミソは,先頭の行に書く
問題点1:
色々と探してみた所,出荷状態のBBBをそのまま使う場合は,
HDMIに信号出てるの?と思ってpsコマンドで確認してみたら,ちゃっかりX11が立ち上がっています.
問題点2:
ここはArduinoと違って,まっとうなLinuxが走っているボード.
BBBは,miniUSBにUSBケーブルを出してパソコンのUSBケーブルに差すと,まずUSB storageとして認識されて,HTMLファイルを開くと設定方法が見られます.
この画面からUSB用のネットワークドライバをパソコンにインストールすると,パソコンとBBBとの間がIP networkでつながって,パソコン側のWebブラウザで
http://192.168.7.2/に接続するとチュートリアルが見られるという.
これは簡単.
しかも,
http://192.168.7.2:3000/では Cloud9 IDE なるJavaScriptの統合開発環境が動いており,Webブラウザ内でJavaScriptを書くとなんとLEDチカチカができるという.
早速やってみました.
Ethernetコネクタが上になるように置いたとき,右側の列にGPIOが集まっています.
ピン番号は,上から順に
P8_1, P8_2と並んでいるらしい(左側の列がP9_1〜P9_46).P8_1とP8_2がGNDなので,
P8_3, P8_4
...
...
P8_45, P8_46
P8_1 → ブレッドボードのGNDと結線します.
P8_7 →ブレッドボード上のLED1のanode
P8_8 →ブレッドボード上のLED2のanode
P8_9 →ブレッドボード上のLED3のanode
P8_10 →ブレッドボード上のLED4のanode
次にCloud9 IDE上で新しくmyblink1.jsというファイルを作成し,下記のようにソースを書きます.
Cloud9 IDEのDebugボタンを押すだけでチカチカ.
// myblink2.js
// 2014/3/6
// LED点灯のテスト
// P8_1, P8_2はGND
var b = require('bonescript');
var ledPin = ["P8_7", "P8_8", "P8_9", "P8_10"];
var ledPin2 = ["USR0", "USR1", "USR2", "USR3"];
for ( var i = 0; i < 4; i++ ) {
b.pinMode(ledPin[i], b.OUTPUT);
b.pinMode(ledPin2[i], b.OUTPUT);
}
for ( var i = 0; i < 4; i++ ) {
b.digitalWrite( ledPin[i], b.HIGH );
b.digitalWrite( ledPin2[i], b.HIGH );
}
setInterval(loop, 100);
var loopCount = 0;
function loop() {
loopCount++;
if ( loopCount > 3 )
loopCount = 0;
for ( var i = 0; i < 4; i++ ) {
if ( i == loopCount ) {
b.digitalWrite(ledPin[i], b.HIGH);
b.digitalWrite(ledPin2[i], b.HIGH);
} else {
b.digitalWrite(ledPin[i], b.LOW);
b.digitalWrite(ledPin2[i], b.LOW);
}
}
}
できた!!!
ミソは,先頭の行に書く
var b = require("bonescript");です.これで,
b.pinMode()などが使えるので,Arduinoのようにお気楽にプログラミング可能という話.ADC内蔵でanalog入力も7pin使えるみたいなので,いろいろできそう.
b.digitalWrite()
b.HIGH
b.LOW
問題点1:
最初,入出力に使えるピン番号が分かりませんでした.(Ethernetコネクタを上にして置いたとき)右側の列の1行目はGNDなんだけど,2行目と3行目のpinが出力に使えない.
色々と探してみた所,出荷状態のBBBをそのまま使う場合は,
http://192.168.7.2/に乗っているピン番号配置図のうち,ページの一番下にある「Black eMMC and HDMI pins」という物を見ないといけないらしい.on board eMMCとHDMIに使われている信号とピンが共有されているみたいです.
HDMIに信号出てるの?と思ってpsコマンドで確認してみたら,ちゃっかりX11が立ち上がっています.
問題点2:
何度か動かしているとすぐに動かなくなってしまい,ブラウザ側でreloadしたり,再起動をかけたりする必要がありました.
ここはArduinoと違って,まっとうなLinuxが走っているボード.
ssh root@192.168.7.2とloginしちゃいます.ファイルを探すと,どうもCloud9 IDEで作成されたファイルは
/var/lib/cloud9/の中に保存されるらしい./usr/bin/nodeというコマンドがあるので,直接shell promptから
node myblink1.jsとすることでも,LEDチカチカできます.
2014年3月4日火曜日
実験用のミニブレッドボード作成
しばらく実験を続けるので,実験用のミニブレットボードを作成してみました.
使った部品は以下のとおり.
一方,緑のLEDは逆にanode側に集合抵抗をつなげて,1点を5Vにつなげています.
タクトスイッチの配線は以下のようにします.スイッチがつながっていない状態だと5Vが,つなげるとLOWが出力されるように配線.
Arduinoにつないで,ちゃんと配線できているかテストします.
配線は以下のとおり,スイッチを8pinに,LEDを12pinに接続しています.
以下のようにスケッチを作成します.
ちゃんと動いたので,次はこのボードをBeagleBoneBlackのGPIOにつなげます.
使った部品は以下のとおり.
- LED 赤×2,緑×2,黄×2
- タクトスイッチ×2
- 集合抵抗 4素子5pin 一番左が共有で,右の各4端子に1kΩがつながってるタイプ
- ブレッドボード,ジャンパワイヤ
一方,緑のLEDは逆にanode側に集合抵抗をつなげて,1点を5Vにつなげています.
タクトスイッチの配線は以下のようにします.スイッチがつながっていない状態だと5Vが,つなげるとLOWが出力されるように配線.
Arduinoにつないで,ちゃんと配線できているかテストします.
配線は以下のとおり,スイッチを8pinに,LEDを12pinに接続しています.
以下のようにスケッチを作成します.
スイッチを押すと,LEDがチカチカします.
// 2014/3/4
// LED_Button01
int LEDout = 12;
int BTNin = 8;
void setup() {
pinMode( LEDout, OUTPUT );
pinMode( BTNin, INPUT );
}
void loop() {
// ボタンスイッチはpullupされているので,押されるとLOW
if ( digitalRead( BTNin ) == LOW ) {
digitalWrite( LEDout, HIGH );
delay(1000);
digitalWrite( LEDout, LOW );
delay(200);
digitalWrite( LEDout, HIGH );
delay(200);
digitalWrite( LEDout, LOW );
delay(200);
digitalWrite( LEDout, HIGH );
delay(200);
digitalWrite( LEDout, LOW );
} else {
digitalWrite( LEDout, LOW );
}
}
ちゃんと動いたので,次はこのボードをBeagleBoneBlackのGPIOにつなげます.
登録:
投稿 (Atom)