This page describes how to build and run Minix/ARM.
====== Target ======
The Minix ARM port targets the
[[http://beagleboard.org/hardware-xm|BeagleBoard-xM]] and it's QEMU based emulator,
the [[http://beagleboard.org/Products/BeagleBone|BeagleBone]]
and the [[http://beagleboard.org/Products/BeagleBone%20Black|BeagleBone Black]] products from the BeagleBoard community. These are all based on system on chip designs from TI and all contain a Cortex-A8 ARM core.
The code is developed and integrated in the same (master) code branch as the official MINIX3 x86 port.
===== Feature Matrix =====
This is a preliminary list of what's supported and what isn't. Feel free to add anything important that was left off the list and/or update the list with the latest developments.
|<90%>|
| @#E0E0FF:**Drivers**| @#E0E0FF:**BeagleBone Black**| @#E0E0FF:**BeagleBone (White)** | @#E0E0FF:**BeagleBoard-xM** |
| tty (Terminal)| @#aaffaa:yes | @#aaffaa:yes | @#aaffaa:yes |
| mmc (Multimedia Card)| @#aaffaa:yes | @#aaffaa:yes | @#aaffaa:yes |
| eMMC (Internal Multimedia Card)| @#ffaaaa:no | @#ffaaaa:no | @#ffaaaa:no |
| i2c (Inter-Integrated Circuit)| @#aaffaa:yes | @#aaffaa:yes | @#aaffaa:yes |
| fb (Frame Buffer)| @#ffaaaa:no | @#ffaaaa:no | @#aaffaa:yes |
| EDID Reading (Extended Display Identification Data)| @#aaffaa:yes | @#aaffaa:yes | @#aaffaa:yes |
| eeprom | @#aaffaa:yes | @#aaffaa:yes | @#aaffaa:yes |
| gpio (General Purpose Input/Output)| @#aaffaa:yes | @#aaffaa:yes | @#aaffaa:yes |
| readclock | @#aaffaa:yes | @#aaffaa:yes | @#aaffaa:yes |
| PMIC (Power Management IC)| @#aaffaa:yes | @#aaffaa:yes | @#aaffaa:yes |
| ethernet | @#aaffaa:yes | @#aaffaa:yes | @#ffaaaa:no |
| usb (Universal Serial Bus) HCD| @#ffffaa:exp. | @#ffffaa:exp. | @#ffaaaa:no |
| usb mass storage| @#ffffaa:exp. | @#ffffaa:exp. | @#ffaaaa:no |
| usb hubs| @#ffffaa:exp. | @#ffffaa:exp. | @#ffaaaa:no |
| spi (Serial Peripheral Interface Bus)| @#ffaaaa:no | @#ffaaaa:no | @#ffaaaa:no |
| pwm (Pulse-width modulation)| @#ffaaaa:no | @#ffaaaa:no | @#ffaaaa:no |
| adc (Analog to Digital Converter)| @#ffaaaa:no | @#ffaaaa:no | @#ffaaaa:no |
| audio | @#ffaaaa:no | @#ffaaaa:no | @#ffaaaa:no |
| @#E0E0FF:**Kernel Features**| @#E0E0FF:**BeagleBone Black**| @#E0E0FF:**BeagleBone (White)** | @#E0E0FF:**BeagleBoard-xM** |
| reboot | @#aaffaa:yes | @#aaffaa:yes | @#aaffaa:yes |
| Power-Off | @#aaffaa:yes | @#aaffaa:yes | @#ffaaaa:no |
| @#E0E0FF:**Miscellaneous Features**| @#E0E0FF:**BeagleBone Black**| @#E0E0FF:**BeagleBone (White)** | @#E0E0FF:**BeagleBoard-xM** |
| Capes / Expansion Boards | @#aaffaa:yes | @#aaffaa:yes | @#ffaaaa:no |
|<90%>|
| @#E0E0FF:**Supported Capes / Expansion Boards**| @#E0E0FF:**Status** |
|[[http://circuitco.com/support/index.php?title=BeagleBone_Weather|BeagleBone Weather]] | @#aaffaa:yes |
====== Building Minix/ARM ======
First do a checkout of the code
$ mkdir -p $HOME/minix
$ cd $HOME/minix
$ git clone git://git.minix3.org/minix src
$ cd src
Secondly configure your build by creating a .settings file.
For the BeagleBoard-xM use these settings:
# beagleboard-xm
U_BOOT_BIN_DIR=build/omap3_beagle/
CONSOLE=tty02
For the BeagleBone(s) use the following settings:
#beaglebone (and black)
U_BOOT_BIN_DIR=build/am335x_evm/
CONSOLE=tty00
Now launch the build by calling the image creation script (This will call the [[DevelopersGuide:Crosscompiling]] with a machine set to "evbearm-el"):
$ ./releasetools/arm_sdimage.sh
The result is a file called minix_arm_sd.img in your src directory. This image can be copied onto an SD-Card using dd:
sudo dd if=minix_arm_sd.img of=/dev/mmcblk0 bs=1M oflag=direct
WARNING Just make sure your file system did not mount the sd-card while you where dd'ing.
====== Running Minix/ARM ======
Once the sd-card is inserted on the !BeagleBoard-xM press the reset button and watch the serial for messages. Alternatively you can start the same image in the emulator (Read about that in [[.:minixonlinaroqemuarm]]). for information on network booting, see the [[developersguide:netbootingarm|Netbooting ARM]] article.
## Starting application at 0x80200000 ...
MINIX booting
MINIX 3.2.1. Copyright 2012, Vrije Universiteit, Amsterdam, The Netherlands
MINIX is open source software, see http://www.minix3.org
Started VFS: 8 worker thread(s)
starting mmc driver
mmc_block(info)Initializing the MMC block device
mmc_host_mmchs(info)Using instance number 0
mmc_block(info)System event framework fresh start
Root device name is /dev/c0d0p1s0
/dev/c0d0p1s0: clean
/dev/c0d0p1s0 is mounted on /
none is mounted on /proc
date: timed: no such device or address
Tue Jan 1 00:00:00 GMT 2013
/dev/c0d0p1s2: clean
/dev/c0d0p1s1: clean
size on /dev/imgrd set to 0kB
Multiuser startup in progress ...
Starting services: randomrm /dev/eth0
rm /dev/eth
mknod /dev/psip0 c 7 1
ln /dev/psip0 /dev/psip
mknod /dev/ip0 c 7 2
ln /dev/ip0 /dev/ip
mknod /dev/tcp0 c 7 3
ln /dev/tcp0 /dev/tcp
mknod /dev/udp0 c 7 4
ln /dev/udp0 /dev/udp
mknod /dev/ipstat c 7 0
inet: unable to read random data from /dev/random: resource temporarily unavailable
inet: using current time for random-number seed
inet ipc.
Starting daemons: update cron syslogd.
Starting networking: nonamed.
Local packages (start): done.
Minix Release 3 Version 2.1 (console)
10.0.0.1 login:
====== Ethernet Configuration ======
If you're using a BeagleBone or BeagleBone Black, there is an ethernet driver available. It's configured through ''/etc/inet.conf''. Running ''netconf'' as usual will let you select the right driver, which is ''lan8710a''.
To enable services like telnet/ftp/etc you can create an ''rc.daemons'' file.
mv /etc/rc.daemons.dist /etc/rc.daemons
vi /etc/rc.daemons
Restart the system for the changes to take effect.
reboot
====== Videos ======
* A video showing the above steps of obtaining and building the system [[https://www.youtube.com/watch?v=J9UOtVU6lKY|is here]].
* A video showing how to use gdb to debug a minix from a qemu [[https://www.youtube.com/watch?v=Wni_Yw-2b88|is here]].
* A video showing how to use Code Composer studio to debug the !BeagleBone White [[https://www.youtube.com/watch?v=ra8STql8pJM|is here]].
====== Want to contribute? ======
Great, that's what I wanted to hear! Help with documentation, making the above procedure more clean, hardware support, debugging, running the test set and finding and debugging problems! Check the [[:resources|resources page]] for more information on how to join the community.
See ARM-specific (or not ARM-specific!) points on the [[:Wishlist:]] page for the current list of todo's.