Skip to content

Instantly share code, notes, and snippets.

@johnko
Last active February 16, 2018 12:04
Show Gist options
  • Save johnko/5dcda2a24c51ae4729b1 to your computer and use it in GitHub Desktop.
Save johnko/5dcda2a24c51ae4729b1 to your computer and use it in GitHub Desktop.
Experiments with FreeBSD on Intel Compute Stick

Experiments with FreeBSD on Intel Compute Stick

Ingredients

Acquire an Intel Compute Stick with Atom CPU and 2GB of RAM, 32GB of storage.

The product code I got is BOXSTCK1A32WFC.

You'll also need:

  • a USB hub
  • a USB thumbdrive with FreeBSD 11.0-CURRENT (10.2-RELEASE UEFI memstick crashes)
  • a USB keyboard & mouse
  • a USB nic/wifi adapter

We won't be installing FreeBSD because the internal disk can't be detected but we can run the LiveCD image from the thumbdrive.

Also the internal wifi adapater is not detected which is why I suggest a USB nic/wifi adapter.

Test Device

Boot into default OS and make sure everything works. In my case it was "Windows 8.1 with Bing".

I sped through the default OS OOBE and just made sure everything worked fine to rule out faulty hardware.

Create Medusa (Connect USB Peripherals)

Since the Intel Compute Stick only has 1 USB port, connect the USB hub, and everything else to the hub.

Boot into the BIOS (pressing F2)

image of Mr Bean tapping piano key

Change BIOS setting

In the BIOS, under Configuration, change Select Operating System from Windows 32bit to Ubuntu 64bit.

Save Changes and Exit.

Boot from USB thumbdrive (pressing F10).

image of Mr Bean tapping piano key

Select your USB thumbdrive

Select LiveCD

Login with root and no password.

Check what network adapters you have with ifconfig.

You'll notice there is only lo0.

Check what disk you have with gpart show.

You'll notice there is only da0 which is your USB thumbdrive.

Let's increase the size of /tmp and /var so we can play with pkg

Remount the / as read-write:

mount -o rw /

Set the tmpsize variable in rc.conf with:

sysrc tmpsize=300m

Set the varsize varialbe in rc.conf with:

sysrc varsize=300m

My USB wifi adapter used the realtek drivers which I had to read and accept by setting a variable in /boot/loader.conf

Now reboot

Enable wifi from a USB adapter

Where rsu0 is your real wifi adapter name detected by FreeBSD:

ifconfig wlan0 create wlandev rsu0

Scan available wifi ssid networks with:

ifconfig wlan0 up scan

Create a file /etc/wpa.conf to save your wifi settings:

network={
ssid="$SSID"
psk="$PASSWORD"
}

Tell your wlan0 which ssid to connect to:

ifconfig wlan0 ssid $SSID

Use wpa_supplicant to negotiate the password:

wpa_supplicant -iwlan0 -c/etc/wpa.conf &

Get an IP address from your router:

dhclient wlan0

We're going to temporarily link /usr/local to /var/usrlocal since we're only playing around

% DO NOT DO THIS ON A PRODUCTION SYSTEM %

mount -o rw /
mkdir /var/usrlocal 
rmdir /usr/local
ln -s /var/usrlocal /usr/local

Now let's use pkg to download and install some programs

Bootstrap pkg:

env ASSUME_ALWAYS_YES=yes pkg bootstrap

Install screenfetch:

pkg install -y screenfetch

Mount the fdescfs needed by screenfetch:

mount -t fdescfs fdesc /dev/fd

Run it:

screenfetch

root@:~ # dmesg
Copyright (c) 1992-2015 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.0-CURRENT #0 r291085: Thu Nov 19 21:48:13 UTC 2015
[email protected]:/usr/obj/usr/src/sys/GENERIC amd64
FreeBSD clang version 3.7.0 (tags/RELEASE_370/final 246257) 20150906
WARNING: WITNESS option enabled, expect reduced performance.
VT(efifb): resolution 1440x900
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 = 1945772032 (1855 MB)
Event timer "LAPIC" quality 600
ACPI APIC Table: <INTEL FCBYT10H>
FreeBSD/SMP: Multiprocessor System Detected: 4 CPUs
FreeBSD/SMP: 1 package(s) x 4 core(s)
cpu0 (BSP): APIC ID: 0
cpu1 (AP): APIC ID: 2
cpu2 (AP): APIC ID: 4
cpu3 (AP): APIC ID: 6
random: unblocking device.
ioapic0: Changing APIC ID to 8
ioapic0 <Version 2.0> irqs 0-86 on motherboard
random: entropy device external interface
kbd0 at kbdmux0
netmap: loaded module
module_register_init: MOD_LOAD (vesa, 0xffffffff80edb540, 0) error 19
random: registering fast source Intel Secure Key RNG
random: fast provider: "Intel Secure Key RNG"
cryptosoft0: <software crypto> on motherboard
acpi0: <INTEL FCBYT10H> on motherboard
acpi0: Power Button (fixed)
unknown: I/O range not supported
cpu0: <ACPI CPU> on acpi0
cpu1: <ACPI CPU> on acpi0
cpu2: <ACPI CPU> on acpi0
cpu3: <ACPI CPU> on acpi0
atrtc0: <AT realtime clock> port 0x70-0x77 on acpi0
atrtc0: Warning: Couldn't map I/O.
Event timer "RTC" frequency 32768 Hz quality 0
hpet0: <High Precision Event Timer> 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: <AT timer> 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: <24-bit timer at 3.579545MHz> port 0x408-0x40b on acpi0
pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
pcib0: Length mismatch for 3 range: 108fffff vs 10900000
pci0: <ACPI PCI bus> on pcib0
vgapci0: <VGA-compatible display> 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: <Intel BayTrail USB 2.0 controller> mem 0x90811000-0x908113ff at device 29.0 on pci0
usbus0: EHCI version 1.0
usbus0 on ehci0
isab0: <PCI-ISA bridge> at device 31.0 on pci0
isa0: <ISA bus> on isab0
acpi_tz0: <Thermal Zone> on acpi0
ppc0: cannot reserve I/O port range
uart0: <16550 or compatible> at port 0x3f8 irq 4 flags 0x10 on isa0
est0: <Enhanced SpeedStep Frequency Control> on cpu0
est1: <Enhanced SpeedStep Frequency Control> on cpu1
est2: <Enhanced SpeedStep Frequency Control> on cpu2
est3: <Enhanced SpeedStep Frequency Control> on cpu3
usbus0: 480Mbps High Speed USB v2.0
Timecounters tick every 1.000 msec
IPsec: Initialized Security Association Processing.
SMP: AP CPU #2 Launched!
SMP: AP CPU #1 Launched!
SMP: AP CPU #3 Launched!
Timecounter "TSC" frequency 1333366608 Hz quality 1000
WARNING: WITNESS option enabled, expect reduced performance.
Trying to mount root from ufs:/dev/ufs/FreeBSD_Install [ro,noatime]...
Root mount waiting for: usbus0
ugen0.1: <Intel> at usbus0
uhub0: <Intel EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1> on 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: <vendor 0x8087> at usbus0
uhub1: <vendor 0x8087 product 0x07e6, class 9/0, rev 2.00/0.15, addr 2> on usbus0
uhub1: 4 ports with 4 removable, self powered
Root mount waiting for: usbus0
ugen0.3: <vendor 0x2109> at usbus0
uhub2: <vendor 0x2109 USB2.0 Hub, class 9/0, rev 2.00/85.80, addr 3> on usbus0
uhub2: 4 ports with 4 removable, self powered
Root mount waiting for: usbus0
Root mount waiting for: usbus0
ugen0.4: <SanDisk> at usbus0
umass0: <SanDisk Extreme, class 0/0, rev 2.10/0.10, addr 4> on usbus0
umass0: SCSI over Bulk-Only; quirks = 0x0100
umass0:0:0: Attached to scbus0
da0 at umass-sim0 bus 0 scbus0 target 0 lun 0
da0: <SanDisk Extreme 0001> Fixed Direct Access SPC-4 SCSI device
da0: Serial Number AA010513132339535615
da0: 40.000MB/s transfers
da0: 30533MB (62533296 512 byte sectors)
da0: quirks=0x2<NO_6_BYTE>
GEOM: da0: the secondary GPT header is not in the last LBA.
GEOM: diskid/DISK-AA010513132339535615: the secondary GPT header is not in the last LBA.
ugen0.5: <Apple, Inc.> at usbus0
uhub3: <Apple, Inc. Keyboard Hub, class 9/0, rev 2.00/96.15, addr 5> on usbus0
Root mount waiting for: usbus0
uhub3: 3 ports with 2 removable, bus powered
ugen0.6: <Apple, Inc> at usbus0
ukbd0: <Apple, Inc Apple Keyboard, class 0/0, rev 2.00/0.69, addr 6> on usbus0
kbd1 at ukbd0
Root mount waiting for: usbus0
ugen0.7: <vendor 0x0b05> at usbus0
mountroot: waiting for device /dev/ufs/FreeBSD_Install...
GEOM: diskid/DISK-AA010513132339535615: the secondary GPT header is not in the last LBA.
GEOM: diskid/DISK-AA010513132339535615: the secondary GPT header is not in the last LBA.
uhid0: <Apple, Inc Apple Keyboard, class 0/0, rev 2.00/0.69, addr 6> on usbus0
rsu0: <vendor 0x0b05 product 0x1786, class 0/0, rev 2.00/2.00, addr 7> on usbus0
rsu0: MAC/BB RTL8712 cut 3 1T1R
rsu0: rsu_attach: enabling 11n
wlan0: Ethernet address: c8:60:00:5d:f8:00
wlan0: link state changed to UP

Unfortunately:

  • the internal disk was unaccessible to FreeBSD
  • the internal wifi adapter wasn't detected by FreeBSD

Figuring these out is at this time is beyond my knowledge. (Could be missing drivers, protected storage, etc.)

My use case for this device is digital signage or an SSH client dumb terminal, so we'll see what other OS I can load or if I have to stick with "Windows 8.1 with Bing"

Update

Linuxium got Ubuntu 14.04.2 working, I've consolidated Ian Morrison's scripts here:

https://github.com/johnko/ubuntu-14.04.2-desktop-amd64-intel-compute-stick

Pro

For $169.99, it's a pretty good device that runs a basic version of Windows 8.1.

Con

Can't use WiFi and Bluetooth at the same time or the WiFi will slow to a crawl. (Found out while using Ubuntu)

@UnitedMarsupials-zz
Copy link

Thanks for the report! Two notes:

  • if the RAM size is only 2GB, why not use The 32bit version of the OS?
  • the Amazon seller of a these states, the internal storage is Samsung’s EMCC — should be usable

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment