FreeBSD または Linux を使う目的で購入した、Intel Comute Stick STCK1A32WFC ですが、スティックPC上でUnix系OSを動かすことに苦労しています。
Stick PCは、いずれは誰かに譲ることになるだろうという想定の下で使用しているため、プリインストールされている Windows10 をできれば消さずに、またはリカバリー可能な形で残しておきたいと思っていることが一因なのですが、そもそも USBメモリから Linux/FreeBSDを起動することに、まだ成功していません。4コア、2GBメインメモリ + 32GB Cドライブという Stick PCの仕様自体もちょっとしたテスト環境に都合が良いので、内蔵SSDを消去してしまうのは、せめてUSBからのOS起動に成功した後にしようと思っている間に、Diginnos のボトルPCを見つけ、これはいいかも!と購入してしまいました。(下の写真)
このPC、上記画像をクリックして Amazon のページを覗いてみればわかりますが、Intel Compute Stick とほぼ同じ価格帯(約1万5千円)で、
- メインメモリ 4GB
- 内蔵SSD 32GB
- 4コアCPU : 1.6GHz(Atom x7 Z8700)
- 内蔵カメラ&マイク
- 内蔵バッテリー(瞬間停電ではOSが落ちない)
- 64bit Windows10 Home
- 冷却ファン内蔵
なので、TV裏に直結することにこだわらなければ、スティックPCよりもコストパフォーマンスに優れていると言えます。
Windows10 として使っても、64bit OS, 4GBメモリ ということでスティックPCよりも使い勝手がよく、BIOS(UEFI) の中で secure boot を disable してしまえば、USBブートが可能なようで、LinuxやFreeBSDとして使うにはこっちの方が都合が良いのでは?と思っていました。
そして、本日、ようやく Linux と FreeBSD で使う事が出来ることを確認しました。
Linux編
Linuxに関しては、Ubuntu のダウンロードサイトから 64bit版 14.04 Desktop バージョン ISOイメージをダウンロードして、1GB or 2GB の USBメモリに dd して、EFI の設定で起動デバイスを、dd した USBメモリを選択するだけで、Livefs が起動しました。
インストーラから、内蔵メモリが見えたので、恐らくUbuntu をインストールするのも問題ないでしょう。
Ubntu Live だけで、mpeg4 ビデオの再生が出来(音は出なかった)、NTFSの他、Macのファイルシステムさえ見えていました。こりゃすごい。
入れようと思えば、そのまま Ubuntu が入るだろうと思えたので、Linuxに関してここで終了。
FreeBSD編
本当に入れたいのは FreeBSD の方。
Stick PC STCK1A32WFC に FreeBSD を入れる場合、現時点で見つかる情報には、
- OSから内蔵SSDが見えない。(FreeBSD11.0 では、mmcsd デバイスが見えない。対応していない。)
- USB LANが必要(内蔵WiFiが使えない)
- USBキーボードが必要
と書かれています。つまりStick PC として使うというよりも、Stick PCのCPUとUSBポートだけを使って安いハードウェアとして動かすというものです。(サーバーとしてセットアップしてしまえばビデオもキーボードも必要無いので、低消費電力で魅力的なことには変わりなし。)
ボトルPCもハードウェアが異なるだけで、Stick PCと同じ結果になるのかどうか?
幸い、FreeBSD 11.1 がリリースされていたので、11.0 ではなく 11.1 のイメージ(FreeBSD-11.1-RELEASE-amd64-memstick.img)で試してみることにしました。
Linux 同様、セットアップする間は、USB LAN と USB キーボードを使う必要があります。
OSイメージをダウンロードした後、https://www.freebsd.org/releases/11.1R/announce.html の情報に従い、FreeBSD の root で以下のコマンドを発行し、
dd if=FreeBSD-11.1-RELEASE-amd64-memstick.img of=/dev/da0 bs=1m conv=sync
1GB USBメモリに、起動&Live OSを作成。
Linux 同様、起動パーティションに dd したUSBメモリのEFIパーティションを選択して、Diginnos DG-CANPC を電源オンしたところ、FreeBSD 11.1 カーネルが起動しました!これには感激。
dmesg を表示したところ、内蔵SSDは mmcsd0 として、SDメモリスロットは mmcsd1 として、USBメモリは、da0, da1・・・・として見えることがわかりました。
FreeBSD 11.1 で Atom x7-Z8700 の MMCが見えるようになったの!?
このままインストーラを起動して、SDメモリスロットの 32GB SDメモリに FreeBSD 11.1 をインストールしてみたところ、USBメモリからインストールしたOSにはチェックサムエラーがあるということで、自動リカバリーが発生。LAN経由でインストールし直しになりましたが、無事にインストール成功!
残念ながら、SDメモリスロットからはOSをブートすることは出来ません。EFI の設定にその選択肢がないため。
次に、2本目のUSBメモリをUSBポートに接続して、2本目にOSを入れることにしました。
やり方は SDメモリの時と同じで、一度エラーが出て、ネットからのインストールになりました。
ここで問題発生。
USBメモリの発熱のせいか、途中で Panic が発生してしまいました。
インストールを繰り返そうとしたところ、熱のため(?)か 2本目USBメモリの初期化が出来ず!
さてどうするか?
SDカードリーダーを持っていることを思い出し、前の過程でFreeBSd11.1をインストールしたSDメモリをそのままSDカードリーダーに接続してUSBメモリとして認識させることとを思いつきました。
EFIの起動パーティションを選択し直し、SDメモリをUSBメモリとして起動したところ、途中まで起動して、このままプロンプトまでたどり着くかと期待しましたが、ファイルシステムマウントでストップ。
理由は、直接SDメモリスロットへインストールした時、SDメモリスロットの rootパーティションは、/dev/mmcsd1p2 として認識されたので fstab の rootパーティションは、/dev/mmcsd1p2 として記述されていますが、今、SDスロットは空っぽ。
インストール時と運用時で接続インタフェースが違う場合にはよくある話。/dev/da0p2 として認識させないといけません。
再び1本目のUSBメモリから起動しSDメモリのファイルシステムを手動マウントし、fstab の記述を /dev/mmcsd1p2 → /dev/da0p2 へ編集。
このあとでボトルPCを再起動したところ、ボトルPC上で FreeBSD 11.1 が起動しました!
dmesg の結果が以下。
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 #0 r321309: Fri Jul 21 02:08:28 UTC 2017 root@releng2.nyi.freebsd.org:/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 1920x1080 CPU: Intel(R) Atom(TM) x7-Z8700 CPU @ 1.60GHz (1600.00-MHz K8-class CPU) Origin="GenuineIntel" Id=0x406c3 Family=0x6 Model=0x4c Stepping=3 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 = 4294967296 (4096 MB) avail memory = 3900321792 (3719 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 irqs 0-114 on motherboard SMP: AP CPU #3 Launched! SMP: AP CPU #2 Launched! SMP: AP CPU #1 Launched! Timecounter "TSC" frequency 1599997660 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 ACPI Error: [BDLI] Namespace lookup failure, AE_ALREADY_EXISTS (20170303/dswload-498) ACPI Exception: AE_ALREADY_EXISTS, During name lookup/catalog (20170303/psobject-360) ACPI Exception: AE_ALREADY_EXISTS, (SSDT: DptfTab) while loading table (20170303/tbxfload-355) ACPI Error: [PNIT] Namespace lookup failure, AE_ALREADY_EXISTS (20170303/dswload-498) ACPI Exception: AE_ALREADY_EXISTS, During name lookup/catalog (20170303/psobject-360) ACPI Exception: AE_ALREADY_EXISTS, (SSDT: CpuDptf) while loading table (20170303/tbxfload-355) ACPI Error: [LPSP] Namespace lookup failure, AE_ALREADY_EXISTS (20170303/dswload-498) ACPI Exception: AE_ALREADY_EXISTS, During name lookup/catalog (20170303/psobject-360) ACPI Exception: AE_ALREADY_EXISTS, (SSDT: LowPwrM) while loading table (20170303/tbxfload-355) ACPI Error: 3 table load failures, 8 successful (20170303/tbxfload-378) acpi0: Power Button (fixed) unknown: I/O range not supported cpu0: on acpi0 cpu1: on acpi0 cpu2: on acpi0 cpu3: on acpi0 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 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 Timecounter "ACPI-fast" frequency 3579545 Hz quality 900 acpi_timer0: port 0x408-0x40b on acpi0 pcib0: port 0xcf8-0xcff on acpi0 pci0: on pcib0 vgapci0: port 0xf000-0xf03f mem 0x90000000-0x90ffffff,0x80000000-0x8fffffff at device 2.0 on pci0 vgapci0: Boot video device xhci0: mem 0x91500000-0x9150ffff at device 20.0 on pci0 xhci0: 32 bytes context size, 64-bit DMA usbus0 on xhci0 usbus0: 5.0Gbps Super Speed USB v3.0 pci0: <encrypt/decrypt> at device 26.0 (no driver attached) pcib1: at device 28.0 on pci0 pcib1: [GIANT-LOCKED] pcib2: at device 28.1 on pci0 pci1: on pcib2 pci1: at device 0.0 (no driver attached) isab0: at device 31.0 on pci0 isa0: on isab0 acpi_button0: on acpi0 acpi_acad0: on acpi0 acpi_tz0: on acpi0 sdhci_acpi0: iomem 0x91532000-0x91532fff irq 45 on acpi0 mmc0: <MMC/SD bus> on sdhci_acpi0 sdhci_acpi1: iomem 0x9152e000-0x9152efff irq 47 on acpi0 mmc1: <MMC/SD bus> on sdhci_acpi1 uart0: port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0 battery0: on acpi0 ppc0: cannot reserve I/O port range est0: on cpu0 est1: on cpu1 est2: on cpu2 est3: on cpu3 Timecounters tick every 1.000 msec nvme cam probe device init ACPI Error: No handler for Region [FGCP] (0xfffff80003b4b600) [GenericSerialBus] (20170303/evregion-288) ugen0.1: at usbus0 ACPI Error: Region GenericSerialBus (ID=9) has no handler (20170303/exfldio-428) ACPI Error: Method parse/execution failed [\134_SB.PCI0.I2C1.BATE._BST] (Node 0xfffff80003b4d1c0), AE_NOT_EXIST (20170303/psparse-668) 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 mmc1: No compatible cards found on bus Trying to mount root from ufs:/dev/da0p2 [rw]... Root mount waiting for: usbus0 uhub0: 13 ports with 13 removable, self powered Root mount waiting for: usbus0 ugen0.2: at usbus0 ukbd0 on uhub0 ukbd0: on usbus0 kbd1 at ukbd0 ugen0.3: at usbus0 uhub1 on uhub0 uhub1: on usbus0 Root mount waiting for: usbus0 uhub1: 4 ports with 4 removable, self powered Root mount waiting for: usbus0 ugen0.4: at usbus0 umass0 on uhub1 umass0: <Bulk-In, Bulk-Out, Interface> on usbus0 umass0: SCSI over Bulk-Only; quirks = 0x4000 umass0:0:0: Attached to scbus0 ugen0.5: at usbus0 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 Root mount waiting for: usbus0 ugen0.6: at usbus0 Root mount waiting for: usbus0 ugen0.7: at usbus0 mountroot: waiting for device /dev/da0p2... ums0 on uhub0 ums0: on usbus0 ums0: 5 buttons and [XYZT] coordinates ID=1 udav0 on uhub1 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:4d:dc ubt0 on uhub0 ubt0: on usbus0 ue0: link state changed to DOWN WARNING: attempt to domain_add(bluetooth) after domainfinalize() WARNING: attempt to domain_add(netgraph) after domainfinalize() ue0: link state changed to UP ubt0: ubt_ctrl_write_callback:780: control transfer failed: USB_ERR_TIMEOUT ng_hci_process_command_timeout: ubt0hci - unable to complete HCI command OGF=0x3, OCF=0x3. Timeout
OSから mmc0, mmcsd0 として内蔵SSDが見えているので、おそらく内蔵SSD にもインストールできるでしょう。
第一段階としては、これでOK。
まだ、Windows10 を消す踏ん切りが付いていないのでこのままですが、SDカードリーダーでしばらく使ってみたいと思っています。