ボトルPC Diginnos DG-CANPC で FreeBSD11.1を使う

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を見つけ、これはいいかも!と購入してしまいました。(下の写真)

Diginnos DG-CANPC (ボトル型パソコン Windows 10)

http://amzn.to/2jUcaxB

この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カードリーダーでしばらく使ってみたいと思っています。

コメントを残す