User Tools

Site Tools


developersguide:minixonarm

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
developersguide:minixonarm [2014/12/02 18:46]
dcvmoole remove some small leftovers from the old wiki
developersguide:minixonarm [2021/07/10 15:29]
stux [Want to contribute?]
Line 1: Line 1:
 +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 its 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)| @#​aaffaa:​yes | @#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| @#​aaffaa:​yes | @#​aaffaa:​yes | @#ffaaaa:no |
 +| usb mass storage| @#​aaffaa:​yes | @#​aaffaa:​yes | @#ffaaaa:no |
 +| usb hubs| @#​aaffaa:​yes | @#​aaffaa:​yes | @#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 |
 +
 +Please note that pkgsrc, the package repository used by MINIX3, is not yet available on ARM at this moment. See [[developersguide:​pkgsrconarm|this document]] for an explanation as to why and how we hope to move forward on this.
 +
 +Note that the framebuffer (fb) driver is not supported on the Black and White models. ​ You will need a serial interface cable to connect. ​ Please review [[http://​dave.cheney.net/​2013/​09/​22/​two-point-five-ways-to-access-the-serial-console-on-your-beaglebone-black | Dave Cheney'​s article]] on connecting via the serial port.  Users of Apple products may want to review [[http://​pbxbook.com/​other/​mac-tty.html | Mike's PBX Cookbook article]] on using Terminal for serial communication. ​ In Terminal, the command '​screen /​dev/​tty.usbmodem* 115200'​ works well (replace the * with the appropriate label).
 +====== Building Minix/​ARM ​ ======
 +
 +First do a checkout of the code
 +
 +<​code>​
 +$ mkdir -p $HOME/minix
 +$ cd $HOME/minix
 +$ git clone git://​git.minix3.org/​minix src
 +$ cd src
 +</​code>​
 +
 +Secondly configure your build by creating a .settings file. 
 +
 +For the BeagleBoard-xM use these settings:
 +<​code>​
 +# beagleboard-xm
 +U_BOOT_BIN_DIR=build/​omap3_beagle/​
 +CONSOLE=tty02
 +</​code>​
 +
 +For the BeagleBone(s) use the following settings:
 +<​code>​
 +#beaglebone (and black)
 +U_BOOT_BIN_DIR=build/​am335x_evm/​
 +CONSOLE=tty00
 +</​code>​
 +
 +Now launch the build by calling the image creation script (This will call the [[DevelopersGuide:​Crosscompiling]] script with a machine set to "​evbearm-el"​. NOTE: if you get errors during this step, please check that page!):
 +<​code>​
 +$ ./​releasetools/​arm_sdimage.sh
 +</​code>​
 +
 +If you receive the error "​**Skipping image creation: missing tool '​mcopy'"​ do
 +
 +<​code>​
 +pkgin install mtools
 +</​code>​
 +
 +If there are no errors, 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:
 +<​code>​
 +sudo dd if=minix_arm_sd.img of=/​dev/​mmcblk0 bs=1M oflag=direct
 +</​code>​
 +
 +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 (or BeagleBone) 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.
 +
 +<​code>​
 +## 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:
 +</​code>​
 +
 +====== 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.
 +<​code>​
 +mv /​etc/​rc.daemons.dist /​etc/​rc.daemons
 +vi /​etc/​rc.daemons
 +</​code>​
 +
 +Restart the system for the changes to take effect.
 +<​code>​
 +reboot
 +</​code>​
 +
 +If the system hangs on reboot after starting the service '​random,'​ shut down the board entirely, then bring it back up. This will completely reset the ethernet chip and prevent issues when bringing up the inet interface from a non-default configuration. ​ Typing '​Control-c'​ will interrupt the multi-user boot process and go to single user.  Type
 +
 +<​code>​
 +shutdown -h now
 +</​code>​
 +
 +to properly unmount the file system and shut down.  Unplug the power supply from the board, wait briefly, then plug the power supply back in.
 +====== 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.
 +
 +====== ARM Manuals ======
 +
 +The ARM Cortex-A8 processor is used in the Minix-supported BeagleBoard and BeagleBone devices. Many ARM documents require registration and some are behind a paywall, but the following is freely available from the ARM site as of October 2016:
 +
 +  * [[http://​infocenter.arm.com/​help/​topic/​com.arm.doc.ddi0344k/​DDI0344K_cortex_a8_r3p2_trm.pdf|Cortex-A8 Revision: r3p2 Technical Reference Manual]]
developersguide/minixonarm.txt · Last modified: 2021/07/10 15:29 by stux