Read the entire assignment before beginning!
Submit deliverables to CourSys: https://courses.cs.sfu.ca/
1. Establish Communication
Setup:
Complete the Quick Start Guide for the BeagleBone Green (on course website).
See the website for a list of help-documents/guides for this (and later) sections.
The assignment describes what to do; the help-docs describe how to do it.
Setup a Linux machine (or virtual machine) for doing your work this semester.
Have the target communicating with the host via the serial port using screen.
Have the target and host on the same Ethernet network (physical or Ethernet over USB). Note: If you have a typo in a command when capturing screen output (i.e., a screen capture to a text file), dont worry about correcting it. Just repeat the command.
Commands to be executed in a Linux console on host PC are shown starting with $, on the target are shown with a #. These are not part of the command; they just represent the terminal prompt.
1.1 Serial (TTL to USB) Connection
Capture the following output from the targets Linux terminal over the serial port.
Hint: In screen, you can turn on logging by pressing CTRL+a, and then press H (capital). This will create a log file on the host in the folder you started screen from.
Display targets internet configuration (ifconfig).
Ping the host and let in ping at least 3 times; press Control C to stop it:
# ping 192.168.7.1
(Note: The IP address must be the hosts IP; run ifconfig on the host to find address). Rename the log file to as1-targetViaSerial.txt
1.2 Ethernet Connection
Perform the following commands on the host in a terminal:
Display the hosts internet configuration.
Ping the target and let in ping at least three times.
SSH to the target (change the IP to match the target):
$ ssh [email protected]
This will log you in as root, no password is required.
Perform a directory listing of the /proc directory.
Display the kernels version, up-time, and CPU info:
# cat version
# cat uptime
# cat cpuinfo
Exit the SSH session using the exit command.
Copy the text of your session to a new file named as1-hostViaIP.txt
You should be able to select the text in the terminal and copy-and-paste it into a text file (try running gedit on the host to create the .txt file)
2. NFS and Custom Login Messages
2.1 NFS Mount
Mount your hosts ~cmpt433public folder on the target using NFS. See the website for NFS guide.
Create a script in your targets /root/ home directory named mountNFS which mounts your NFS.
Hints:
Use echo to create the file, such as:
# echo Da Command To Mount Folder Goes Here > daFileToSaveInto
Change the permissions on script to be executable:
# chmod +x daFileToRun
2.2 Root File System Customization
Make the following changes to the targets root file system stored in eMMC (on board):
Overwrite the /etc/hostname file with: yourSFUEmailAddress-beagle
Example: bfraser-beagle
Tip: View what the /etc/hostname file currently contains first, and make a backup copy (just in case!)
# cd /etc
# ls hostname
# cat hostname
# cp hostname hostname.bak
Tip: Use echo (as used in previous step) to change the contents of the hostname file. Change the hosts file:
# nano /etc/hosts
Change all mention of beaglebone to yourSFUEmailAddress-beagle
This will change the boards Linux terminal prompt once you reboot the board. Reboot using the command:
# reboot
2.3 ASCII Greeting
Change the root file system stored on the target to display an ASCII welcome message on boot.
There are three files that display messages at start-up:
/etc/issue: Shown only on the serial port before the user logs in.
/etc/motd: Shown only on the serial port after the user logs in.
/etc/issue.net: Shown only on SSH connection before the user logs in. Note: Does not support any escape sequences (as described below). First, create a short ASCII message:
Use a website such as: http://patorjk.com/software/taag/
Make the message include at least your first name. You may add anything else you like.
Pick a font which is readable and would fit on the terminal screen.
For the above website, click the Test All link on the left and pick a good one. Copy the art into a new text file named issue.net in your hosts shared folder:
~/cmpt433/public
Note: changing /etc/issue.net is optional for this assignment, but easy to do! Copy your new issue.net file to a new file name just issue
Edit issue and add at least one escape code to the file to display some interesting information.
List of escape codes can be found here: http://www.cyberciti.biz/faq/howto-change-login-message/
In /etc/issue youll need to replace all the characters in your ASCII art with \ because is the start of an escape sequence. Note that SSH uses issue.net and does not support escape characters, so dont change to \ in that file, only in issue.
Using NFS, copy issue and issue.net from the host to your targets /etc/ folder. You may want to first make a backup copy of the contents of /etc/issue and
/etc/issue.net on the target.
Log out, using the exit command, to see your new message.
If logging in via the serial port, youll see /etc/issue along with your extra escape characters.
If logging in via SSH, youll see /etc/issue.net which does not support escape characters. Youll need to re-SSH into the board to see this message.
You may delete or rename the /etc/motd file to cleanup the boot messages on the serial port if you like.
2.4 This Sections Deliverables
The next section guides you through capturing the boot-up text, which will show these changes.
3. Hello world = Der-Finger-Poken & Der-Lighten-Blinken
(Moving the joystick, turning on lights)
3.1 Hello World
On the host, create a new directory for assignment 1:
$ cd ~
$ mkdir cmpt433/work/as1
Note: ~ expands to the users home directory, /home/brian in my case.
On the host, inside ~/cmpt433/public/, create a folder myApps/
This will hold your compiled programs where they can easily be run on the target.
Create a hello program in cmpt433/work/as1/ (in C not C++!) using printf() to display a message of the form:
Hello embedded world, from Brian Fraser! (Substitute in your name!) Create a makefile that compiles your application and places the compiled file to the cmpt433/public/myApps/ folder. Your makefile should be such that you can compile and deploy (place executable to the myApps/ folder) using the following single command:
$ make
Simple Makefile (you may modify as desired):
all:arm-linux-gnueabihf-gcc -Wall -g -std=c99 -D _POSIX_C_SOURCE=200809L -Werror hello.c -o hello cp hello $(HOME)/cmpt433/public/myApps/ |
3.2 Use LEDs & Read Joystick
Modify your hello program from above to also play the following LED and Joystick game.
Display hello-world welcome messageContinuously loop through the following:1. Display users current score2. Program selects a target answer of either up or down.If up, turn on BBGs LED 0 (top one); If down, turn on BBGs LED 3 (bottom one)3. Wait until user moves joystick:If left or right, then turn off BBGs LEDs, display goodbye message, and exit app.If up or down, then: display correct/incorrect message, update score, and if correct flash all LEDs on once for 0.1s if incorrect flash all LEDs on five times for 0.1s on 0.1s off4. Wait until joystick is released (so you dont double trigger on one push). |
The LEDs you are turning on are on the BeagleBone, not on the Zen cape.
Your program must run without error even if some or all of the GPIO pins for the LEDs or the joystick are already exported for GPIO use.
You need not un-export any GPIO pins your program exports for the assignment.
Requirements:
Use a Makefile to compile your program on the host, and copy the executable to your NFS shared directory (~/cmpt433/public). Run the program via the terminal on the target.
Follow the LED and GPIO guides before writing the program.
Sample console output is shown below. Note that it does not show which LED is on, nor what the user input was. First and last line in capture are the terminal.
[email protected]:/mnt/remote/myApps# ./hello Hello embedded world, from Brian!Press the Zen capes Joystick in the direction of the LED.UP for LED 0 (top)DOWN for LED 3 (bottom) LEFT/RIGHT for exit app.Press joystick; current score (0 / 0) Correct!Press joystick; current score (1 / 1) Correct!Press joystick; current score (2 / 2) Correct!Press joystick; current score (3 / 3) Correct!Press joystick; current score (4 / 4) Correct!Press joystick; current score (5 / 5)Incorrect! 🙁Press joystick; current score (5 / 6) Correct!Press joystick; current score (6 / 7)Incorrect! 🙁Press joystick; current score (6 / 8)Your final score was (6 / 8)Thank you for playing! [email protected]:/mnt/remote/myApps# |
Hint: Good function design will save you a lot of time!
Create some initialization functions to initialize the joystick and LEDs.
Create some functions to give you high-level control of joystick and LEDs. For joystick, I suggest you create an enum to represent the four directions, plus a no direction. Then create a function which returns which direction the joystick is pressed. Note this wont handle multiple directions at once, but thats OK for this app.
Keep your file organized!
You are welcome to use multiple files (.c and .h files) if you like, but you need not. If you use one .c file, make sure you organize your functions inside the file well. You may want to use function prototypes so you can organize your functions in the way you think makes the most sense.
3.3 Run it via eMMC
On the target, copy your blinking hello program to the root users home directory (/root/). This will make it available on the target even when you have not mounted the public folder via NFS.
On the target, edit the root users .profile file using the nano text editor. Add a call your hello program when the user logs in.
The .profile file is in the users home directory (/root/), and is a script that runs whenever the user logs in.
Launch nano to edit a file (such as .profile) with:
# nano .profile
On a new line, enter the full path of the program (such as /root/myFileHere). Hint: Have the call to hello be the last line in .profile. This will let the user skip the blinking at log-in (Ctrl-c) and still have the rest of the script execute. To exit nano (and save), press Ctrl+x, then type y (when asked to save the file), then press ENTER to select the existing file name.
You can check that the file was edited correctly by using cat to display the file. Note that file names starting with a period, such as .profile, are considered hidden by Linux and will not show up in a file listing. Use the -a option for ls to show all files:
# ls -a
Test your script by logging out and logging back in. Log out with: # exit
3.4 This Sections Deliverable
Create a tar.gz file named as1-helloWorld.tar.gz of your as1/ directory. Include at least your hello C source code and its Makefile.
In general, to create a tar.gz archive, use:
$ tar cvzf targetFileName.tar.gz sourceFolderName
Use the serial port (screen) to capture the output of the following actions. Save the output into a file name as1-bootTrace.txt:
Hint: Toggle logging within screen on or off by pressing Ctrl+a, and then H (capital, without Ctrl). This will log output to your home directory in a file screenlog.0. After you capture all the output rename the log file to the required .txt file name.
Note that if you press the arrow keys during your session it may insert escape characters into your capture which you should edit out before submitting. It may be best to not use the arrow keys if you can avoid it. Capture output of the following actions:
- Reboot the board, and capture all the text shown on the serial port (text will be from uBoot, the Linux kernel, and the programs loaded from the root file system).
- Login as root, which will execute your hello light-blinking program.
- Play a couple rounds of the game and then exit the program using the joystick.
- Mount your NFS shared directory using your script (previous section).
- Use ls to display the contents of the shared directory mounted on the target which contains your program (likely /mnt/remote/myApps).
Reviews
There are no reviews yet.