Difference between revisions of "EBC Exercise 02 Out-of-the-Box, Bone"

From eLinux.org
Jump to: navigation, search
m (Updated for 3.8)
(Setting up a root login)
 
(24 intermediate revisions by 5 users not shown)
Line 1: Line 1:
 
[[Category:ECE497]]
 
[[Category:ECE497]]
 
{{YoderHead}}
 
{{YoderHead}}
== Kernel 3.8 ==
 
{{EBC3.8}}If you are running the 3.8 kernel, check out these [http://beagleboard.org/Getting%20Started instructions] for getting started.
 
  
=== Internet Connection ===
+
{{EBC3.8}}'''These instructions are for the 3.8 and newer kernels.'''  [[EBC Exercise 02 Out-of-the-Box, Bone 3.2 Kernel]] has instructions for the 3.2 kernel.
  
One of the slickest features of the Bone is it's ability to access the Internet through the USB connection.
+
== Local Internet Connection, Cloud 9 ==
 +
One of the slickest features of the Bone is its ability to access the Internet through the USB (tether) connection. Plug a microUSB cable into your bone and plug the other end into your host computer and wait for the Bone to boot up. Once the lights settle down to a heartbeat pattern point a browser on your host computer to '''192.168.7.2'''.  You will see an introduction page for the Bone.  This page is being served up by the Bone over a local internet connection.  Go and explore it.
  
==== Linux ====
+
Also, point your browser to '''192.168.7.2:3000'''.  Here you will see the Cloud 9 IDE (integrated development environment). 
On your host computer run:
+
 
 +
== Internet Connection to the Outside World ==
 +
Once the Bone can connect to the host, the host can be used for forward requests from the Bone to the Internet.  Follow the instructions below to set up your host and Bone so the bone can access the internet through your host.
 +
 
 +
=== Linux ===
 +
==== See your networks with ifconfig ====
 +
Run:
  
 
  host$ '''ifconfig'''
 
  host$ '''ifconfig'''
  eth0    Link encap:Ethernet  HWaddr 00:18:8b:72:b8:c2  
+
  ens1      Link encap:Ethernet  HWaddr 00:1a:4b:58:f7:4b  
           inet addr:137.112.41.109 Bcast:137.112.41.255  Mask:255.255.255.0
+
           inet addr:137.112.41.36 Bcast:10.0.4.255  Mask:255.255.255.0
           inet6 addr: fe80::218:8bff:fe72:b8c2/64 Scope:Link
+
           inet6 addr: fe80::b6d7:76a6:e870:e98f/64 Scope:Link
 
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
 
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:8481193 errors:0 dropped:0 overruns:0 frame:0
+
           RX packets:113337 errors:0 dropped:1 overruns:0 frame:0
           TX packets:1871287 errors:0 dropped:0 overruns:0 carrier:0
+
           TX packets:76269 errors:0 dropped:0 overruns:0 carrier:0
 
           collisions:0 txqueuelen:1000  
 
           collisions:0 txqueuelen:1000  
           RX bytes:3172154531 (3.1 GB)  TX bytes:203188180 (203.1 MB)
+
           RX bytes:131750476 (131.7 MB)  TX bytes:9701999 (9.7 MB)
           Interrupt:19
+
           Interrupt:16
 
   
 
   
  eth4    Link encap:Ethernet  HWaddr d4:94:a1:39:ff:ff  
+
  enxec1127bf0841 Link encap:Ethernet  HWaddr ec:11:27:bf:08:41  
 
           inet addr:192.168.7.1  Bcast:192.168.7.3  Mask:255.255.255.252
 
           inet addr:192.168.7.1  Bcast:192.168.7.3  Mask:255.255.255.252
           inet6 addr: fe80::d694:a1ff:fe39:ffff/64 Scope:Link
+
           inet6 addr: fe80::a875:1dfb:9b97:d049/64 Scope:Link
 +
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
 +
          RX packets:1296 errors:0 dropped:0 overruns:0 frame:0
 +
          TX packets:1862 errors:0 dropped:0 overruns:0 carrier:0
 +
          collisions:0 txqueuelen:1000
 +
          RX bytes:410669 (410.6 KB)  TX bytes:367011 (367.0 KB)
 +
 +
enxec1127bf0844 Link encap:Ethernet  HWaddr ec:11:27:bf:08:44 
 +
          inet addr:192.168.6.1  Bcast:192.168.6.3  Mask:255.255.255.252
 +
          inet6 addr: fe80::9bbb:428a:70a0:6cc7/64 Scope:Link
 
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
 
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:8 errors:0 dropped:0 overruns:0 frame:0
+
           RX packets:479 errors:0 dropped:0 overruns:0 frame:0
           TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
+
           TX packets:788 errors:0 dropped:0 overruns:0 carrier:0
 
           collisions:0 txqueuelen:1000  
 
           collisions:0 txqueuelen:1000  
           RX bytes:2775 (2.7 KB)  TX bytes:1234 (1.2 KB)
+
           RX bytes:258714 (258.7 KB)  TX bytes:109717 (109.7 KB)
 
   
 
   
  lo       Link encap:Local Loopback   
+
  lo       Link encap:Local Loopback   
 
           inet addr:127.0.0.1  Mask:255.0.0.0
 
           inet addr:127.0.0.1  Mask:255.0.0.0
 
           inet6 addr: ::1/128 Scope:Host
 
           inet6 addr: ::1/128 Scope:Host
           UP LOOPBACK RUNNING  MTU:16436 Metric:1
+
           UP LOOPBACK RUNNING  MTU:65536 Metric:1
           RX packets:37315 errors:0 dropped:0 overruns:0 frame:0
+
           RX packets:2303 errors:0 dropped:0 overruns:0 frame:0
           TX packets:37315 errors:0 dropped:0 overruns:0 carrier:0
+
           TX packets:2303 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:0
+
           collisions:0 txqueuelen:1
           RX bytes:3665320 (3.6 MB)  TX bytes:3665320 (3.6 MB)
+
           RX bytes:203157 (203.1 KB)  TX bytes:203157 (203.1 KB)
You'll see a new network has appeared, '''eth4''' in my case. The IP address is '''192.168.7.1'''.  There's a good chance the Bone is at '''192.168.7.''2'''''.  Try connecting to it.
+
host$ '''ssh -X root@192.168.7.2'''
+
beagle$
+
You are now logged into the Bone through the network.  This is much faster than the serial port (.115M vs. 100M) and supports many interesting network things.  The only problem is, the Beagle doesn't know how to access the Internet through the host. Get back to the host computer by entering RETURN ~ ^Z.  That is, hit RETURN, then ~ (it's up there near the ESC key) and then Ctrl-Z.  This gets you back to your host, but leaves the ssh connection running. 
+
  
Copy the following lines into a file call '''host.ipForward.sh'''
+
==== ssh ====
 +
You'll see two new networks have appeared, '''enxec1127bf0841'''  and '''enxec1127bf0844''' in my case. The IP address of your host is '''192.168.7.1'''.  There's a good chance the Bone is at '''192.168.7.''2'''''.  Try connecting to it.  The default password is '''temppwd'''.
 +
host$ '''ssh debian@192.168.7.2'''
 +
bone$
 +
You are now logged into the Bone through the network.  This is much faster than the serial port (.115M vs. 100M) and supports many interesting network operations. 
  
<pre>
+
Take a look around. What do you find?
#!/bin/bash
+
# These are the commands to run on the host to setup IP masquerading so the Beagle
+
#  can access the Internet through the USB connection.
+
# Inspired by http://thoughtshubham.blogspot.com/2010/03/internet-over-usb-otg-on-beagleboard.html
+
  
if [ $# -eq 0 ] ; then
+
The only problem is, the Beagle doesn't know how to access the Internet through the host. Get back to the host computer:
echo "Usage: $0 interface (such as eth0 or wlan0)"
+
exit 1
+
fi
+
  
interface=$1
+
bone$ '''exit'''
hostAddr=192.168.7.1
+
beagleAddr=192.168.7.2
+
ip_forward=/proc/sys/net/ipv4/ip_forward
+
  
if [ `cat $ip_forward` == 0 ]
+
==== Setting up shortcuts to make life easier ====
  then
+
We'll be ssh'ing from the host to the bone often, here are some shortcuts I use so instead of typing '''ssh debian@192.168.7.2''' and a password every time, I can enter '''ssh bone''' and no password.
    echo "You need to set IP forwarding. Edit /etc/sysctl.conf using:"
+
    echo "$ sudo gedit /etc/sysctl.conf"
+
    echo "and uncomment the line  \"net.ipv4.ip_forward=1\""
+
    echo "to enable forwarding of packets. Then run the following:"
+
    echo "$ sudo sysctl -p"
+
    exit 1
+
  else
+
    echo "IP forwarding is set on host."
+
fi
+
# Setup  IP masquerading on the host
+
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o $interface -j MASQUERADE
+
  
# Check to see what nameservers the host is using and copy these to the same
+
First edit '''/etc/hosts''' and add a couple of lines.
#  file on the Beagle
+
# This makes it so you can connect to the Beagle without using your password.
+
ssh-copy-id root@$beagleAddr
+
# Save the /etc/resolv.conf on the Beagle in case we mess things up.
+
ssh root@$beagleAddr "mv -n /etc/resolv.conf /etc/resolv.conf.orig"
+
# Copy the resolv.conf file to the Beagle.  Now the Beagle will use the
+
# same name servers as the host.
+
cat /etc/resolv.conf - << EOF > /tmp/resolv.conf
+
nameserver 137.112.18.59
+
nameserver 137.112.5.28
+
nameserver 137.112.4.196
+
search rose-hulman.edu
+
nameserver 8.8.8.8
+
nameserver 8.8.4.4
+
EOF
+
scp /tmp/resolv.conf root@$beagleAddr:/etc
+
# Tell the beagle to use the host as the gateway.
+
ssh root@$beagleAddr "/sbin/route add default gw $hostAddr"
+
</pre>
+
  
Now run:
+
  host$ '''sudo nano /etc/hosts'''
  host$ '''chmod +x host.ipForward.sh'''
+
host$ '''./host.ipForward.sh ''eth0'''''
+
This will give you instructions on how to set up your host and will remotely set up your Beagle.
+
Note: If you are using a wireless connection you should use  host$ '''./host.ipForward.sh ''wlan0'''''
+
  
Once ./host.ipForward.sh has been run you can:
+
You may use whatever editor you wantI suggest '''nano''' since it's easy to figure outAdd the following to the end of /etc/hosts and quit the editor.
  host$ '''fg'''
+
ssh -X root@192.168.7.2
+
  (Hit RETURN)
+
beagle$ '''ping google.com'''
+
  
You should see Google responding. Hit Ctrl-C to stop.
+
192.168.7.2    bone
 +
192.168.8.1    bone2
  
''Note: If you are using Ubuntu 12.04 and having an issue connecting to the internet, you may need to add a line to the /etc/resolv.conf file on the Bone. If ping google.com returns an "unknown host" error, this means that the Bone cannot resolve the url google.com to an IP address. Users with an Ubuntu 12.04 host may see this issue because the resolv.conf that Ubuntu uses (and is copied to the Bone in the host.ipForward.sh script) is not compatible with the Bone. The solution is to run the host.ipForward script as normal, then add the line "nameserver 8.8.8.8" above the existing entry in /etc/resolv.conf (run "nano /etc/resolv.conf" on the Bone to edit the file). This configures the Bone to use [https://developers.google.com/speed/public-dns/ Google's Public DNS Server].''
+
Now you can connect with
 +
host$ '''ssh debian@bone'''
  
Congratulations! Your Beagle is now on the network through your host computer.
+
Let's make it so you don't have to enter '''debian'''. On your host computer, put the following in '''~/.ssh/config'''
  
== Kernel 3.2 ==
+
Host bone
{{EBC3.2}}'''These instructions are for the 3.2 kernel.'''
+
  User debian
 +
  UserKnownHostsFile /dev/null
 +
  StrictHostKeyChecking no
 +
 +
Host bone2
 +
  User debian
 +
  UserKnownHostsFile /dev/null
 +
  StrictHostKeyChecking no
  
The BeagleBone can do many neat things right out of the box using just the USB cable and SD card that come with it. Before hooking up anything, if you are running Linux or OSX on your host computer, open a terminal at run:
+
These say that whenever you login to bone or bone2, login as '''debian'''
 +
Now you can enter.
  
  host$ '''ls /dev/tty* > /tmp/tty'''
+
  host$ '''ssh bone'''
  
This will record what devices are present on you host computer.  Once you plug the bone in it will create a new device.  Windows users don't have to do anything here.
+
One last thing, let's make it so you don't have to add a password.
 +
Back to your host.
  
Install the SD card (not the one that says Linux SDK on it) and attach the Bone to a host computer via the USB cable. The little USB connector goes to the Beagle in the connector on the bottom of the board near the Ethernet connector. Connect the large end of the USB cable to a host computer. The host can be either Linux, Mac, or Windows (though if you are doing development, consider running Linux on the host.)  I give instructions for each.
+
host$ '''ssh-keygen'''
 +
Accept all the defaults and then
 +
host$ '''ssh-copy-id bone'''
 +
Now all you have to enter is
 +
host$ '''ssh bone'''
 +
and no password is required.
  
The Beagle, powered via the USB, will boot up.  You should initially see two LEDs blinking, near the Ethernet connector. The one labeled '''0''' blinks a heartbeat patternLED '''1''' blinks when the SD card is being accessedAfter about 30 seconds LED 1 will stop blinking. The Bone is booted.
+
==== Setting up a root login ====
 +
By default the image we are running doesn't allow a root loginYou can also '''sudo''' from debian, but sometimes it's nice to login as rootHere's how to setup root so you can login from your host without a password.
  
Here are some of the things it can do.
+
host$ '''ssh bone'''
 +
bone$ '''sudo bash'''
 +
root@bone# '''nano /etc/ssh/sshd_config'''
  
== YouTube Introduction ==
+
Search for the line
 +
#PermitRootLogin prohibit-password
 +
and change it to
 +
PermitRootLogin yes
  
[http://www.youtube.com/watch?v=z6b4zlh0IrE&feature=bf_next&list=UUf_sAmhBw7Tj7-2ujmLFoQg Here's] a nice overview of the BeagleBone.  It shows how to work with it using a Windows host.
+
(The # symbol indicates a comment and must be removed in order for the setting to take effect.)
  
== USB Drive ==
+
Save the file and quit the editor.  Restart ssh so it will reread the file.
 +
root@bone# '''systemctl restart sshd'''
  
On your host you will notice a new folder appearingOn Linux and OSX it's call '''BEAGLE_BONE'''.  On Windows it's '''Beagle Bone Getting Started'''.  Open it up and look around. The '''README.html''' gives lots of information about getting going with the Bone.  Look at it in detail after going though this page.
+
And assign a password to root.
 +
  root@bone# '''passwd'''
  
When you are doing exploring the files, eject the drive (don't select ''SAFELY REMOVE DRIVE'')Once the drive is ejected, the network will start up over the USB.
+
Now open another window on your host computer and enter:
 +
host$ '''ssh-copy-id root@bone'''
 +
and enter the root password.  Test it with:
 +
host$ '''ssh root@bone'''
 +
You should be connected without a passwordNow go back to the Bone and turn off the root password access.
  
== Built in USB to serial adapter ==
+
root@bone# '''nano /etc/ssh/sshd_config'''
 +
Restore the line:
 +
#PermitRootLogin prohibit-password
 +
and restart sshd.
 +
root@bone# '''systemctl restart sshd'''
 +
root@bone# '''exit'''
 +
bone$ '''exit'''
  
The Beagle xM has a serial port connector on board, but the Bone doesn't.  Instead you access the serial port through the USB connector. The trick is figuring out how to access it.   
+
You should now be able to got back to your host computer and login as root on the bone without a password.
 +
  host$ '''ssh root@bone'''
  
=== Linux, OSX ===
+
You have access to your bone without passwords only from you host computer.  Try it from another computer and see what happens.
  
Run the following:
+
==== Set Up Git ====
host$ '''ls /dev/tty* > /tmp/tty2'''
+
host$ '''diff /tmp/tty*'''
+
ttyUSB1
+
host$ '''screen /dev/''ttyUSB1'' 115200'''  (Linux)
+
host$ '''screen /dev/tty.usb*B 115200''' (OSX)
+
  
The first line lists what devices are out thereThe second compares that list to the list made earlier. What appears is the USB to serial device on the Bone. The last line starts a serial port program that attaches to that device.  Notice the ''ttyUSB1'' is the same string as returned by the diff command.
+
We need to run some files that are in the class '''git''' repositoryWe'll learn more about using git later.  Here I'll just show you how to get the files. Here we are installing these files on your host computer, later we'll install them on your Beagle.
  
=== Windows ===
+
On my host computer I had to run
To find where the serial port appears in Windows, click on the start menu and search for '''Device Manager''' and run it.
+
  
[[File:Device_Manager.png|300px‎]]
+
host$ '''sudo apt install git'''
  
Select '''Ports''' and look for USB Serial Port.  In my case the port appears at '''COM6'''.
+
==== Get the Files ====
  
[[File:Port.png‎|300px]]
+
It only takes one command to pull down all the files.
  
Start up a [[ECE497_Tips_and_Tricks#Serial_Port serial port]] program and connect. The baud rate is 115200.
+
  host$ '''git clone https://github.com/MarkAYoder/BeagleBoard-exercises.git exercises --depth=1'''
 +
(The whole repo is some 700M.  Using '''--depth=1''' you only get the recent history and it only takes 200M.)
  
=== Logging in ===
+
This will take a while since it's getting all the course files, including pdf files of the course PowerPoint.
  
Hit RETURN and you'll see the followingLogin as '''root''' and look around.
+
==== Running ipMasquerade.sh ====
 +
Now that the files are installed, run:
 +
  host$ '''cd exercises/setup'''
 +
host$ '''./ipMasquerade.sh ''ens1'''''
 +
Plug in for ''ens1'' whatever is returned when you run '''ifconfig'''.
 +
This will give you instructions on how to set up your host.
 +
Note: If you are using a wireless connection you should use
  
  .---O---.                                         
+
  host$ '''./ipMasquerade.sh ''wlp16s0'''''
|      |                  .-.          o o       
+
where ''wlp16s0'' is what is returned by '''ifconfig''' for your wireless connection on your host.
|  |  |-----.-----.-----.| |  .----..-----.-----.
+
|      |    | __  |  ---'| '--..-'|    |    |
+
|  |  |  |  |    |---  ||  --'|  |  |  ' | | | |
+
'---'---'--'--'--.  |-----''----''--' '-----'-'-'-'
+
                -'  |
+
                '---' 
+
+
The Angstrom Distribution beaglebone ttyO0
+
+
Angstrom v2012.01-core - Kernel 3.2.5+
+
+
beaglebone login: '''root'''
+
Last login: Fri Jul 13 01:28:06 UTC 2012 on ttyO0
+
root@beaglebone:~#
+
  
== Internet Connection ==
+
Once ./ipMasquerade.sh has been run you can:
 +
host$ '''./firstssh.sh'''
 +
Now you should have network access on the Bone.
 +
bone$ '''ping -c2 google.com'''
  
One of the slickest features of the Bone is it's ability to access the Internet through the USB connection.  The network connection starts up ''after'' you've ejected the '''BEAGLE_BONE''' drive that appears. Do it now.
+
You should see Google responding.
  
=== Linux ===
+
Congratulations!  Your Beagle is now on the network through your host computer.
After ejecting, run:
+
  
host$ '''ifconfig'''
+
You will have to run '''ipMasquerade.sh''' only after rebooting your host computer and run '''firstssh.sh''' after rebooting your bone. Once '''firstssh''' has be run you should ssh from your host with the standard ssh command.
eth0    Link encap:Ethernet  HWaddr 00:18:8b:72:b8:c2 
+
          inet addr:137.112.41.109  Bcast:137.112.41.255  Mask:255.255.255.0
+
          inet6 addr: fe80::218:8bff:fe72:b8c2/64 Scope:Link
+
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
+
          RX packets:8481193 errors:0 dropped:0 overruns:0 frame:0
+
          TX packets:1871287 errors:0 dropped:0 overruns:0 carrier:0
+
          collisions:0 txqueuelen:1000
+
          RX bytes:3172154531 (3.1 GB)  TX bytes:203188180 (203.1 MB)
+
          Interrupt:19
+
+
eth4    Link encap:Ethernet  HWaddr d4:94:a1:39:ff:ff 
+
          inet addr:192.168.7.1  Bcast:192.168.7.3  Mask:255.255.255.252
+
          inet6 addr: fe80::d694:a1ff:fe39:ffff/64 Scope:Link
+
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
+
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
+
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
+
          collisions:0 txqueuelen:1000
+
          RX bytes:2775 (2.7 KB)  TX bytes:1234 (1.2 KB)
+
+
lo      Link encap:Local Loopback 
+
          inet addr:127.0.0.1  Mask:255.0.0.0
+
          inet6 addr: ::1/128 Scope:Host
+
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
+
          RX packets:37315 errors:0 dropped:0 overruns:0 frame:0
+
          TX packets:37315 errors:0 dropped:0 overruns:0 carrier:0
+
          collisions:0 txqueuelen:0
+
          RX bytes:3665320 (3.6 MB)  TX bytes:3665320 (3.6 MB)
+
You'll see at new network has appear, '''eth4''' in my case. The IP address is '''192.168.7.1'''. There's a good chance the Bone is at '''192.168.7.''2'''''.  Try connecting to it.
+
host$ '''ssh -X root@192.168.7.2'''
+
beagle$
+
You are now logged into the Bone through the network.  This is much faster than the serial port (.115M vs. 100M) and supports many interesting network things.  The only problem is, the Beagle doesn't know how to access the Internet through the host. Get back to the host computer by entering RETURN ~ ^Z.  That is, hit RETURN, then ~ (it's up there near the ESC key) and then Ctrl-Z.  This gets you back to your host, but leaves the ssh connection running.
+
  
Copy the following lines into a file call '''host.ipForward.sh'''
+
====Troubleshooting====
  
<pre>
+
=====Unknown Host=====
#!/bin/bash
+
# These are the commands to run on the host to setup IP masquerading so the Beagle
+
#  can access the Internet through the USB connection.
+
# Inspired by http://thoughtshubham.blogspot.com/2010/03/internet-over-usb-otg-on-beagleboard.html
+
  
if [ $# -eq 0 ] ; then
+
If you get an unknown host response when attempting to ping google.com, and you are off campus, try pinging the Google DNS by IP address. Run:
echo "Usage: $0 interface (such as eth0 or wlan0)"
+
exit 1
+
fi
+
  
interface=$1
+
bone$ '''ping 8.8.8.8'''
hostAddr=192.168.7.1
+
beagleAddr=192.168.7.2
+
ip_forward=/proc/sys/net/ipv4/ip_forward
+
  
if [ `cat $ip_forward` == 0 ]
+
If you are on campus, run:
  then
+
    echo "You need to set IP forwarding. Edit /etc/sysctl.conf using:"
+
    echo "$ sudo gedit /etc/sysctl.conf"
+
    echo "and uncomment the line  \"net.ipv4.ip_forward=1\""
+
    echo "to enable forwarding of packets. Then run the following:"
+
    echo "$ sudo sysctl -p"
+
    exit 1
+
  else
+
    echo "IP forwarding is set on host."
+
fi
+
# Setup  IP masquerading on the host
+
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o $interface -j MASQUERADE
+
  
# Check to see what nameservers the host is using and copy these to the same
+
  bone$ '''ping 137.112.5.28'''
# file on the Beagle
+
# This makes it so you can connect to the Beagle without using your password.
+
ssh-copy-id root@$beagleAddr
+
# Save the /etc/resolv.conf on the Beagle in case we mess things up.
+
ssh root@$beagleAddr "mv -n /etc/resolv.conf /etc/resolv.conf.orig"
+
# Copy the resolv.conf file to the Beagle.  Now the Beagle will use the
+
# same name servers as the host.
+
cat /etc/resolv.conf - << EOF > /tmp/resolv.conf
+
nameserver 137.112.18.59
+
nameserver 137.112.5.28
+
nameserver 137.112.4.196
+
search rose-hulman.edu
+
nameserver 8.8.8.8
+
nameserver 8.8.4.4
+
EOF
+
scp /tmp/resolv.conf root@$beagleAddr:/etc
+
# Tell the beagle to use the host as the gateway.
+
ssh root@$beagleAddr "/sbin/route add default gw $hostAddr"
+
</pre>
+
  
Now run:
+
If you now see responses by pinging a specific IP, it is possible that a firewall on your host computer is blocking the Beagle's access to the DNS when attempting to ping by domain name. On Ubuntu/Mint, run:
host$ '''chmod +x host.ipForward.sh'''
+
host$ '''./host.ipForward.sh ''eth0'''''
+
This will give you instructions on how to set up your host and will remotely set up your Beagle.
+
Note: If you are using a wireless connection you should use  host$ '''./host.ipForward.sh ''wlan0'''''
+
  
Once ./host.ipForward.sh has been run you can:
+
  host$ '''sudo ufw disable'''
  host$ '''fg'''
+
  Firewall stopped and disabled on system startup
  ssh -X root@192.168.7.2
+
(Hit RETURN)
+
beagle$ '''ping google.com'''
+
  
You should see Google responding. Hit Ctrl-C to stop.
+
You should get a response, such as above, that the firewall will be disabled upon next startup. After saving anything important, restart your host through the start menu or run:
  
''Note: If you are using Ubuntu 12.04 and having an issue connecting to the internet, you may need to add a line to the /etc/resolv.conf file on the Bone. If ping google.com returns an "unknown host" error, this means that the Bone cannot resolve the url google.com to an IP address. Users with an Ubuntu 12.04 host may see this issue because the resolv.conf that Ubuntu uses (and is copied to the Bone in the host.ipForward.sh script) is not compatible with the Bone. The solution is to run the host.ipForward script as normal, then add the line "nameserver 8.8.8.8" above the existing entry in /etc/resolv.conf (run "nano /etc/resolv.conf" on the Bone to edit the file). This configures the Bone to use [https://developers.google.com/speed/public-dns/ Google's Public DNS Server].''
+
host$ '''reboot'''
  
Congratulations!  Your Beagle is now on the network through your host computer.
+
Repeat this exercise and attempt to ping Google by domain name again. If you now receive responses, then the firewall was indeed the issue. Otherwise, the internet is your friend. Use your host computer to try and find a solution. Feel free to add solutions here when you find them
  
=== OSX===
+
=== OSX ===
After ejecting
+
I haven't checked these instructions this year.  Please report your results and update if needed.
  
 
# go to '''System Preferences''' and select '''Network'''
 
# go to '''System Preferences''' and select '''Network'''
Line 311: Line 222:
  
 
  host$ '''screen /dev/ttyusb*B 115200'''
 
  host$ '''screen /dev/ttyusb*B 115200'''
  beagle$ '''udhcpc -i usb0'''
+
  bone$ '''udhcpc -i usb0'''
  beagle$ '''ping google.com'''
+
  bone$ '''ping google.com'''
  
 
This is all nicely shown [http://www.youtube.com/watch?v=Cf9hnscbSK8&feature=youtu.be here] in this silent YouTube movie.
 
This is all nicely shown [http://www.youtube.com/watch?v=Cf9hnscbSK8&feature=youtu.be here] in this silent YouTube movie.
  
Congratulations, you now have a connection to the Internet.
+
Congratulations, you now have a connection from your BeagleBone to the Internet.
  
 
=== Windows 7 ===
 
=== Windows 7 ===
 +
I haven't checked these either.  Please report results and update if needed.
 +
 
There are several ways of running ssh on Windows 7. Below are a couple of tools that you can use.
 
There are several ways of running ssh on Windows 7. Below are a couple of tools that you can use.
 
==== msysgit ====
 
Install [http://msysgit.github.com/ msysgit]. This is a version of git for Windows based on msys (a unix like shell for Windows) which includes ssh. This solution is simple if all you need to do is connect to your bone.
 
 
==== Cygwin ====
 
Install [http://cygwin.com/ Cygwin]. There are many packages that you can install that aren't installed by default:
 
 
Required
 
# openssh
 
 
Optional
 
# make
 
# gcc-core
 
# gcc-g++
 
# gdb
 
# git
 
 
This solution is more involved, but it allows you to install development tools.
 
  
 
==== Environment Setup ====
 
==== Environment Setup ====
Line 363: Line 258:
 
# Check the box to '''Allow other network users to connect through this computer's Internet connection'''
 
# Check the box to '''Allow other network users to connect through this computer's Internet connection'''
 
# Select your bone's local area connection for the '''Home networking connection''' (if you cannot choose the local area connection, turn your internet connection sharing off and then back on)
 
# Select your bone's local area connection for the '''Home networking connection''' (if you cannot choose the local area connection, turn your internet connection sharing off and then back on)
 +
# Return to '''Change adapter settings'''
 +
# Right click your Bone's internet connection and go to '''Properties'''
 +
# Select '''Internet Protocol Version 4 (TCP/IPv4)''' and choose '''Properties'''
 +
# Choose '''Obtain an IP address automatically''' and '''Obtain DNS server address automatically'''
  
 
Open a command prompt or bash terminal and run the following:
 
Open a command prompt or bash terminal and run the following:
Line 374: Line 273:
 
Login as root and run the following:
 
Login as root and run the following:
  
  beagle$ '''echo "nameserver 8.8.8.8" > /etc/resolv.conf'''
+
  bone$ '''echo "nameserver 8.8.8.8" > /etc/resolv.conf'''
  beagle$ '''echo "nameserver 8.8.8.4" >> /etc/resolv.conf'''
+
  bone$ '''echo "nameserver 8.8.8.4" >> /etc/resolv.conf'''
  beagle$ '''/sbin/route add default gw 192.168.7.1'''
+
  bone$ '''/sbin/route add default gw 192.168.7.1'''
  beagle$ '''ping google.com'''
+
  bone$ '''ping google.com'''
 +
 
 +
If 'ping:unknown host google.com' occurs, run this instead:
 +
 
 +
bone$ '''echo "nameserver 137.112.4.196" > /etc/resolv.conf'''
 +
bone$ '''/sbin/route add default gw 192.168.7.1'''
 +
bone$ '''ping google.com'''
  
Congratulations, you now have a connection to the Internet.
+
Congratulations, you now have a connection from your BeagleBone through your Linux host to the Internet.
  
 
{{YoderFoot}}
 
{{YoderFoot}}

Latest revision as of 04:47, 1 September 2017

thumb‎ Embedded Linux Class by Mark A. Yoder


3.8 Kernel

These instructions are for the 3.8 and newer kernels. EBC Exercise 02 Out-of-the-Box, Bone 3.2 Kernel has instructions for the 3.2 kernel.

Local Internet Connection, Cloud 9

One of the slickest features of the Bone is its ability to access the Internet through the USB (tether) connection. Plug a microUSB cable into your bone and plug the other end into your host computer and wait for the Bone to boot up. Once the lights settle down to a heartbeat pattern point a browser on your host computer to 192.168.7.2. You will see an introduction page for the Bone. This page is being served up by the Bone over a local internet connection. Go and explore it.

Also, point your browser to 192.168.7.2:3000. Here you will see the Cloud 9 IDE (integrated development environment).

Internet Connection to the Outside World

Once the Bone can connect to the host, the host can be used for forward requests from the Bone to the Internet. Follow the instructions below to set up your host and Bone so the bone can access the internet through your host.

Linux

See your networks with ifconfig

Run:

host$ ifconfig
ens1      Link encap:Ethernet  HWaddr 00:1a:4b:58:f7:4b  
         inet addr:137.112.41.36  Bcast:10.0.4.255  Mask:255.255.255.0
         inet6 addr: fe80::b6d7:76a6:e870:e98f/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:113337 errors:0 dropped:1 overruns:0 frame:0
         TX packets:76269 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:131750476 (131.7 MB)  TX bytes:9701999 (9.7 MB)
         Interrupt:16 

enxec1127bf0841 Link encap:Ethernet  HWaddr ec:11:27:bf:08:41  
         inet addr:192.168.7.1  Bcast:192.168.7.3  Mask:255.255.255.252
         inet6 addr: fe80::a875:1dfb:9b97:d049/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:1296 errors:0 dropped:0 overruns:0 frame:0
         TX packets:1862 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:410669 (410.6 KB)  TX bytes:367011 (367.0 KB)

enxec1127bf0844 Link encap:Ethernet  HWaddr ec:11:27:bf:08:44  
         inet addr:192.168.6.1  Bcast:192.168.6.3  Mask:255.255.255.252
         inet6 addr: fe80::9bbb:428a:70a0:6cc7/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:479 errors:0 dropped:0 overruns:0 frame:0
         TX packets:788 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:258714 (258.7 KB)  TX bytes:109717 (109.7 KB)

lo        Link encap:Local Loopback  
         inet addr:127.0.0.1  Mask:255.0.0.0
         inet6 addr: ::1/128 Scope:Host
         UP LOOPBACK RUNNING  MTU:65536  Metric:1
         RX packets:2303 errors:0 dropped:0 overruns:0 frame:0
         TX packets:2303 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1 
         RX bytes:203157 (203.1 KB)  TX bytes:203157 (203.1 KB)

ssh

You'll see two new networks have appeared, enxec1127bf0841 and enxec1127bf0844 in my case. The IP address of your host is 192.168.7.1. There's a good chance the Bone is at 192.168.7.2. Try connecting to it. The default password is temppwd.

host$ ssh debian@192.168.7.2
bone$ 

You are now logged into the Bone through the network. This is much faster than the serial port (.115M vs. 100M) and supports many interesting network operations.

Take a look around. What do you find?

The only problem is, the Beagle doesn't know how to access the Internet through the host. Get back to the host computer:

bone$ exit

Setting up shortcuts to make life easier

We'll be ssh'ing from the host to the bone often, here are some shortcuts I use so instead of typing ssh debian@192.168.7.2 and a password every time, I can enter ssh bone and no password.

First edit /etc/hosts and add a couple of lines.

host$ sudo nano /etc/hosts

You may use whatever editor you want. I suggest nano since it's easy to figure out. Add the following to the end of /etc/hosts and quit the editor.

192.168.7.2     bone
192.168.8.1     bone2

Now you can connect with

host$ ssh debian@bone

Let's make it so you don't have to enter debian. On your host computer, put the following in ~/.ssh/config

Host bone
  User debian
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no

Host bone2
  User debian
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no

These say that whenever you login to bone or bone2, login as debian Now you can enter.

host$ ssh bone

One last thing, let's make it so you don't have to add a password. Back to your host.

host$ ssh-keygen

Accept all the defaults and then

host$ ssh-copy-id bone

Now all you have to enter is

host$ ssh bone

and no password is required.

Setting up a root login

By default the image we are running doesn't allow a root login. You can also sudo from debian, but sometimes it's nice to login as root. Here's how to setup root so you can login from your host without a password.

host$ ssh bone
bone$ sudo bash
root@bone# nano /etc/ssh/sshd_config

Search for the line

#PermitRootLogin prohibit-password

and change it to

PermitRootLogin yes

(The # symbol indicates a comment and must be removed in order for the setting to take effect.)

Save the file and quit the editor. Restart ssh so it will reread the file.

root@bone# systemctl restart sshd

And assign a password to root.

root@bone# passwd

Now open another window on your host computer and enter:

host$ ssh-copy-id root@bone

and enter the root password. Test it with:

host$ ssh root@bone

You should be connected without a password. Now go back to the Bone and turn off the root password access.

root@bone# nano /etc/ssh/sshd_config

Restore the line:

#PermitRootLogin prohibit-password

and restart sshd.

root@bone# systemctl restart sshd
root@bone# exit
bone$ exit

You should now be able to got back to your host computer and login as root on the bone without a password.

host$ ssh root@bone

You have access to your bone without passwords only from you host computer. Try it from another computer and see what happens.

Set Up Git

We need to run some files that are in the class git repository. We'll learn more about using git later. Here I'll just show you how to get the files. Here we are installing these files on your host computer, later we'll install them on your Beagle.

On my host computer I had to run

host$ sudo apt install git

Get the Files

It only takes one command to pull down all the files.

host$ git clone https://github.com/MarkAYoder/BeagleBoard-exercises.git exercises --depth=1

(The whole repo is some 700M. Using --depth=1 you only get the recent history and it only takes 200M.)

This will take a while since it's getting all the course files, including pdf files of the course PowerPoint.

Running ipMasquerade.sh

Now that the files are installed, run:

host$ cd exercises/setup
host$ ./ipMasquerade.sh ens1

Plug in for ens1 whatever is returned when you run ifconfig. This will give you instructions on how to set up your host. Note: If you are using a wireless connection you should use

host$ ./ipMasquerade.sh wlp16s0

where wlp16s0 is what is returned by ifconfig for your wireless connection on your host.

Once ./ipMasquerade.sh has been run you can:

host$ ./firstssh.sh

Now you should have network access on the Bone.

bone$ ping -c2 google.com

You should see Google responding.

Congratulations! Your Beagle is now on the network through your host computer.

You will have to run ipMasquerade.sh only after rebooting your host computer and run firstssh.sh after rebooting your bone. Once firstssh has be run you should ssh from your host with the standard ssh command.

Troubleshooting

Unknown Host

If you get an unknown host response when attempting to ping google.com, and you are off campus, try pinging the Google DNS by IP address. Run:

bone$ ping 8.8.8.8

If you are on campus, run:

bone$ ping 137.112.5.28

If you now see responses by pinging a specific IP, it is possible that a firewall on your host computer is blocking the Beagle's access to the DNS when attempting to ping by domain name. On Ubuntu/Mint, run:

host$ sudo ufw disable
Firewall stopped and disabled on system startup

You should get a response, such as above, that the firewall will be disabled upon next startup. After saving anything important, restart your host through the start menu or run:

host$ reboot

Repeat this exercise and attempt to ping Google by domain name again. If you now receive responses, then the firewall was indeed the issue. Otherwise, the internet is your friend. Use your host computer to try and find a solution. Feel free to add solutions here when you find them

OSX

I haven't checked these instructions this year. Please report your results and update if needed.

  1. go to System Preferences and select Network
  2. You should see RNDIS/...Gadget. This is the network connection to the Beagle. Select it
  3. Wait for the IP address 192.168.7.1 to appear
  4. Click Show All and select Sharing
  5. Select Internet Sharing
  6. Select RNDIS/Ethernet Gadget

In a terminal window connect to the serial port

host$ screen /dev/ttyusb*B 115200
bone$ udhcpc -i usb0
bone$ ping google.com

This is all nicely shown here in this silent YouTube movie.

Congratulations, you now have a connection from your BeagleBone to the Internet.

Windows 7

I haven't checked these either. Please report results and update if needed.

There are several ways of running ssh on Windows 7. Below are a couple of tools that you can use.

Environment Setup

You can either run ssh from a bash terminal (i.e. C:\Program Files\Git\Git Bash or C:\cygwin\Cygwin.bat), or you can add the bin directories to your path and run from the Windows command prompt (i.e. add C:\Program Files\Git\bin or C:\cygwin\bin to your path).

Note: Be careful adding multiple bin directories to your path

First time setup

  1. Run regedit
  2. Navigate to Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters
  3. Change IPEnableRouter from 0 to 1
  4. Close regedit
  5. Run services
  6. Make sure the following are set to Automatic and are started
    1. Routing and Remote Access
    2. Internet Connection Sharing (ICS)

Connecting to the Internet

After ejecting

  1. Navigate to Control Panel\Network and Internet\Network and Sharing Center\Change adapter settings
  2. Right click your wired/wireless internet connection and go to Properties
  3. Go to the Sharing tab
  4. Check the box to Allow other network users to connect through this computer's Internet connection
  5. Select your bone's local area connection for the Home networking connection (if you cannot choose the local area connection, turn your internet connection sharing off and then back on)
  6. Return to Change adapter settings
  7. Right click your Bone's internet connection and go to Properties
  8. Select Internet Protocol Version 4 (TCP/IPv4) and choose Properties
  9. Choose Obtain an IP address automatically and Obtain DNS server address automatically

Open a command prompt or bash terminal and run the following:

host$ ping 192.168.7.2

If this ping times out then disable and re-enable your bone's local area connection and try again. Once it works run the following:

host$ ssh root@192.168.7.2

Login as root and run the following:

bone$ echo "nameserver 8.8.8.8" > /etc/resolv.conf
bone$ echo "nameserver 8.8.8.4" >> /etc/resolv.conf
bone$ /sbin/route add default gw 192.168.7.1
bone$ ping google.com

If 'ping:unknown host google.com' occurs, run this instead:

bone$ echo "nameserver 137.112.4.196" > /etc/resolv.conf
bone$ /sbin/route add default gw 192.168.7.1
bone$ ping google.com

Congratulations, you now have a connection from your BeagleBone through your Linux host to the Internet.




thumb‎ Embedded Linux Class by Mark A. Yoder