07 10月 2015

Intel Edison; flashing out-of-box Edison

There are two (or more?) ways to flash Edison.

  1. Phone Flash Tool (GUI) or flashall.bat/flashall.sh (CUI)
  2. reboot ota command or run do_ota at Boot prompt.
But it cannot use "reboot ota" method on out-of-box Edison. In my case, oob Edison's version is
root@edison:~# cat /etc/version 
edison-weekly_build_56_2014-08-20_15-54-05

And if you run reboot ota, it fails. The reason is in ota_abort_reason U-boot environment variable.
root@edison:~# fw_printenv ota_abort_reason
ota_abort_reason=Partition rootfs too small for edison-image-edison.ext4 

Oob Edison's partition layout looks like this.
Number Start End Size File system Name Flags 
 1 1049kB 3146kB 2097kB       u-boot0 
 2 3146kB 4194kB 1049kB       u-boot-env0 
 3 4194kB 6291kB 2097kB       u-boot1 
 4 6291kB 7340kB 1049kB       u-boot-env1 
 5 7340kB 8389kB 1049kB ext2  factory 
 6 8389kB 33.6MB 25.2MB       panic 
 7 33.6MB 67.1MB 33.6MB fat16 boot 
 8 67.1MB 604MB   537MB ext4  rootfs 
 9  604MB 1409MB  805MB       update 
10 1409MB 3909MB 2500MB ext4  home 

To compare, this is a partition layout after flashing to the latest firmware (weekly-159).
Number Start End Size File system Name Flags 
 1 1049kB 3146kB 2097kB       u-boot0 
 2 3146kB 4194kB 1049kB       u-boot-env0 
 3 4194kB 6291kB 2097kB       u-boot1 
 4 6291kB 7340kB 1049kB       u-boot-env1 
 5 7340kB 8389kB 1049kB ext2  factory 
 6 8389kB 33.6MB 25.2MB       panic 
 7 33.6MB 67.1MB 33.6MB fat16 boot 
 8 67.1MB 1678MB 1611MB ext4  rootfs 
 9 1678MB 2483MB  805MB       update 
10 2483MB 3909MB 1426MB ext4  home 

reboot ota command cannot change a partition layout, because the command refers files in update partition and rootfs partition is followed by update partition. If extend rootfs partition size, it destroys update partition.

On the other hand, flashall command does the following steps.
  1. Flash u-boot0/1 and u-boot-env0/1 partitions.
  2. Reboot.
  3. Flash rootfs partition.
At the second reboot step, U-boot overwrites a partition table using updated partitions variable at the first step.
root@edison:~# fw_printenv partition
partitions=uuid_disk=${uuid_disk};name=u-boot0,start=1MiB,size=2MiB,uuid=${uuid_uboot0};name=u-boot-env0,size=1MiB,uuid=${uuid_uboot_env0};name=u-boot1,size=2MiB,uuid=${uuid_uboot1};name=u-boot-env1,size=1MiB,uuid=${uuid_uboot_env1};name=factory,size=1MiB,uuid=${uuid_factory};name=panic,size=24MiB,uuid=${uuid_panic};name=boot,size=32MiB,uuid=${uuid_boot};name=rootfs,size=1536MiB,uuid=${uuid_rootfs};name=update,size=768MiB,uuid=${uuid_update};name=home,size=-,uuid=${uuid_home}; 

Just for reference, oob Edison's partition variable:
partitions=uuid_disk=${uuid_disk};name=u-boot0,start=1MiB,size=2MiB,uuid=${uuid_uboot0};name=u-boot-env0,size=1MiB,uuid=${uuid_uboot_env0};name=u-boot1,size=2MiB,uuid=${uuid_uboot1};name=u-boot-env1,size=1MiB,uuid=${uuid_uboot_env1};name=factory,size=1MiB,uuid=${uuid_factory};name=panic,size=24MiB,uuid=${uuid_panic};name=boot,size=32MiB,uuid=${uuid_boot};name=rootfs,size=512MiB,uuid=${uuid_rootfs};name=update,size=768MiB,uuid=${uuid_update};name=home,size=-,uuid=${uuid_home}; 


21 9月 2015

シクロクロスのタイヤ (Schwalbe Marathon)

ほとんど通勤でしか乗らないので、セミスリックのタイヤ(Continental Cyclocross Speed 700x35C)を付けていたけれども、週末サイクリングを再開したら連続して3回もパンクしたので、タイヤを変えてみることにした。

ちなみにパンクの原因は木の枝についていたと思われるトゲ。未舗装のちょっと荒れた道も問題なく走ることができるので油断していた。長さ5-6mmで細いけれどもかなり固いとげが刺さって、きれいな丸い穴がチューブに開いていた。
枝にトゲが付いているのは季節的な問題かもしれないし、しばらくコースを変えてもいいんだけど、連続パンクの気分を変えるためにもタイヤを新調することにした。

左からシクロクロス、セミスリック、ツーリング。
買ってきたのは、Schwalbe Marathon Original Wire Bead Tyre 700x32C。(オンラインショップではそういう名前になっていたけど、Schwalbeのサイトを見ているとMarathon HS 420というみたい。)
 カテゴリ的には、シクロクロスのタイヤではなくてツーリング用のタイヤになる。そういえば、昔乗っていたブリヂストンのロードマンに付けていたタイヤがこんな感じだったような。

左の写真には写っていないけれど両サイドには白いラインで反射材が塗られている。ナイトライドはしないし、あと数週間でdaylight saving timeになるので、路上での効果のほどは半年先まで分らないけれども。

指でつまんでみると、Continentalのセミスリックは明らかに薄いペラペラな感じで、Schwalbeは商品説明にあった通り、何かつまっているというか、多層になっているのが感じられる。

最初に乗った時の感想は、軽い! 硬い! ブロックタイヤをセミスリックに変えた時も速くなったけれども、それよりももっと軽い感じで走れる。Continentalのは5-6気圧の高めの空気圧にしてもやわらかい感じの乗り心地だったけど、このSchwalbeのは4気圧強くらいでも路面のゴツゴツ感が伝わってくるような硬い感じになった。

タイヤを替えてから2週間ほど乗っているけれども、とりあえず通勤時にパンクはしていないし、週末サイクリングでも同じをコースを走って木の枝をパキパキ折りながら走ってもパンクはしていない。ということで、とりあえず満足。

でも、まったり走るにはContinentalのタイヤはちょうどよい感じだったので、Schwalbeの同じMarathonの35Cがちょっと気になる。

03 9月 2015

Intel Edison as a Bluetooth low energy (BLE) peripheral

I have had the chance to play with Intel Edison recently. The goal is to make Intel Edison act as a BLE peripheral. There are nice articles about it and I followed instructions in those pages. But there were some small problems to achieve my goal.


First of all, I flash Edison with the latest firmware; Intel Edison® Board Firmware Software Release 2.1 (edison-image-ww25.5-15.zip). Or uname -a shows
Linux Edison3 3.10.17-poky-edison+ #1 SMP PREEMPT Fri Jun 19 12:06:40 CEST 2015 i686 GNU/Linux
Or /etc/version says
weekly-159
Your Edison might behave differently if different version is running.

To make long story short,


Basic settings including wifi network

# configure-edison --setup


Install software using opkg

Edit /etc/opkg/base-feeds.conf file.
# vi /etc/opkg/base-feeds.conf

Add following lines.
src/gz all http://repo.opkg.net/edison/repo/all
src/gz edison http://repo.opkg.net/edison/repo/edison
src/gz core2-32 http://repo.opkg.net/edison/repo/core2-32

Install systemd-dev and bluez5-dev.
# opkg install systemd-dev
# opkg install bluez5-dev

Install software using npm

# npm -g install async
# npm install noble
# npm install bleno

Enable Bluetooth device

Disable bluetooth daemon (bluetoothd). You need run it only once.
# systemctl disable bluetooth

You have to run these commands every time after boot.
# rfkill unblock bluetooth
# hciconfig hci0 up

Run sample program (echo)

Start node process.
# cd node_moduels/bleno/examples/echo
# node main.js

While a node process is running, open other terminal and down/up hci0 device.
# hciconfig hci0 down
# hciconfig hci0 up

Now, try to connect from other BLE supported device, such as a smartphone. There should be a BLE peripheral named 'echo'. I use an Android application, "BLE scanner". With this app, you can read and write data to/from BLE device, that is quite handy.

Problems


Network interface, usb0

After running configure-edison command, there are two network interfaces; usb0 and wlan0. But I could not connect to Edison using ssh via wifi because the routing table is looks like below.
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.2.253   0.0.0.0         UG        0 0          0 usb0
192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0 usb0
192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0 wlan0

I do not need usb0. So disable it.
# ifconfig usb0 down

It deletes default gateway too, so add it again.
# route add default gw default-gateway-IP-address
In my case,
# route add default gw 192.168.2.253

Or you can permanently change usb0's IP address by editing the following file.
# vi /etc/systemd/network/usb0.network


Installing Bleno

When installing Bleno, it installs bluetooth-hci-socket module too. But it requires libudev.h and there is no such file in Edison as default. Thus it failed to install Bleno.
The header file is included in systemd-dev package. And so you need to install it before installing Bleno.

Running Bleno

Before disable bluetoothd, it advertises a name using a host name. If you name your Edison board "my_edison", you will see "my_edison" bluetooth device from other device. After disable bluetoothd (or kill bluetoothd process), the board still advertises using a bluetooth chip name? In my case, "BCM43340B0 37.4 MHz WLBGA_iTR Intel Edison-0122-N".
I am not an expert of Bluetooth and so I do not know a proper solution. But I found the workaround of it. To let Bleno process advertise correctly, hci0 interface needs to be down and up again while Bleno process is running. And so Bleno process can advertise its own name.

10 8月 2015

Windows 10へのアップグレード おまけ

Dell Inspiron 11 3147 2-in-1をWindows 10にアップグレード後、タッチパッドのドライバがうまくあたらない問題を調べていたら、意外な解決方法だったので記録として残しておく。

まずはDellのサイトからダウンロードできる、
  • Dell TouchPad driver (Input_Driver_W9HP3_WN32_19.0.9.4_A00.exe)
をインストールしても、最後の表示は成功となるのに実際にはドライバは適用されていない。デバイスマネージャーを見てもPS/2 Compatible Mouseのままになっている。

インストーラーの中身を展開すると、
  • Synaptics_v19_0_9_4__C__x64__Win7_Win8_Win81_Win10__Signed__DellWPF_RMIHID.exe
というファイルが見つかるので、ファイル名を見る限りは最新のWindows 10に対応したサイン済みのドライバーに見える。

念の為、ブートオプションでDisable driver signature enforcementを選択してから起動してインストールしてみたけれども、やはりうまくいかない。

さらに調べていたら以下の情報を見つけた。
http://en.community.dell.com/support-forums/laptop/f/3518/t/19632025

どうやら、I2C Controllerの新しいドライバが悪さをしているらしい。なので、再度Dellのサイトから今度はWindows 8.1用の
  • Intel Celeron & Pentium Processor I2C Controller Driver
をダウンロードしてインストールしてみた。すると、デバイスマネージャーのマウスのセクションにPS/2 Mouseだけじゃなくてunknown deviceがもう一つ表示された。そこで、最初のDell TouchPad driverをインストールすると、今度は正常にインストールされてunknown deviceがDell Touchpadとして認識された。

これでようやく掌検出とかジェスチャーが使えるようになった。

Windows 10へのアップグレード その2

Windows 10をDell Inspiron 11 3147 2-in-1へクリーンインストールした後の作業。

不明なデバイス

クリーンインストール直後は不明なデバイスが6個あった。

とりあえず、Windows Updateを走らせてみた。

4個まで減った。上から順番に、
  • Intel Trusted Execution Engine (8086:0f18)
  • ValleyView SMBus Controller (8086:0f12)
  • ValleyView LPIO2 I2C Controller (8086:0f41)
  • Intel Virtual Buttons (ACPI/VEN_INT DEV_33D6)
らしい。
ドライバをダウンロードするためにDellのサポートページにいくと、親切にもOSの選択にWindows 10が追加されていた。

さっそく、そのものずばりのIntel Trusted Execution Engine driverがあったのでダウンロードしてインストール。次は、Intel Virtual Buttons。
残りの2個は、恐らくIntel Chipset driverだろうと予測してダウンロードしてインストール。全部なくなった。

アプリケーションのインストール

タブレットモードにした時に、自動でキーボード/トラックパッドが無効にならなかったので、
  • Dell Quickset Application
もDellのサイトからダウンロードしてインストールした。
タイピング時の掌検出もデフォルトのドライバにはない機能のようなので、
  • Dell Touchpad Driver
もダウンロードしてインストールしたけれども、設定画面に辿り着けない。インストールに失敗しているわけではなさそうなんだけど、後で調べることにする。
[追記: 08/10/2015] 解決した。

次は環境を整えるためのアプリケーションをインストールする。
  • (アプリじゃないけど)レジストリを書き換えてCaps LockをControlにする
  • CorvusSKK
  • Xkeymacs
あとは、個人的な定番アプリ、Google ChromeとかVLCとか、をインストールするだけ。

09 8月 2015

Windows 10へアップグレード その1

サブ マシンのDell Inspiron 11 3147 2-in-1をWindows 10にアップグレードした。

おおまかな手順は以下の通り。
  1. リカバリ用のUSBメディアを作成。
  2. 現状のWindows 8.1をUSB HDDにバックアップ。
  3. ハードウェア(SSDとRAM)のアップグレード。
  4. USBのリカバリ メディアでブートしてSSDにWindows 8.1をインストール。
  5. Windows 8がアクティベーションされていることを確認。
  6. Windows 10のクリーン インストール用のメディアを作成。
  7. Windows 8.1をWindows 10にアップグレード。
  8. Windows 10がアクティベーションされていることを確認。
  9. USBのインストール メディアでブートして、クリーンインストール。
  10. Windows 10がアクティベーションされていることを再確認。

リカバリ用のUSBメディアを作成

プリインストールされていた専用のツール、Dell Backup and Recoveryを使って作成するのだけれども、購入直後に作成しておいたので、それを利用した。

Windows 8.1をUSB HDDにバックアップ

これはWindows付属の機能、System Image Backupを使ってUSB HDDにバックアップした。

ハードウェアのアップグレード

万一に備えてWindows 8.1のディスクを残しつつWindows 10にアップグレードしたかったので、ついでにHDDをSSDに換装した。相性問題で苦労したけれども、それについてはこちらを参照

Windows 8.1をリカバリ

作成しておいたリカバリ用のUSBでブートしてリカバリをする。リカバリ先のディスク サイズが違うとリカバリできないという話を聞いていたけれども、エラーも警告もなくそのままリカバリできた。
出荷時の状態まで戻るので、適当にセットアップしてアクティベーションされていることを確認する。

Windows 10のメディアを作成

Download Windows 10のページからDownload Toolをダウンロードして、クリーンインストール用のメディアを用意しておく。4GBのUSBメモリが必要。

Windows 10にアップグレード

再度ツールを起動して、今度はWindows 10にアップグレードする。以下のページの説明を読むと、一度Windows 8からWindows 10にアップグレードしておかないと、クリーンインストール時に(通常のインストールのように)プロダクトキーが必要になると書いてある。
ということで、Windows 8がインストールされている状態からWindows 10にアップグレードした。
特にエラー等は起きず無事に完了。どうせ消去するので詳しく見てないけれども、unknown deviceが2個あった。

Windows 10のクリーンインストール

作成しておいたUSBで起動して、最初の言語やキーボードを選択するダイアログが表示されたらShift+F10を押してコマンドプロンプトを表示させる。Diskpartコマンドを使ってドライブをパーティション情報ごと完全に消去する。

インストールの途中でプロダクトキーの入力をする画面になったけれども、スキップできる。インストールが終って最初のセットアップ画面でも、プロダクトキーを入力するように促されるが、そこもスキップできた。

アクティベーションの確認

プロダクトキーの入力を2回スキップしたけれども、コントロールパネルを開いて確認すると、アクティベーション済みと表示されていた。

ということで、とりあえずのWindows 10へのアップグレードは完了。

Dell Inspiron 11 3147 2-in1 ハードウェアアップグレード

Windows 10にアップグレードするついでに、以前からやりたかったハードウェアのアップグレードをした。HDDをSSDに換装して、メモリも(無駄に)8GBにアップグレードした。
同様のアップグレードは何度もしてきたので、余程の間違いをしない限り問題はないだろうと思っていたけど、甘かった。今まで会社のマシンを何台もSSDにアップグレードしたけれども一度も相性問題に遭遇したことはなかったので、下調べもせずにSSDを購入したら見事に相性問題にぶちあたってしまった。

HDDとメモリのアクセス

DellのサイトにPDFの取説があるので、それを参照しながら作業する。ネジを9本外すと底面カバーが外れるので、バッテリーも外す。HDDをSSDに換装して、4GBのメモリ モジュールも8GBと取り替える。
バッテリ、HDD、メモリを外したところ
メモリはシルクプリントの通り、DDR3L/1.35Vの低電圧に対応したモジュールにしか対応していないので注意。SSDは高さが7mmまで大丈夫。

SSDの認識

相性問題に気が付いたのは、リカバリを始めた時。リカバリらしき画面が出る前にエラーメッセージが表示された。メッセージの中にディスクサイズが表示されている部分があるけれども、それが0GBでもなく、間違った容量でもなく、空欄になっていた。

おかしいなと思って、試しにWindows 8.1のインストールメディアを用意してインストールしようとすると、、、SSDが見つからない。SATAコネクタを再確認したけれどもやっぱり見つからない。BIOSが何か変なのかと思って覗いてみると、BIOSの段階で既に見えていない。
Fixed HDDが[Not Detected]になっている
初期不良の可能性もあるので、他のPCで試したところ、特に問題なく使用できたので、初期不良というわけでもなさそう。

購入したのはCrucialのBX100というモデルで、検索してみるとSSDが認識されなくなるという症状の例はたくさん見つかって、Crusialのフォーラムでも数年前から話題になっているみたい。対処法は、power cycleと呼んでいるみたいだけど、20分ほど通電して(ただし通電のみでデータ通信はさせない)、30秒ほど電源OFFを2回繰り返しするらしい。


他にも似た方法がフォーラムにあるけれども、基本は通電だけしばらくして放っておく必要があるようだ。ただし、これで確実に直るわけでもなさそう。

しかも自分の場合は、どうやら完全に認識されないわけじゃなくて、認識されている時とされない時がある。くわえて認識されているかどうかBIOSに入って確認すると、認識されていたとしてもBIOSを抜けた後に認識が解除されてしまっているらしい。セーブして抜けても、セーブせずに抜けても、いきなりCtrl+Alt+Delで再起動してもだめ。
運がいいと認識される。でもBIOSを抜けると×。
BX100用のファームウェアをMU01からMU02にアップデートしたけれど改善しない。InspironのBIOSにもA06というアップデートがあったので、アップデートしてみたけれども、やっぱりだめ。

完全にお手上げ状態なので、あきらめて他のSSDを購入することにした。選んだのは、OCZのARC 100。こちらは何も問題なくスムーズにアップグレードできた。