Many CSE students have Linux machines which they would like to be able to use to work away from the CSE labs. The following is a guide as to how to set up the necessary drivers/software if you wish to work locally. These instructions will be distribution specific (for Ubuntu) but they should at least give you an idea of how to set up other distributions.
The components you will need to install are:
Updated based on Ubuntu 12.04, tested on 13.04.
The Ubuntu default version of gcc-arm seems to work fine.
apt-get install gcc-arm-linux-gnueabi
NOTE: After checking out the AOS codebase, you will need to change the cross compiler prefix to arm-linux-gnueabi-
.
Do this by running make menuconfig
from the checked out check out source directory, and then going to Toolchain Options
.
If you have problems with this compiler, a precompiled 32bit cross compiler has been provided for you:
Linux 32bit cross compilerOnce the file has downloaded, install it by using the following commands
sudo mkdir -p /opt sudo tar -xf arm-2013.05-24-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C /opt export PATH=/opt/arm-2013.05/bin:$PATH
In this case, your cross compiler prefix should be set to arm-none-linux-gnueabi-
.
The Ubuntu USB serial and USB ethernet drivers seem to work by default.
You may need to install some of the following packages:
apt-get install build-essential mercurial
apt-get install libncurses5-dev
apt-get install netcat.traditional
update-alternatives --set nc /bin/nc.traditional
apt-get install picocom minicom
apt-get install tftpd-hpa tftp-hpa
apt-get install nfs-kernel-server
apt-get install xinetd
Unfortunately, newer Ubuntu distributions include the 'easy to use'
NetworkManager, which destroys everything. You could use the NetworkManager GUI to set
a static ip of 192.168.168.1
to keep NetworkManager happy. Or alternatively, add the following lines
to /etc/network/interfaces
:
Then, restart NetworkManager, and bring up the interface:
iface eth1 inet static
address 192.168.168.1
netmask 255.255.255.0
sudo service network-manager restart
sudo ifup eth1
After installing the tftpd-hpa
package, the
default Ubuntu tftp directory will be /var/lib/tftpboot
. You
will either need to modify our helper scripts to match the new
default, or modify /etc/default/tftpd-hpa
,
i.e. change TFTP_DIRECTORY
to match our source.
You may need to adjust ownership and/or permissions to allow
you access to the directory (e.g. chmod a+rwx
/var/lib/tftpboot
if you are in a benign environment.
Our source expects the tftp directory to be /var/tftpboot/$USER.
Configure xinetd
to serve time by
editing /etc/xinetd.d/time
to set disable =
no
, and restart via sudo service xinetd restart
.
# default: off
# description: An RFC 868 time server. This protocol provides a
# site-independent, machine readable date and time. The Time service sends back
# to the originating source the time in seconds since midnight on January first
# 1900.
# This is the tcp version.
service time
{
disable = no
type = INTERNAL
id = time-stream
socket_type = stream
protocol = tcpar
user = root
wait = no
}
# This is the udp version.
service time
{
disable = no
type = INTERNAL
id = time-dgram
socket_type = dgram
protocol = udp
user = root
wait = yes
}
Apparently, for some versions of ubuntu there was no obvious ways to coerce xinetd into serving TIME. On the other hand, it's a 5-line Java program, so writing a server for it is left as an exercise to the reader. Have a read of this.
Make sure NFS server is installed:
$ apt-get install nfs-kernel-server nfs-common
Then set up the exports by editing /etc/exports
and adding the following lines (adjusted for the location of your tftp root directory and your username):
/var/tftpboot/USERNAME 192.168.168.2(rw,sync,all_squash,subtree_check,anonuid=UID,anongid=GID)
Substitute /var/tftpbootUSERNAME
to whatever is set TFTP_DIRECTORY
to in your tftpd configuration.
Add your account to group dialout
to give access
to /dev/ttyUSB0
. You'll need to logout and back in to
update your groups. If you skip this minicom may need root permissions to run.
dmesg
to work out which port the USB to serial converter has been attached to
(its usually /dev/ttyUSB0
). Then set minicom to use that serial port, 115200 baud rate, 8N1, and no hardware flow
control, using sudo minicom -s /dev/ttyUSB0
.