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 System を Ubuntsu 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からユーティリティを使って更新する方が簡単です。ユーティリティを起動して、指示通りに進めて行けばリブートが掛かって更新が終わります。(下図)
実際には両方ともamd64 対応OSがブートしないこととは関係ありませんでしたが、ISOイメージは、USBメモリスティックに書き込む時の細かいオプションはありませんから、ISOメディアは正しいという前提で現象の切り分けが出来ます。
そしてたどり着いた結論は、技評サイトの情報が間違っているというか、不足しているということ。
amd64用のISOイメージから起動するにはUEFIを次のように設定する必要がありました。
- Select Operating System を Ubuntu 14.04 LTS 64-bit に設定する
- Internal UEFI Shell を Enable にする
- Boot Drive Order を amd64 メディア→ Windows → EFI Shell の順にする(Windowsはこの位置でなくとも良い)
(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 を起動できました。
- まず、ブートセレクターが出て来ます。
- 続いて、Ubuntu Linux 起動画面が出て来て、
- 最後に、デスクトップが表示されて起動終了。
望むなら、このまま内蔵SSDへのインストールも行えるようですが、まだしません。
FreeBSD を起動する
続いて FreeBSD のインストール。ここで重要なことは、FreeBSD 11.1 amd64 を使うということ。
OSが起動し、インストーラも動きます。
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で、使い勝手が優れています。