ARM Beagleboard: Difference between revisions
[unchecked revision] | [unchecked revision] |
Content deleted Content added
m Bot: Replace deprecated source tag with syntaxhighlight |
|||
(12 intermediate revisions by 3 users not shown) | |||
Line 6:
==Intro==
This is a tutorial on bare-metal [OS] development on the Texas Instruments BeagleBoard. This tutorial is written specifically for the
Experience in Linux/
=== Materials ===
You will need a:
* '''
* An '''RS-232''' serial port. This is the kind of serial port on the back of your x86 PC, and on the
* A serial cable that comes to '''DB-9 Male''' on at least one side (to connect to the
* '''Debian, or other *nix with arm-binutils''' [guide will document installation for Debian]
* '''Power supply''' for your
* '''A copy of the ARM ARM (ARM Architecture Reference Manual) (download a PDF, make sure it's the new one, with ARMv7 stuff)'''
* '''A copy of the OMAP35x/DM37x TRM (Technical Reference Manual)''' <-- ^ ''THESE ARE INCREDIBLY IMPORTANT!''
:* '''Optional:''' Various peripherals for the
==Getting Started==
Line 27:
First things first, you're going to want to make sure all your hardware works. Set up your serial port, however yours works, and open up minicom. Make sure you have flow control turned off.
Now jumper '''PIN 2 (RX)''' to '''PIN 3 (TX)''' on the DB-9 side. Just type some characters into minicom, and they should be echoed back.
Ensure you can run at 115200 baud, 8N1, which is what you will use to connect to the
If you get 'Permission Denied' '''do NOT become root!''' This is unnecessary. Instead do:
<
sudo adduser <user> dialout
</syntaxhighlight>
This will let your user use serial ports without needing root.
Or do ls -l /dev/ttyS* to find out the group that own the device, then add you into that group under /etc/group (normally the group is uucp)
===Testing the
Follow the guide here http://elinux.org/BeagleBoardDebian#Debian_armhf_port to install the Debian armhf image to a
Connect the
You should get some meaningful output. Unplug your
===Getting an assembler===
Line 50:
Append:
<
deb http://www.emdebian.org/debian/ squeeze main
</syntaxhighlight>
to your /etc/apt/sources.list, changing 'squeeze' for your version of Debian - I'm running wheezy, for example.
now run:
<
sudo aptitude update
sudo aptitude install gcc-4.4-arm-linux-gnueabi # check this! it might be an older version for non-wheezy...
</syntaxhighlight>
That will install a C compiler, and also install
==Writing some CODE!==
Line 75:
Take note of what it does. It's pretty simple. Refer to docs if necessary.
<
/* rammap */
MEMORY
Line 86:
.text : { *(.text*) } > ram
}
</syntaxhighlight>
===Makefile===
Line 92:
This is the basic makefile I use. It's similar to the one on the stackoverflow link.
<
ARMGNU = arm-linux-gnueabi
Line 104:
$(ARMGNU)-objcopy boot.elf -O srec boot.srec
$(ARMGNU)-objcopy boot.elf -O binary boot.bin
</syntaxhighlight>
===Assembly!===
Line 114:
====boot.asm====
<tt><
#UART base locations from the TRM
.equ UART1.BASE, 0x4806A000
Line 141:
# (branch (jump, JMP) to _hang)
# b _hang
</
==='Compiling' it===
Line 149:
==Executing code on the device==
Remember that
===Introduction to u-boot===
Reset your
You should see:
<
U-Boot 2011.03-rc1-00000-g9a3cc57-dirty (Apr 04 2011 - 12:36:16)
Line 175:
Die ID #2e7000029ff80000016842c813020023
Hit any key to stop autoboot: 3
</syntaxhighlight>
Hit a key. Before Linux loads.
<
OMAP3 beagleboard.org #
</syntaxhighlight>
Whee, a u-boot prompt.
Line 187:
===Loading code===
Now it's time to load our code into RAM. To do this, we will use 'loady' and the y-modem protocol. We can do all this from
Just type 'loady'. Don't worry about being fast on your first go, you'll miss it anyway.
<
OMAP3 beagleboard.org # loady
## Ready for binary (ymodem) download to 0x80200000 at 115200 bps...
</syntaxhighlight>
Now hit Ctrl+A. A bar will appear at the bottom.
Line 210:
Ctrl+C out of the ymodem transfer window if nothing happens.
Reset your
Be patient, ymodem can take a few seconds to 'sync'.
After the file is loaded into RAM,
<
READY: Press any key.
</syntaxhighlight>
and
<
Cm - CRC mode, 9(SOH)/0(STX)/0(CAN) packets, 3 retries
## Total Size = 0x00000350 = 848 Bytes
OMAP3 beagleboard.org #
</syntaxhighlight>
is printed (my file is bigger... don't worry about that), we just have to execute the code in memory!
Line 229:
Execution is started from an address with 'go'. Our _start address is 0x80200000. So, we type:
<
OMAP3 beagleboard.org # go 0x80200000
</syntaxhighlight>
and we should get:
<
## Starting application at 0x80200000 ...
!
</syntaxhighlight>
If you get that, congratulations! You've just written an 'Operating' System (;)) for the
==What to do now==
|