...
Many instructions here are mirrored from Toby Schneider's instructions at http://gobysoft.org/wiki/InstallOnGumstixOvero.
Root filesystem preparation
Follow these steps to create a debian wheezy root filesystem. In this section we will use # host
to indicate commands run on the host machine, and # chroot
for commands commands run inside the chroot filesystem.
Install dependencies:
Code Block # host sudo apt-get install multistrap qemu-user-static
- Pick a working folder, in this case
~/duovero
Create a directory to hold the root filesystem:
Code Block # host cd ~/duovero mkdir rootfs
Create a configuration file debian.conf in ~/duovero and paste in the following. Additional packages can be included here or installed later using apt-get.
Code Block [General] arch=armel directory=~/duovero/rootfs retainsources=~/duovero/sources cleanup=true noauth=true unpack=true bootstrap=Wheezy Net Utils aptsources=Wheezy [Wheezy] packages=apt locales udev adduser sudo nano build-essential less source=http://mv.ezproxy.com.ezproxyberklee.flo.org/debian suite=wheezy [Net] packages=netbase ifupdown iproute net-tools iputils-ping ntp source=http://mv.ezproxy.com.ezproxyberklee.flo.org/debian [Utils] packages=wget source=http://mv.ezproxy.com.ezproxyberklee.flo.org/debian
Run multistrap to create the root filesystem.
Code Block # host sudo multistrap -a armel -d ~/duovero/rootfs -f debian.conf
In ubuntu 14.04 you may need to remove $forceyes from /usr/sbin/multistrap at line 989
Copy the QEMU ARM emulator into the new root filesystem so it is on the path when we chroot in.
Code Block # host sudo cp /usr/bin/qemu-arm-static ~/duovero/rootfs/usbusr/bin/
(Optional) If you need
/dev/random
(for installing openssh-server for example), mount/dev
in the chroot.Code Block # host sudo mount -o bind /dev ~/gumstixduovero/rootfs/dev
Chroot into the new filesystem.
Code Block # host sudo chroot ~/duovero/rootfs /bin/bash
Finish setting up packages
Code Block # chroot dpkg --configure -a
Answer "no" when prompted to use "dash" as "/bin/sh". If any packages fail to configure (possibly
ifupdown
), just rundpkg
again.Set the root user password.
Code Block # chroot passwd
(Optional) Add a new user and give it sudo permissions
Code Block # chroot adduser mit printf "mit ALL=(ALL) ALL" >> /etc/sudoers
Configure locales. Choose 136 138 for en_US.UTF-8.
Code Block # chroot dpkg-reconfigure locales
Add a DNS server
Code Block # chroot printf "nameserver 8.8.8.8" > /etc/resolv.conf
Add a static network entry for
eth0
(install theisc-dhcp-client
package for dhcp support)Code Block # chroot nano /etc/network/interfaces auto eth0 iface eth0 inet static address 192.168.1.102 netmask 255.255.255.0 gateway 192.168.1.1
Restart networking to apply the new interface.
Code Block # chroot /etc/init.d/networking restart
This might yield an error, but try pinging something anyways and it should work.
Update the apt repositories
Code Block # chroot apt-get update
Assign a hostname and update the hosts file
Code Block # chroot printf "nostromo" > /etc/hostname printf "127.0.0.1 nostromo\n" >> /etc/hosts
Add the serial console (specific to gumstix overo and duovero)
Code Block # chroot printf "T0:2345:respawn:/sbin/getty -L 115200 ttyO2 vt102\n" >> /etc/inittab
Add a proc filesystem to fstab
Code Block # chroot nano /etc/fstab # /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0
...
To avoid permission issues, you should use your user account (not the root account) to check out subversion or git repos. Sudo
may not work in the chroot environment, so you may still need to use the root account for operations that require root access.
...
Kernel Preparation
Install dependencies
Code Block |
---|
sudo apt-get install u-boot-tools g++-arm-linux-gnueabi |
Download the kernel
Code Block |
---|
cd # currently defaults to 4.7duovero mkdir kernel-dev cd duovero/kernel-dev git clone git://github.com/gumstix/linux.git linux -b omap-3.6 cp config linux/.config |
Software setup
Deploy to SD card
Copy the duovero config from the hovergroup svn and create a .config file.
Code Block |
---|
cd linux
cp ~/hovergroup/gumstix-dev/duovero/defconfig arch/arm/configs/duovero_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- duovero_defconfig |
Build the kernel and modules
Code Block |
---|
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- uImage -j2
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules -j2 |
The resulting uImage should be built in arch/arm/boot. Modules will be installed by the script that makes the SD card.
...
Software setup
If it isn't already, mount /dev in the chroot:
Code Block |
---|
# host
sudo mount -o bind /dev ~/duovero/rootfs/dev |
Enter the chroot and start by installing some additional packages.
Code Block |
---|
# chroot
apt-get install module-init-tools openssh-server screen psmisc |
Add the main user to the dialout group so it can access serial ports.
Code Block |
---|
# chroot
usermod -a -G dialout mit |
Follow the steps at Software Installation to install MOOS, MOOS-IvP, Goby, and the hovergroup applications. Make sure you perform these steps as the user account you created, not root. You may wish to install distcc first to speed up compiling - see next section for instructions. Even if compiling inside the chroot, you may still want to set the compiler to distcc to avoid completely recompiling later. Distcc will complain about not being able to distribute the compile job but will revert to using local compilation just fine.
Setup Distcc
First on the gumstix/chroot side. The debian wheezy image we built includes g++-4.6 by default, but Ubuntu 14.04 only has the cross compiler for 4.7, so we'll install 4.7 along with distcc.
Code Block |
---|
# chroot
apt-get install g++-4.7 distcc |
There should be some symlinks in /usr/lib/distcc as follows:
Code Block |
---|
# chroot
arm-linux-gnueabi-g++-4.7 -> ../../bin/distcc
arm-linux-gnueabi-gcc-4.7 -> ../../bin/distcc |
The cross compiler on the host machine will need to match the g++/gcc version listed in your symlinks. To make distcc the default compiler add the following lines to your ~/.bashrc file:
Code Block |
---|
# chroot
export CC=/usr/lib/distcc/arm-linux-gnueabi-gcc-4.7
export CXX=/usr/lib/distcc/arm-linux-gnueabi-g++-4.7
export DISTCC_HOST=192.168.1.100 # default remote host to use |
On the machine you want to distribute the compile jobs too (host) install distcc and the cross compiler.
Code Block |
---|
# host
sudo apt-get install distcc g++-4.7-arm-linux-gnueabi |
Add two new symlinks in /usr/lib/distcc
Code Block |
---|
# host
cd /usr/lib/distcc
sudo ln -s ../../bin/distcc arm-linux-gnueabi-g++-4.7
sudo ln -s ../../bin/distcc arm-linux-gnueabi-gcc-4.7 |
Run the distcc daemon on the host
Code Block |
---|
# host
distccd --daemon --allow '192.168.1.0/24' |
You can add this command to ~/.profile to run on login.
RTKLIB Setup
The required files are included in the third-party folder of the hovergroup svn. Start by building the rtklib applications:
Code Block |
---|
# chroot
~/hoverland/hover-kayak/third-party/rtklib/app/makeall.sh |
Then set the launch scripts corresponding to your vehicle to automatically start
Code Block |
---|
# chroot
cd /etc/init.d
sudo ln -s /home/mit/hoverland/hover-kayak/third_party/josh_rtklib/start_silvana.sh start_kayak.sh
sudo ln -s /home/mit/hoverland/hover-kayak/third_party/josh_rtklib/start_rtkrcv.sh start_rtkrcv.sh
sudo update-rc.d start_kayak.sh defaults
sudo update-rc.d start_rtkrcv.sh defaults |
For some reason this doesn't seem to work when copy pasted, so you may need to type it in.
Other Modifications
Set permissions on screen at startup
Code Block |
---|
# chroot
nano /etc/rc.local
chmod 777 /var/run/screen |
Allow [machine] auto ssh login to [remote]
This is required for the automated log fetching scripts to work correctly. For example, to allow terra to ssh into kestrel without a password prompt:
Code Block |
---|
# terra
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.1.105 |
...
Deploy to SD card
Copy the required files from the hovergroup svn:
Code Block |
---|
cp ~/hovergroup/gumstix-dev/duovero/u-boot.img ~/duovero/
cp ~/hovergroup/gumstix-dev/duovero/MLO ~/duovero/
cp ~/hovergroup/gumstix-dev/duovero/mksdcard.sh ~/duovero/ |
Insert your sd card, determine its device identifier (/dev/sdb for example), and then run the script. There are some absolute paths in the script so you may want to look through it before running it.
Code Block |
---|
cd ~/duovero
sudo ./mksdcard /dev/sdb |
References
http://gobysoft.org/wiki/CompileGumstixKernel
http://gobysoft.org/wiki/InstallOnGumstixOvero
http://www.gumstix.org/software-development/how-to/248-compile-kernel-boot-loader.html