スイッチサイエンスさんのオープンハウスに行ってきました。

そのときにリフロー体験をしてきました。クリームはんだを使うのは今回が初めてですが、うまくできるのでしょうか・・・。

作業場所はこんな感じ。チップ部品とホットプレートが並んでいます。

ssci_reflow0.jpg

今回リフローを行う基板は、マイコンとLEDと抵抗、コンデンサ、ボタン電池ホルダーを実装するようになっています。すべて表面実装の部品になります。

まず基板を固定する台に載せます。右側に見える紙がポイントです。

ssci_reflow1.jpg

紙を載せると、穴が開いていてちょうど銅はく面が見えるようになっています。

ssci_reflow2.jpg

ここでクリーム半田をへらでたっぷり塗ったあとに、へらを垂直にして銅はくの部分だけにクリーム半田がのるようにします。

ssci_reflow3.jpg

ここで紙をゆっくり剥がすと、銅はく面だけにクリーム半田がついた状態になっていることがわかります。

ssci_reflow4.jpg

ここにチップ部品をピンセットで載せていきます。位置決めを慎重に行い、位置が決まったらピンセットで上から少し押しておきます。

ssci_reflow5.jpg

いよいよホットプレートで加熱します。

ssci_reflow6.jpg

加熱するとクリーム半田が普通の半田の銀色にかわっていきます。

ssci_reflow7.jpg

見た目は問題ないようなのでボタン電池を取り付けたところ一発で動作しました。

ssci_reflow8.jpg

思ったよりは簡単にできましたが、これはあらかじめ準備が整っていたためで、個人で行う場合は型紙や固定台の作成が難関になると思います。

ちなみに、スイッチサイエンスさんではチップパーツの取り付けはこんな機械で行っていました。すごいですね。

ssci_reflow9.jpg

貴重な体験をさせていただいたスイッチサイエンスさんに感謝です。

Firefox OS 2.1をビルドして日本語IMEを組み込みFlameに書き込んでみました。
ビルド環境はubuntu 14.04 LTS (64bit) です。
以下手順の抜粋です。抜け漏れあるかもしれません。
思考錯誤で行いましたので、手順でおかしなところがあるかもしれませんが、そこは自己責任でお願いします。

まずは、Firefox OS 2.1のNightlyをBuildする環境をつくります。

$ sudo apt-get install --no-install-recommends autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib gcc-4.6 g++-4.6 g++-4.6-multilib git lib32ncurses5-dev lib32z1-dev zlib1g:amd64 zlib1g-dev:amd64 zlib1g:i386 zlib1g-dev:i386 libgl1-mesa-dev libx11-dev make zip libxml2-utils
$ cd
$ git clone git://github.com/mozilla-b2g/B2G.git
$ cd B2G
$ ./config.sh flame
$ ./build.sh

ここでビルドしたFirefox OS 2.1をFlameに書き込んで動作することを確認します。

次に日本語辞書を入手します。
http://sourceforge.jp/projects/naist-jdic/releases/
naist-jdic-0.4.3.tar.gzをダウンロード

ダウンロードした日本語辞書を適当なところに展開します。
$ cd ~
$ zcat naist-jdic-0.4.3.tar.gz | tar xvf -
$ cd naist-jdic-0.4.3
$ ls -l *.dic

dicファイルをコピーして辞書を作ります。
$ cd ~/B2G/gaia/apps/keyboard/js/imes/jskanji
$ cat README
$ cd dict
$ mkdir ipadic
$ cp ~/naist-jdic-0.4.3/*.dic ipadic/.
$ make

dict.jsonができているはずです。

Makefileに日本語キーボードを指定する。
$ cd ~/B2G/gaia
$ cp Makefile Makefile.org
$ vi Makefile
$ diff Makefile.org Makefile
*** Makefile.org 2014-08-12 01:19:13.466204000 +0900
--- Makefile 2014-08-12 02:18:46.746204000 +0900
***************
*** 395,401 ****
GAIA_CONCAT_LOCALES?=1

# This variable is for customizing the keyboard layouts in a build.
! GAIA_KEYBOARD_LAYOUTS?=en,pt-BR,es,de,fr,pl,zh-Hans-Pinyin,en-Dvorak

ifeq ($(SYS),Darwin)
MD5SUM = md5 -r
--- 395,402 ----
GAIA_CONCAT_LOCALES?=1

# This variable is for customizing the keyboard layouts in a build.
! #GAIA_KEYBOARD_LAYOUTS?=en,pt-BR,es,de,fr,pl,zh-Hans-Pinyin,en-Dvorak,jp-kanji
! GAIA_KEYBOARD_LAYOUTS?=en,jp-kanji

ifeq ($(SYS),Darwin)
MD5SUM = md5 -r

日本語リソースの組み込み
https://hg.mozilla.org/releases/gaia-l10n/v2_0から日本語リソースをダウンロード
ダウンロードした日本語リソースをホームディレクトリに展開
$ cd
$ unzip ja-7222e75b66ca.zip
$ ls -l ja-7222e75b66ca/

$ cd
$ mv ja-7222e75b66ca ~/B2G/gaia/locales/ja
$ cd ~/B2G/gaia/locales/
$ cp languages_dev.json languages_own.json
$ vi languages_own.json
$ diff -rc languages_dev.json languages_own.json
*** languages_dev.json 2014-08-11 07:51:24.924547000 +0900
--- languages_own.json 2014-08-12 02:24:28.094204000 +0900
***************
*** 1,39 ****
{
- "ar" : "عربي",
- "bg" : "български",
- "bn-BD" : "বাংলা (বাংলাদেশ)",
- "ca" : "Català",
- "cs" : "Čeština",
- "da" : "Dansk",
- "de" : "Deutsch",
- "el" : "Ελληνικά",
"en-US" : "English (US)",
! "es" : "Español",
! "eu" : "Euskara",
! "fr" : "Français",
! "gl" : "Galego",
! "hr" : "Hrvatski",
! "hu" : "Magyar",
! "it" : "Italiano",
! "ja" : "日本語",
! "km" : "ខ្មែរ",
! "ko" : "한국어",
! "lt" : "Lietuvių",
! "mk" : "Македонски",
! "ms" : "Melayu",
! "ne-NP" : "नेपाली",
! "nl" : "Nederlands",
! "pa" : "ਪੰਜਾਬੀ",
! "pl" : "Polski",
! "pt-BR" : "Português (do Brasil)",
! "ro" : "Română",
! "ru" : "Русский",
! "sk" : "Slovenčina",
! "sq" : "Shqip",
! "sr-Cyrl" : "Српски",
! "sr-Latn" : "Srpski",
! "sv-SE" : "Svenska",
! "tr" : "Türkçe",
! "zh-CN" : "中文 (简体)",
! "zh-TW" : "正體中文 (繁體)"
}
--- 1,4 ----
{
"en-US" : "English (US)",
! "ja" : "日本語"
}

環境変数を設定
$ export LOCALE_BASEDIR=/home/ocha/B2G/gaia/locales
$ export GAIA_DEFAULT_LOCALE=ja
$ export LOCALES_FILE=/home/ocha/B2G/gaia/locales/languages_own.json

APNのパッチを行う。
$ cd
$ unzip firefoxos-patch-master.zip
$ cd ~/B2G/gaia/shared/resources
$ patch apn.json ~/firefoxos-patch-master/apn.json.diff

gaiaを再ビルドする。
$ cd ~/B2G
$ ./build.sh gaia

Flameに書き込み
$ cd ~/B2G
$ ./flash.sh

これで日本語入力ができるようになります。
ここではまだFMラジオパッチを組み込んでいませんが、このビルドツリーに反映してしまえば毎回パッチも不要です。

fxos21_kanji_ime.jpg

Firefox OS Flameを手に入れました。でも、購入時点だとFirefox OS 1.3で日本語画面ではありませんでした。

FlameのページにNightly build (Firefox OS 2.1)がリンクされていましたので、これと入れ替えてみました。

私はMacBook Airを使っていますので、adb-fastboot-installをインストールしてadbやfastbootが動く状態にしています。

以下の3つの必要なファイルをMacにダウンロードして、適当なフォルダにいれておきます。

  • b2g-34.0a1.en-US.android-arm.tar.gz (ファイル名はその都度変わります)
  • gaia.zip
  • shallow_flash.sh

作業の前にFlameの環境設定でリモートデバッグを有効にしておくことと、途中で端末ロックがかからないように画面ロックを無効にしておきます。

Macのターミナルを立ち上げて、先ほどのフォルダに移動します。

$ cd ~/Desktop/Flame

実行権限をつけます。
$ chmod +x ./shallow_flash.sh

書き込みのスクリプトを実行します。
$ ./shallow_flash.sh -g gaia.zip -G b2g-34.0a1.en-US.android-arm.tar.gz
Are you sure you want to flash
Gaia: gaia.zip
Gecko: b2g-34.0a1.en-US.android-arm.tar.gz
to your Device? [y/N]y ←Yと入力。
### Waiting for device... please ensure it is connected, switched on and remote debugging is enabled in Gaia
### Restarting adb with root permissions...
adbd is already running as root
### Remounting the /system partition...
remount succeeded
### Stopping b2g process...
### Processing Gaia: gaia.zip
### Unzip gaia.zip to /var/folders/83/rk2h8hb12fs8ft2v0f68zyqm0000gn/T/shallowflashgaia.XXXXXXXXXXXX.CorEeLCJ ...
### Cleaning Gaia and Profiles ...
rm failed for /data/local/svoperapps, No such file or directory
rm failed for /data/local/user.js, No such file or directory
rm failed for /data/local/indexedDB, No such file or directory
### Cleaning Done.
### Pushing Gaia to device ...
push: /var/folders/83/rk2h8hb12fs8ft2v0f68zyqm0000gn/T/shallowflashgaia.XXXXXXXXXXXX.CorEeLCJ/gaia/profile/webapps/bluetooth.gaiamobile.org/manifest.webapp -> /system/b2g/webapps/bluetooth.gaiamobile.org/manifest.webapp
push: /var/folders/83/rk2h8hb12fs8ft2v0f68zyqm0000gn/T/shallowflashgaia.XXXXXXXXXXXX.CorEeLCJ/gaia/profile/webapps/bluetooth.gaiamobile.org/application.zip -> /system/b2g/webapps/bluetooth.gaiamobile.org/application.zip

:(中略)

push: /var/folders/83/rk2h8hb12fs8ft2v0f68zyqm0000gn/T/shallowflashgecko.XXXXXXXXXXXX.sH1PJPqC/b2g/b2g -> /system/b2g/b2g
push: /var/folders/83/rk2h8hb12fs8ft2v0f68zyqm0000gn/T/shallowflashgecko.XXXXXXXXXXXX.sH1PJPqC/b2g/application.ini -> /system/b2g/application.ini
24 files pushed. 0 files skipped.
3746 KB/s (38943826 bytes in 10.151s)
### Push Done.
error: protocol fault (no status) ←エラーのようですが問題なさそうです。
### Shallow Flash Successful!
$

これで、リブートするとFirefox OS 2.1が立ち上がります。

環境設定で確認すると2.1.0.0-prereleaseとなっていました。

初期設定で日本語が選択できますので、それを選択するとホーム画面や各種表示が日本語になります。

残念ながら日本語IMEは組み込まれていないので、自分でビルドするしかありませんが、手っ取り早く最新の環境を使ってみるのも面白いのではと思います。

なお、すでに公開されているAPNパッチとFMラジオパッチはそのまま使えました。

ホーム画面のスクリーンショットを撮ってみましたが、Firefox OS 2.1では音量を下げるボタンとホームボタンの同時押しに変更になっています。

flame_fxos21_screen.jpg

SECCON 2014 CTFに初めて参加しました

先日、CTF for Beginnersに参加しましたので、初めてCTF予選にも参加してみました。

解いた問題は以下の6つです。合計で600点獲得できました。

  • 練習問題(100点)
  • このパケットを解析せよ(100点)
  • decode me(100点)
  • 箱庭SQLiチャレンジ(100点)
  • 重ねてみよう(100点)
  • 879,394bytes(100点)

CTF初心者ですが、Write-upを書いてみました。

【練習問題

練習用の問題で、単純にFlagを入力するだけです。

【このパケットを解析せよ

seccon2014.pcapngを Wiresharkに読み込んだところ、FTPの通信ログのようです。flag.txtというファイルをGETしていましたので、このファイルのデータを読んだところこんな内容が。

RkxBR3tGN1AgMTUgTjA3IDUzQ1VSM30=

BASE64ぽいのでデコードしたらFlagがでてきました。

decode me】

encoded.txtの内容をバイナリエディタでみたところ、

FRPPBA 2014

ebg13/47

という文字列が。

FRPPBA 2014はSECCON 2014なのかなと推測し、並べてみたところ規則性が。

FRPPBA 2014→SECCON 2014

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm

これってROT13という暗号方式らしいです。でもバイナリをみる限りどうも2バイト文字も含まれているようで、それを扱うにはROT47というものがあるらしいです。

これも ebg13/47 → rot13/47 と一致しますし。

これを扱えるツールはnkfらしいので、Windows版のnkfをインストールして、表示してみたら・・・

>nkf -r encoded.txt

SECCON 2014 に参加のみなさまこんにちは。 rot13/47 に気付くとは流石です。 nkfコマンドで簡単にデコードできることにも気付きましたか? というわけで、おめでとうございます! フラグは半角英数文字に変換してから入力してください。 FLAG{Have fun SECCON2014}

これでFlagがとれました。

【箱庭SQLiチャレンジ

手始めに以下を入力

' OR 1=1--

ID=0 NAME=Tanaka AGE=54 ADDRESS=Tokyo SALARY=90000.0 ID=1 NAME=Paul AGE=32 ADDRESS=California SALARY=20000.0 ID=2 NAME=Allen AGE=25 ADDRESS=Texas SALARY=15000.0 ID=3 NAME=Teddy AGE=23 ADDRESS=Norway SALARY=20000.0 ID=4 NAME=Mark AGE=25 ADDRESS=Rich-Mond SALARY=65000.0

おやおや。丸見えです。でも、Flagはここではなさそうです。

他のテーブルをみてみたいので次のように入力。

' OR 1=1 ; SELECT sql FROM sqlite_master; --

ID=0 NAME=Tanaka AGE=54 ADDRESS=Tokyo SALARY=90000.0 ID=1 NAME=Paul AGE=32 ADDRESS=California SALARY=20000.0 ID=2 NAME=Allen AGE=25 ADDRESS=Texas SALARY=15000.0 ID=3 NAME=Teddy AGE=23 ADDRESS=Norway SALARY=20000.0 ID=4 NAME=Mark AGE=25 ADDRESS=Rich-Mond SALARY=65000.0 sql=CREATE TABLE COMPANY(ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL,AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL ) sql=NULL sql=CREATE TABLE SECCON(FLAG TEXT NOT NULL)

SQLコマンドの履歴が見えました。CREATE TABLEでテーブル名やスキーマがわかりました。SECCONというテーブルがあるようです。しかも、FLAG というTEXTがあります。これですね。

' OR 1=1 ; SELECT * FROM SECCON; --

ID=0 NAME=Tanaka AGE=54 ADDRESS=Tokyo SALARY=90000.0 ID=1 NAME=Paul AGE=32 ADDRESS=California SALARY=20000.0 ID=2 NAME=Allen AGE=25 ADDRESS=Texas SALARY=15000.0 ID=3 NAME=Teddy AGE=23 ADDRESS=Norway SALARY=20000.0 ID=4 NAME=Mark AGE=25 ADDRESS=Rich-Mond SALARY=65000.0 FLAG=FLAG{EnjoySQLi}

これでFlagがとれました。

【重ねてみよう

afterimage.gifというアニメーションGIFのファイルが提供されました。白い点がランダムに表示されるものです。

afterimage.jpg

問題の通り各コマを重ねると何か見えるのでしょう。

とりあえずアニメーションGIFを作成するようなツールを探してみたところ、Giamというツールがありましたので、これでafterimage.gifを読み込みました。次にツールで重ねて表示してみたところ、

WS000000.jpg

QRコードらしきものが現れました。画像を白黒反転をしてiPhoneのQRコードで読み取るとFlagがとれました。

【879,394bytes

Filesystem001.binというファイルシステムのデータのようです。

ファイルサイズが 879,394bytesのファイル名を答えろとのことなので、とりあえず879,394をHEXにしたところ、D6B22になります。これがファイルサイズとしてどこかにあるはずです。

たぶんFAT32だと思うので、バイナリエディタで開いてファイル名らしきものをキーにFATの構造に照らし合わせてファイルサイズが先ほどのHEX値と同じものを見つけました。でもロングファイル名のようです。次にVFATの構造と照らし合わせて、ロングファイル名を求めました。それがFlagでした。

以上、今回は初めての参加で、100点の問題ばかりで終わってしまいましたが、参加されたかたのwrite-upを参考にしてテクニックを身につけたいと思います。

でもFlagがとれたときは気持ちいいですね。次回もぜひ参加してみたいと思います。

VFDシールドを修理しました

以前製作したVFDシールドを落っことしてしまいまして、VFD(蛍光表示管)が1つ割れてしまいました。

repair_vfd1.jpg

危険なので割れたVFDを取り外します。リード線を切断して取り外したのちに、はんだシュッ太郎でハンダを除去しました。

repair_vfd2.jpg

デジットさんにVFDを注文して到着しました。

repair_vfd3.jpg

さっそく取り付けます。こんな感じかな。

repair_vfd4.jpg

VFDシールドの修理完了です。無事点灯しました。

repair_vfd5.jpg

VFDのスペアを買っておいたのでまた割れても大丈夫かな。

iMacのDVDドライブをSSDに交換してみた(換装編)からの続きです。

iMacの分解はリスクもありますので自己責任でお願いします。

SSDドライブへの交換が完了しましたので、iMacを組み立てていきます。分解と逆の手順で進めていきます。

90度縦にしている液晶画面パネルを元の位置に戻します。このとき不用意にケーブルを引っ張ったりせず、指紋を液晶画面パネルにつけないように注意して作業します。

縦置きにした状態で、ケーブルを元通りに取り付けていきます。

左側は2本

imacstep23.jpg

中央も2本

imacstep24.jpg

ケーブルの取り付けが完了したら、液晶画面パネルを元の位置に戻して、静かに本体を倒します。

imacstep25.jpg

液晶画面パネルを固定していた8本のT-8ネジを締めて固定します。

液晶画面に指紋がついてしまった場合はここで丁寧に拭き取ります。私の場合はiPhoneの液晶画面保護シートを貼るときに使ったクリーニングクロスを使いました。

次に外してあったアクリル板を取り付けます。強力な磁力で本体とくっつきますので位置決めに注意しながら正しい位置で固定します。

imacstep26.jpg

いよいよ電源投入です。4つのドライブが表示されました。SSDはあらかじめiMacにUSBで接続してMacOS Xをインストール済ですのでこのように認識します。

imacstep27.jpg

SSDを選んで起動してみます。

imacstep28.jpg

速い!これまでとは比べ物にならないスピードで起動しました。

imacstep29.jpg

無事SSD交換完了です。あとはTRIMの設定と環境設定の移行を進めて終了です。

iMacの旧起動ディスクである内蔵の500GBにはiPhotoのライブラリを置くことにし、それ以外はすべてSSDに移行しました。

起動ディスクになったSSDはTime Capsuleで自動バックアップされますが、iPhotoライブラリが入った旧起動ディスクはバックアップされないので、その点は工夫しないといけません。定期的にバックアップするための外付けHDDを接続して対応することにしました。標準機能でバックアップできるとよいのですが。

ちなみにこの作業で我が家のWindows PCとMacはすべてSSD実装済となりました。

iMacのDVDドライブをSSDに交換してみた(分解編)からの続きです。

iMacの分解はリスクもありますので自己責任でお願いします。

DVDドライブを観察すると、温度センサーらしきものが張り付いています。

imacstep10.jpg

ゆっくり保護シールを剥ぐと基板が見えます。慎重に基板本体も剥いでいきます。

imacstep11.jpg

次にDVDドライブを固定しているユニットの4本のT-8ネジを外します。

ここに2カ所

imacstep12.jpg

さらに2カ所あります。

imacstep13.jpg

4本のネジを外すとDVDユニットが外れます。

imacstep14.jpg

外したDVDユニットはこんな感じです。

imacstep15.jpg

DVDドライブを取り外すために、電磁シールドのアルミシールを剥がします。

imacstep16.jpg

DVDドライブを固定している4本のネジを外すと、DVDドライブが取り外せます。

imacstep17.jpg

ここでDVDドライブをSSDドライブに交換できるキットの出番です。

まずキットにSSDをとりつけます。これでSSDドライブの大きさと接続コネクタがDVDドライブと同じになります。

imacstep18.jpg

先ほどのプラスチックの枠にSSDドライブ交換キットを取り付けます。

ここで1つ問題があり、プラスチックの枠に2つほど小さな爪がでていて、それが邪魔になります。

imacstep19.jpg

私の場合は、この2つの爪はニッパーで折ってしまいました。もうDVDを載せることはないでしょうから。

imacstep20.jpg

DVDドライブを取り付ける要領で、SSDドライブを取り付けます。剥がしたアルミシールをもとに戻します。

imacstep21.jpg

DVDユニットをiMac本体に取り付けて、T-8ネジで固定します。温度センサーもSSDのケースにくっつけます。

imacstep22.jpg

これでDVDからSSDへの交換が終わりました。

このあとiMacのDVDドライブをSSDに交換してみた(組立編)に進みます。

iMacのDVDドライブをSSDに交換してみた(準備編)からの続きです。

iMacの分解はリスクもありますので自己責任でお願いします。

材料が揃ったところでiMacを分解する必要があります。

分解の方法はASCII.jpの記事を参考にしました。少し古いですが基本構造は同じと思います。

まずは正面のアクリル板を外します。吸盤を隅に取り付けて引っぱると上側に隙間ができます。

imacstep1.jpg

その隙間を利用して慎重にアクリル板を外すと液晶画面が現れます。

imacstep2.jpg

外したアクリル板はほこりがつかないように立てかけておきましょう。

imacstep3.jpg

次に傷がつかないようにバスタオルとかを敷いて、そこにiMacを寝かせます。

imacstep4.jpg

液晶画面ユニットはT-8のネジで固定されていますのでそれを外します。ネジの近くに強力な磁石があるのでネジやドライバーがくっつきやすいです。ピンセットなどでネジを固定しながら作業することをおすすめします。

imacstep5.jpg

外したネジはどの位置のネジかわかるように記録しておきましょう。私はこんな感じで図の上に置くようにしています。

imacstep6.jpg

ネジを外すと液晶画面が動くようになります。

この状態で再びiMacを慎重に縦置きにして、液晶画面を少しずつ前に倒すと接続ケーブルが何本か見えますので、これを慎重に外します。

左側に2本。

imacstep7.jpg

真ん中に2本。

imacstep8.jpg

左側の2本のケーブルと真ん中のフラットケーブルでないケーブルを1本外したところで、そのまま液晶画面を90度縦向きにすることができました。この状態でDVDドライブにアクセスできますので、真ん中のケーブル2本は外さなくてもよいかもしれません。(未確認)

imacstep9.jpg

ちなみに内部は相当ほこりがたまっていましたので、エアダスターで吹き飛ばしつつ掃除機で吸い取りました。

あと不注意にも液晶画面を触ってしまい、少し指紋がついてしまいました。これはあとでなんとかすることにしましょう。

このあとiMacのDVDドライブをSSDに交換してみた(換装編)に進みます。

iMac(21.5-inch, Mid 2011)のDVDドライブが突然動かなくなってしまいました。DVDメディアをいれようとしても吸い込んでくれません。実は以前使っていたMacBookProでも同様にDVDドライブが突然動かなくなったのです。この時はDVDドライブを新しいものに交換しました。

現行のiMacはすでにDVDドライブは非搭載なので特に本体に搭載されている必要はなさそうです。このスペースにSSDを取り付けたかたをちらほら見かけたので、私も試してみました。

iMacの分解はリスクもありますので自己責任でお願いします。

まず材料を集めます。

  • SSDドライブ(あらかじめiMacにUSBで接続してMacOS Xをインストールしておく)
  • SSDドライブをDVDドライブに取り付けるためのキット
  • T-8のドライバー
  • 吸盤

SSDドライブは240GBのものを購入しました。

ssd240gb.jpg

T-8のドライバーは以前に購入していたものです。

t8screwdriver.jpg

正面のアクリル画面をはずすために100円ショップで吸盤を買いました。

sucker.jpg

あとはDVDドライブの代わりにSSDを取り付けるためのキットです。何種類か同様なものがありますが、とりあえずこれにしてみました。

これで材料は揃いました。iMacのDVDドライブをSSDに交換してみた(分解編)に進みます。

RAPIROをpythonで動かしてみました

RAPIROと遊ぶ時間がなかなか取れなかったのですが、少し遊んでみました。

先日RAPIROに取り付けたRaspberry Piにログインして、pythonでRAPIROを動かしてみました。

サンプルプログラムを参考にしてテストプログラムを作りました。単純にUARTにコマンドを投げるだけのシンプルなものです。

import sys

import serial
import os
import time
import datetime

com = serial.Serial('/dev/ttyAMA0', 57600, timeout = 10)

sys.stdout.write('write #M0\n')
com.write("#M0")
time.sleep(5)

sys.stdout.write('write #M1\n')
com.write("#M1")
time.sleep(5)

sys.stdout.write('write #M2\n')
com.write("#M2")
time.sleep(5)

sys.stdout.write('write #M7\n')
com.write("#M7")
time.sleep(5)

sys.stdout.write('write #M0\n')
com.write("#M0")

これを実行してみました。

$ sudo python rapiro_test.py
write #M0
write #M1
write #M2
Traceback (most recent call last):
File "rapiro_test.py", line 19, in
com.write("#M2")
File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 485, in write
raise SerialException('write failed: %s' % (v,))
serial.serialutil.SerialException: write failed: [Errno 5] Input/output error
$

なぜかエラーがでます。
調べたところUARTはOSのコンソールになっているということがわかりました。

psコマンドで確認すると

$ ps ax | fgrep AMA
2039 ? Ss+ 0:00 /sbin/getty -L ttyAMA0 115200 vt100
2055 pts/0 S+ 0:00 fgrep --color=auto AMA

確かにgettyがttyAMA0を使っています。
とりあえずコンソールから切り離します。まずはcmdline.txtの修正。

$ sudo cp /boot/cmdline.txt /boot/cmdline_backup.txt
$ sudo vi /boot/cmdline.txt

これを

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

こうしました。

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

次にinittabの修正

$ sudo vi /etc/inittab

これを

#Spawn a getty on Raspberry Pi serial line
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

コメントアウトしました。

#Spawn a getty on Raspberry Pi serial line
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

rebootして確認

$ ps ax | fgrep AMA
2069 pts/0 S+ 0:00 fgrep --color=auto AMA

これで大丈夫。pythonで正常に動くようになりました。

rapiro_uart.jpg

月別 アーカイブ

ウェブページ

Powered by Movable Type 6.0.3

最近のコメント

アイテム

  • ssci_reflow9.jpg
  • ssci_reflow8.jpg
  • ssci_reflow7.jpg
  • ssci_reflow6.jpg
  • ssci_reflow5.jpg
  • ssci_reflow4.jpg
  • ssci_reflow3.jpg
  • ssci_reflow2.jpg
  • ssci_reflow1.jpg
  • ssci_reflow0.jpg