I have an ExoPC Slate which I acquired from the Intel MeeGo developer program some time back. I'm not working on MeeGo though, and I wanted to run FreeBSD on it instead. This file contains information on how I did it. There are files in this directory that I have acquired/modified along the way which may prove useful to others. Q: What OS are you using on your ExoPC Slate? A: FreeBSD/i386 9.1-RELEASE Q: The ExoPC Slate has an Atom N450 processor which supports 64-bit mode. Why aren't you using FreeBSD/amd64? A: I tried it. For the most part it seems to work fine, however I noticed that accelerated graphics performance wasn't as good. (In particular, the GL screen savers in KDE didn't seem to run as fast.) I'm not sure why this was the case, but since the Slate only has 2GB of RAM and can't be upgraded, there's not much benefit to running a 64-bit OS anyway. Q: What desktop are you using? A: KDE4 Q: Does suspend/resume work? A: Mostly. I can run 'zzz' and it will suspend and resume correctly *unless* I'm using X. With the X server running, the graphics aren't always restored correctly. I think this may be because the support for the Pineview graphics is buggy. (See below.) Q: How do you type with it? A: I use a bluetooth keyboard. Sometimes I use a USB keyboard instead. Q: How do you network with it? A: I typically use the built-in wifi with the wifi network at work or the hotspot feature in my phone. I can also tether to my phone via bluetooth. Occasionally I use a USB ethernet adapter. Q: Do you dual boot with MeeGo? A: I used to do that, but I wanted to use all the available disk space for FreeBSD so I got rid of the MeeGo partition. Q: How did you install FreeBSD? A: I used the memstick image and a USB thumb drive, along with a USB keyboard. When the tablet powers up, you can tap the 'BBS' area on the screen to bring up a boot selection menu, and then choose to boot from the USB thumb drive instead of the internal SSD. From there you just follow the installer menus. Once the basic install was done, I rebooted and started up the wifi interface and used that to install packages from the interwebs. Q: When I launch X, the screen goes black and stays that way. What's wrong? A: The xf86-video-intel driver used with FreeBSD 9.1 has a bug in it related to the Pineview graphics controller on the ExpoPC Slate. The i830_disable_fb_compression_8xx() function attempts to check a status register bit to determine when to return, but the bit never clears. As a result, when this function is called during the X server start-up, it stalls forever with a black screen. (The machine is still running, but you can't see anything.) There are two ways to deal with this. The simplest is to add an extra option to the Driver section in the xorg.conf file that disables frame buffer compression. This option is specific to the Intel video driver. After you run "X -configure" to autogenerate an xorg.conf file, go to the Device section and add the following line: Option "FrameBufferCompression" "False" The X server should start normally. The second option is to apply a small patch to the xf86-video-intel driver. I modified the code to only test the status bit a fixed number of times before giving up. The patch is i830_display.c.diff. With this fix, I can get accelerated graphics working properly. You can apply this patch to /usr/ports/x11-drivers/xf86-video-intel and rebuild the driver to work around this. Note that may still be some stability issues, however I am not really qualified to debug them. For the most part, the X server seems usable. I don't play any fancy, graphics-intensive games though. Q: Does the VESA display driver work? A: Yes, but then you get reduced resolution and no acceleration. Q: How can I get bluetooth to work? A: The ExpoPC Slate uses an Atheros bluetooth controller, but you have to load a firmware image into it in order to use it. This must be done with the ath3kw(8) utilty. But there's a problem: there are two versions of the firmware out there, ath3k-1.fw and ath3k-2.fw, and while the vast majority of systems need the former, the ExoPC Slate needs the latter. Sadly, the Linux developers seem to think there aren't any machines out there which need the ath3k-2.fw file, which makes it very difficult to find. I have provided a copy here. Note that you need to patch the ath3kw(8) utility to use it, as the device on the Slate has different USB vendor/device ID values than what ath3kw(8) expects. Once you patch the utility and load the firmware, you should have a working ubt0 device. Note that this may be fixed in 9.2-RELEASE. Q: How can I get the touch screen to work? A: This is a thorny issue. The eGalax touch screen on the Slate is a USB HID device, which exports several "collections." Each collection is basically a different interface to the panel hardware. There's a gesture-based collection, a stylus-based collection, a "Microsoft" collection (who knows what purpose it serves) and a mouse emulation mode collection. The FreeBSD ums(4) USB mouse driver binds to the mouse emulation collection, however it doesn't work right: it's unable to handle the X and Y coordinate descriptors properly, so while it responds to screen taps as button presses, you can't move the cursor. Unfortunately, I don't know enough about the USB HID spec to fix it. To get around this, I used Alexander Motin's patch for the xf86-input-mouse driver as described here: http://lists.freebsd.org/pipermail/freebsd-x11/2011-July/011011.html The steps I used are as follows: 1) recompile the kernel so that the uhid(4) and ums(4) drivers are excluded. 2) patch the uhid.c driver so that it will bind to mouse class devices. (By default, uhid(4) ignores HID devices that obey the mouse protocol so that ums(4) can claim them, but in this case we purposely want to prevent ums(4) from claiming control on the touch screen.) 3) add the following to /boot/loader.conf: uhid_load="YES" This forces the patched uhid.ko module to be loaded along with the kernel at boot time. I found that even if you don't compile ums(4) into the kernel, ums.ko will be automatically loaded to handle mouse devices unless someone else grabs them first. Loading uhid.ko from loader.conf ensures that the uhid(4) driver gets first crack at claiming the tablet device. 4) patch the xf86-input-mouse driver with the patch-zz-input-mouse9 (for 9.0) or patch-zz-input-mouse9.1.7.1 (for 9.1) file. This allows the mouse input driver to handle HID devices directly via USB instead of through sysmouse. 5) use the xorg.conf.intel_touchscreen that's provided here. This uses the Intel video driver and uses the USB protocol for the mouse instead of sysmouse. Note that it selects collection #2 on the touch screen, rather than the default of 1. With these steps, the touch screen is recognized by the kernel as a generic human interface device, and the mouse input driver is modified to access it directly. The touch screen works in X, but only in mouse emulation mode. The 'Option "Collection "2"' line in xorg.conf mentioned above forces this. If you don't include this line, it tries to use the gesture-based modes which don't seem to work. But then, by default X doesn't support gestures so this is really the best you can do. (If you know different, please tell me.) The cursor follows your finger, and you can tap to do a button press. It can be frustrating at times if you try to click on something small on the screen. It's not perfect, but it saves you from using a separate mouse. Q: How do I use the built-in camera? A: The built-in Chicony USB webcam works out of the box with FreeBSD 9.0/9.1. Just install the webcamd, cuse4bsd-kmod and pwcview packages. Don't forget to set webcamd_enable="YES" in /etc/rc.conf. You can run pwcview to see the input from the camera and take pictures with it. Note that by default, webcamd will create /dev/video0 such that you need to be root to access it with pwcview. If you do chmod 666 /dev/video0, you can access it as any user. I don't know if there are any other video-aware apps that will work with this arrangement. Q: How do I use the built-in wifi? A: The built-in Atheros wifi works out of the box with FreeBSD 9.0/9.1. Q: How do I use the built-in sound hardware? A: The built-in RealTek audio hardware works out of the box with FreeBSD 9.0/9.1 Note: the tablet has a headphone jack, but no speaker jack. The speaker is built in (it's near the top center of the tablet, next to the camera port). It works, but tends to pick up noise from the fan when it's running. Q: How do I use the built-in SD card slot? A: The built-in SD card slot works out of the box with FreeBSD 9.0/9.1. It's handled as a standard USB mass storage device. Just plug and play. Q: What's up with the funky screen dimming? A: The backlight for the display will dim automatically when AC cable is unplugged, however for whatever the reason it does not automatically return to full brightness when the AC cable is reconnected. Also, the tablet seems to be designed to sense ambient light conditions somehow so that it can adjust the screen brightness automatically. Unfortnately this seems to work very unreliably, and the screen may seem to change brightness apparently at random. You can manually control the backlight control if you load the acpi_video.ko module. Make sure you add the followinf to /boot/loader.conf: acpi_video_load="YES" You can then use the sysctl command to change the backlight setting to any of 16 values (with 15 being full brightness). Q: Are there any devices in the ExoPC Slate that don't work at all with FreeBSD? A: The following devices don't work in FreeBSD: o Broadcom Crystal HD video decoder -- video playback accelerator, supported in Linux but not FreeBSD. Video playback with mplayer is still pretty fast though. o When I had MeeGo running on my Slate, it was able to automatically change the screen orientation from landscape to portrait depending on how I was holding it. The tablet has a built-in accelerometer for this, however I have no idea how you're supposed to interface to it. o Ambient light sensor