STCK1A32WFC: スティックPCをFreeBSD/Linuxで使う

1台目を購入してから約2年経過しようとしています。今まで Windows10 の使い心地を試す、というかそれ以外の使い方が出来なかった Intel Compute Stick STCK1A32W ですが、ようやく FreeBSD をブートすることが出来、Unix系OSを使えそうだと確信を持てました。

CPU: Intel(R) Atom(TM) CPU  Z3735F @ 1.33GHz (1333.37-MHz K8-class CPU)
  Origin="GenuineIntel"  Id=0x30678  Family=0x6  Model=0x37  Stepping=8
  Features=0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
  Features2=0x43d8e3bf<SSE3,PCLMULQDQ,DTES64,MON,DS_CPL,VMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,SSE4.1,SSE4.2,MOVBE,POPCNT,TSCDLT,AESNI,RDRAND>
  AMD Features=0x28100800<SYSCALL,NX,RDTSCP,LM>
  AMD Features2=0x101<LAHF,Prefetch>
  Structured Extended Features=0x2282<TSCADJ,SMEP,ERMS,NFPUSG>
  VT-x: PAT,HLT,MTF,PAUSE,EPT,UG,VPID
  TSC: P-state invariant, performance statistics
real memory  = 2147483648 (2048 MB)
avail memory = 1947111424 (1856 MB)
Event timer "LAPIC" quality 600
ACPI APIC Table: 
WARNING: L1 data cache covers less APIC IDs than a core
0 < 1
FreeBSD/SMP: Multiprocessor System Detected: 4 CPUs
FreeBSD/SMP: 1 package(s) x 4 core(s)
random: unblocking device.
ioapic0: Changing APIC ID to 8
ioapic0  irqs 0-86 on motherboard
SMP: AP CPU #3 Launched!
SMP: AP CPU #1 Launched!
SMP: AP CPU #2 Launched!

Intel STCK1A32W に関しては、一応メジャーブランドであるため、こうすれば Linux, FreeBSD を動かすことが出来るという情報が少量ながらも Web上に見つけることが出来ます。Ubuntu Linux に関してはプリインストールされた STCK1AL というモデルが販売されていることから確実に Linux OS を動かすことが出来るはずです。

Ubuntu Linux 情報源

このメモを書いている 2017/10/08時点で Linuxプリインストール版 STCK1A8Lは、Amazon.co.jp で 5,850円とRaspberry Pi 3 並の価格で買うことが出来るのですが、メインメモリ1GB、内蔵SSDが8GB という仕様でテスト環境レベル。本格運用もターゲットにするなら、Windows10 モデルを購入して、OSを載せ替えて使いたくなります。そのような人向けに書かれているのが、技評サイトの「第388回 Intel Compute StickでUbuntuを使う」です。Ubuntu Linux は主にデスクトップ用途なのでサーバー用途としての使用を考えている私にはイマイチやる気が出ない構成です。Ubuntu Server もあるのですが、そもそも インストーラを起動させることが出来ませんでしたので先に進めることが出来ませんでした。

私は Unix系OSをインストールするなら、メンテナンスがシンプルなFreeBSDで使いたいと感じます。しかし Intel Stick PC にFreeBSD を入れる記事となると、フォーラムの情報しか見つかりませんでした。

FreeBSD 情報源

ストレージ専用インタフェースとして 32GB eMMC + マイクロSDメモリスロットのみという仕様の制限があります。

Ubuntu 14.04 では eMMC 内蔵SSDのサポートがあるようですが、FreeBSD 11.0 では eMMCのドライバーサポートがありませんので、内蔵SSDにインストールすることも、そこから起動することも出来ません。USBポートにUSBメモリか外付けHDDを接続し、USBストレージにインストール・起動させるしかありません。PCの形状はスティックPCですが、実際にはCPUとメモリだけを使い、LANとハードディスクは外部のものを使うという構成です。これなら、ノートPCやVESAマウントのmini ITX PCで良くない?って思ってしまいます。
逆に考えて、内蔵eMMCから起動すればWindows10(または8.1 with bing)を使い続けることも出来るわけで、不便なデュアルブート環境と言えますが、サーバー用途としてはイマイチ。

これらの情報を元に、過去1年半くらいの間に何度か Ubuntu  と FreeBSD を STCK1A32W からブートさせることを試みたのですが、何度やっても失敗。

いつまで経っても、スティックPC上で LinuxやFreeBSDを使うための記事が増えません。
他にもスティックPC上のWindows10を使って試したい事もあって FreeBSD on Stick PC に集中できませんでしたが、この三連休で気合いを入れて、自力でSTCK1A32WFC 上で Unixを動かすことに挑戦しました。

STCK1A32WFCでUbuntu/FreeBSDインストーラが起動しない

一般的なスペックは前のページを参照するとして、STCK1A32WFC は一般的な自作PCと比べて、LinuxやFreeBSDをブートするためには特別なUEFI設定が必要になります。

  • 技評のサイトに記述がありますが、STCK1A32Wには 32bit(Win8/10用) と 64bit(Linux用) UEFI があり、これを切り替えないと64bit Unix はブートが出来ません。ただし、技評サイトでは デフォルト設定から、Select Operating SystemUbuntsu 14.04 LTS 64-bit にすれば Ubuntu Live USBメモリからインストーラーが起動するような記述になっていますが、実際にはこれだけでは Ubuntu Liveは起動しませんでした。
    PCの起動画面は現れるものの、その後、画面が真っ暗のままかOS起動前画面が出ているものの、先に進まない。
    どうも、EFIからブートメディアに制御が移らないような感じ。待てども待てどもOSインストーラが起動しません。
    USBメモリをFAT32でフォーマットしたり、dd コマンドのパラメータを変えたり、Windows上のイメージ書き込みユーティリティを替えてみたり、USBメモリじゃなくCD-RWやDVD-R/Wメディアを使ってUSB接続DVDドライブから起動しようとしてみたりいろいろ試しましたが、手間ばかり掛かって先に進まない。

こういう状況で長い間つまずいたままでしたが、先日、Diginnos CANPC で FreeBSDとUbuntu が起動することを確認でき、次に進めるきっかけを見つけられました。

  • USBメモリへのISOイメージ書き込みは、書き込みツールにより微妙に異なることがあるので、素直にDVD-RWやCD-Rを使ってみると状況に変化があるのではないか?
  • UEFIをフラッシュしてみると状況に変化があるかも。
    Intel Compute Stick がリリースされてから約2年経過していますので、UEFI も最新にした方がいいのでは?何かブートに関する不具合が修正されているかも知れない。
    という勝手な思い込みでBIOS更新してみました。ちなみに、STCK1A32W はブート時のボタンシーケンスによるOS関係無しの更新方法と、Windowsからユーティリティを使って更新する方法の二つがあります。OSが起動するならWindowsからユーティリティを使って更新する方が簡単です。ユーティリティを起動して、指示通りに進めて行けばリブートが掛かって更新が終わります。(下図)FCBYT10H.86A.0035.2017.2120.1829

実際には両方ともamd64 対応OSがブートしないこととは関係ありませんでしたが、ISOイメージは、USBメモリスティックに書き込む時の細かいオプションはありませんから、ISOメディアは正しいという前提で現象の切り分けが出来ます。

そしてたどり着いた結論は、技評サイトの情報が間違っているというか、不足しているということ。

amd64用のISOイメージから起動するにはUEFIを次のように設定する必要がありました。

  1. Select Operating SystemUbuntu 14.04 LTS 64-bit に設定する
  2. Internal UEFI ShellEnable にする
  3. Boot Drive Orderamd64 メディア→ Windows → EFI Shell の順にする(Windowsはこの位置でなくとも良い)

STCK1A32W amd64 uefi config STCK1A32W EFI boot drive order

2017/10/25 追記:
技評の情報が間違っていたのではなく、Windows OSで使用した期間のカスタマイズが、UEFIの設定に影響を与えることがあることが判明しました。具体的には、Bluetoothデバイスの接続。UEFIが、Bluetoothデバイス接続履歴を記憶していると、64bit EFIが起動できませんでした。過去のデバイス履歴を削除すると、64bit EFIから起動できるようになりました。
私が持っている2台の STCK1A32WFCですが、1台はこれまでに記述した方法で、64bit OSが起動するようになったのですが、もう一台では64bit OSを起動しようとすると真っ暗なまま。64bit EFI Shell を Enable にしても駄目。無事に起動できたもう一台との違いは、過去にBluetoothデバイスを接続したかどうかという点。これに気づくのに長い時間掛かりましたが、過去のCompute Stick の使い方によっては、64bit モードで起動できない条件が何件か存在することがわかりました。)

これでようやくインストーラーというか Ubuntu を起動できました。

  • まず、ブートセレクターが出て来ます。

Ubuntsu 起動セレクター

  • 続いて、Ubuntu Linux 起動画面が出て来て、

STCK1A32W Ubuntu ロゴ画面

  • 最後に、デスクトップが表示されて起動終了。

STCK1A32W Ubuntu デスクトップ

望むなら、このまま内蔵SSDへのインストールも行えるようですが、まだしません。

FreeBSD を起動する

続いて FreeBSD のインストール。ここで重要なことは、FreeBSD 11.1 amd64 を使うということ。

OSが起動し、インストーラも動きます。

FreeBSD11.1 起動画面

STCK1A32WFCへFreeBSD11.1 をインストール中

FreeBSD 11.1 は Intel Compute Stick の内蔵 eMMC をサポートしているようで、dmesg に emmc 上のパーティションが見えています。

以下が、STCK1A32WFCから FreeBSD 11.1 を起動した時の dmesg。

キーボードはUSB無線ドングルタイプ、NIC は USB LAN を使用しており、この時点ではWiFi, Bluetooth とも未使用です。内蔵SSD も Windows10 が入ったままで、OSはUSBメモリ/dev/da0 から起動しています。

Copyright (c) 1992-2017 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
	The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 11.1-RELEASE-p1 #0: Wed Aug  9 11:55:48 UTC 2017
    root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC amd64
FreeBSD clang version 4.0.0 (tags/RELEASE_400/final 297347) (based on LLVM 4.0.0)
VT(efifb): resolution 1280x1024
CPU: Intel(R) Atom(TM) CPU  Z3735F @ 1.33GHz (1333.37-MHz K8-class CPU)
  Origin="GenuineIntel"  Id=0x30678  Family=0x6  Model=0x37  Stepping=8
  Features=0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
  Features2=0x43d8e3bf<SSE3,PCLMULQDQ,DTES64,MON,DS_CPL,VMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,SSE4.1,SSE4.2,MOVBE,POPCNT,TSCDLT,AESNI,RDRAND>
  AMD Features=0x28100800<SYSCALL,NX,RDTSCP,LM>
  AMD Features2=0x101<LAHF,Prefetch>
  Structured Extended Features=0x2282<TSCADJ,SMEP,ERMS,NFPUSG>
  VT-x: PAT,HLT,MTF,PAUSE,EPT,UG,VPID
  TSC: P-state invariant, performance statistics
real memory  = 2147483648 (2048 MB)
avail memory = 1947111424 (1856 MB)
Event timer "LAPIC" quality 600
ACPI APIC Table: 
WARNING: L1 data cache covers less APIC IDs than a core
0 < 1
FreeBSD/SMP: Multiprocessor System Detected: 4 CPUs
FreeBSD/SMP: 1 package(s) x 4 core(s)
random: unblocking device.
ioapic0: Changing APIC ID to 8
ioapic0  irqs 0-86 on motherboard
SMP: AP CPU #2 Launched!
SMP: AP CPU #1 Launched!
SMP: AP CPU #3 Launched!
Timecounter "TSC" frequency 1333366160 Hz quality 1000
random: entropy device external interface
kbd0 at kbdmux0
netmap: loaded module
module_register_init: MOD_LOAD (vesa, 0xffffffff80f5b220, 0) error 19
random: registering fast source Intel Secure Key RNG
random: fast provider: "Intel Secure Key RNG"
nexus0
cryptosoft0:  on motherboard
acpi0:  on motherboard
acpi0: Power Button (fixed)
unknown: I/O range not supported
cpu0:  on acpi0
cpu1:  on acpi0
cpu2:  on acpi0
cpu3:  on acpi0
atrtc0:  port 0x70-0x77 on acpi0
atrtc0: Warning: Couldn't map I/O.
Event timer "RTC" frequency 32768 Hz quality 0
hpet0:  iomem 0xfed00000-0xfed003ff irq 8 on acpi0
Timecounter "HPET" frequency 14318180 Hz quality 950
Event timer "HPET" frequency 14318180 Hz quality 450
Event timer "HPET1" frequency 14318180 Hz quality 440
Event timer "HPET2" frequency 14318180 Hz quality 440
attimer0:  port 0x40-0x43,0x50-0x53 irq 0 on acpi0
Timecounter "i8254" frequency 1193182 Hz quality 0
Event timer "i8254" frequency 1193182 Hz quality 100
Timecounter "ACPI-safe" frequency 3579545 Hz quality 850
acpi_timer0:  port 0x408-0x40b on acpi0
pcib0:  port 0xcf8-0xcff on acpi0
pcib0: _OSC returned error 0x4
pcib0: Length mismatch for 3 range: 108fffff vs 10900000
pci0:  on pcib0
vgapci0:  port 0x1000-0x1007 mem 0x90000000-0x903fffff,0x80000000-0x8fffffff at device 2.0 on pci0
vgapci0: Boot video device
pci0: <encrypt/decrypt> at device 26.0 (no driver attached)
ehci0:  mem 0x90811000-0x908113ff at device 29.0 on pci0
usbus0: EHCI version 1.0
usbus0 on ehci0
usbus0: 480Mbps High Speed USB v2.0
isab0:  at device 31.0 on pci0
isa0:  on isab0
sdhci_acpi0:  iomem 0x90955000-0x90955fff irq 44 on acpi0
mmc0: <MMC/SD bus> on sdhci_acpi0
sdhci_acpi1:  iomem 0x90953000-0x90953fff irq 47 on acpi0
acpi_tz0:  on acpi0
ppc0: cannot reserve I/O port range
uart0:  at port 0x3f8 irq 4 flags 0x10 on isa0
est0:  on cpu0
est1:  on cpu1
est2:  on cpu2
est3:  on cpu3
Timecounters tick every 1.000 msec
nvme cam probe device init
ugen0.1:  at usbus0
uhub0:  on usbus0
mmcsd0: 31GB  at mmc0 50.0MHz/8bit/65535-block
mmcsd0boot0: 4MB partion 1 at mmcsd0
mmcsd0boot1: 4MB partion 2 at mmcsd0
mmcsd0rpmb: 4MB partion 3 at mmcsd0
Trying to mount root from ufs:/dev/da0p2 [rw]...
Root mount waiting for: usbus0
Root mount waiting for: usbus0
Root mount waiting for: usbus0
Root mount waiting for: usbus0
uhub0: 8 ports with 8 removable, self powered
Root mount waiting for: usbus0
ugen0.2:  at usbus0
uhub1 on uhub0
ugen0.3:  at usbus0
uhub2 on uhub1
uhub2:  on usbus0
uhub2: 4 ports with 4 removable, self powered
Root mount waiting for: usbus0
ugen0.4:  at usbus0
umass0 on uhub2
umass0: <Bulk-In, Bulk-Out, Interface> on usbus0
umass0:  SCSI over Bulk-Only; quirks = 0x4000
umass0:0:0: Attached to scbus0
Root mount waiting for: usbus0
ugen0.5:  at usbus0
ukbd0 on uhub2
ukbd0:  on usbus0
kbd1 at ukbd0
da0 at umass-sim0 bus 0 scbus0 target 0 lun 0
da0:  Removable Direct Access SCSI device
da0: Serial Number 20060413092100000
da0: 40.000MB/s transfers
da0: 29608MB (60637184 512 byte sectors)
da0: quirks=0x2
ugen0.6:  at usbus0
mountroot: waiting for device /dev/da0p2...
ums0 on uhub2
ums0:  on usbus0
ums0: 5 buttons and [XYZT] coordinates ID=1
udav0 on uhub2
udav0:  on usbus0
miibus0:  on udav0
ukphy0:  PHY 0 on miibus0
ukphy0:  none, 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
ue0:  on udav0
ue0: Ethernet address: 00:26:87:02:4a:dd
ue0: link state changed to DOWN
ue0: link state changed to UP

面白いことに、マイクロSDスロットにOSイメージを書き込んだマイクロSDカードを入れれば、SDカードスロットから起動できます。
しかし、SDカードスロット用のドライバーが間に合っていないようで、カーネルが起動途中にSDメモリスロットが見えなくなり、mountroot でこけます。mmcsd0 は存在するものの、mmcsd1 が存在しない!

ブートUSBメモリから、直接別のUSBメモリにインストールするのは、USBドライバーの安定性に問題があるようで、私がチャレンジした数回、全部途中でこけました。内蔵eMMCのOSを消して上書きすればUSBインタフェースより安定性があることが推測できますが、まだそこまで進めていません。今回使った FreeBSD 11.1はCANPCでインストールしたものを使って動かしています。

内蔵eMMC上に Ubuntu, FreeBSD を入れてみることはまだ行っていませんが、Windows10に戻せることを前提に、行ってみたいと考えているところです。

こうなってくると、Windows8.1 with Bing プリインストールで、すでにWindows10への無償更新切れで投げ売りされている Compute Stick とか Ubuntu プリインストールでRaspberry Pi 3 と同価格帯で販売されている STCK1A8L がちょっと魅力的に見えてきます。STCK1A8L ならOSを入れ直して、USB LANを接続してルーターとして使えるのでは?って思えます。消費電力10Wで動かせるなら悪くない。
Win8.1 with bing の STCK1A32WFC はAmazon検索してみると、新品1万円以上のものが殆どなので意外。全然安くなっていませんね。今、買うなら同じ価格帯のDignnos CANPC がお勧め。UEFIに32bit/64bit のような制限もなく、メインメモリ4GBで、使い勝手が優れています。

 

コメントを残す