Difference between revisions of "ECE497 Tips and Tricks"
m (→Point to a given git snapshot: Added) |
m (→CSSE's Linux reference page) |
||
(47 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
− | [[Category:ECE497]] | + | [[Category:ECE497 |Tips]] |
+ | {{YoderHead}} | ||
Some useful tips and tricks for Linux and the Beagleboard. | Some useful tips and tricks for Linux and the Beagleboard. | ||
+ | |||
+ | == Interesting Links == | ||
+ | |||
+ | Since we are working with the open source community, you need to know where the action is. Here are some useful links to what's happening in the Beagle community. | ||
+ | |||
+ | * [http://groups.google.com/group/beagleboard/browse_thread/thread/c5a631c6582119b8 State of the Beagle 2011], learn about the Beagle's past, present and future. | ||
+ | * [http://BeagleBoard.org BeagleBoard.org], the starting point for all thing Beagle. | ||
+ | * [http://groups.google.com/group/beagleboard Beagle Discussion Group], lot's of good information here, but you'll have to dig a bit. Subscribe and follow the discussion. | ||
+ | * [http://beagleboard.blogspot.com/ blogspot], see what is being said about the Beagle. | ||
+ | * [http://elinux.org/BeagleBoard eLinux], this is where this page is being hosted. It's about embedded Linux in general, not just the BeagleBoard. | ||
+ | * [http://free-electrons.com/blog/beagle-labs/ Free Electrons Beagle Board Training], some good labs about what makes embedded Linux run. | ||
+ | * [https://gforge.ti.com/gf/project/tiesr/ TI Embedded Speech Recognizer] (TIesr) is a fixed-point recognizer written in C++ and C. | ||
+ | * [http://code.google.com/soc/ Google Summer of Code]. BeagleBoard is an accepted organization. | ||
+ | * [http://www.makelinux.net/kernel_map Linux Kernel Map] | ||
+ | * [http://processors.wiki.ti.com/index.php/Category:OMAP35x Texas Instruments Embedded Processors Wiki] | ||
== Linux == | == Linux == | ||
+ | |||
+ | [http://freeengineer.org/learnUNIXin10minutes.html Learn UNIX in 10 Minutes] is a quick overview of the most commonly used Linux commands. | ||
+ | |||
+ | [http://lifehacker.com/5935869/top-10-tools-that-are-better-in-the-command-line?utm_campaign=socialflow_lifehacker_twitter&utm_source=lifehacker_twitter&utm_medium=socialflow Top 10 Tools] is a nice summary of 10 of the most useful Linux commands. | ||
=== Quick Tips === | === Quick Tips === | ||
Line 12: | Line 32: | ||
! Description | ! Description | ||
|- | |- | ||
− | | | + | | |
+ | beagle$ '''gnome-open''' | ||
| Open a file or directory using the default program | | Open a file or directory using the default program | ||
|- | |- | ||
Line 21: | Line 42: | ||
| If you invoke gdb with the command line argument -tui, it will show a built-in GUI | | If you invoke gdb with the command line argument -tui, it will show a built-in GUI | ||
|- | |- | ||
− | | | + | | |
− | | This will go to a '''n'''etwork '''t'''ime '''p'''rotocol server and get the current time and set the Beagle to it. | + | beagle$ '''ntpdate ntp.org''' |
+ | beagle$ '''rm /etc/localtime''' | ||
+ | beagle$ '''ln -s /usr/share/zoneinfo/America/New_York /etc/localtime''' | ||
+ | |||
+ | | This will go to a '''n'''etwork '''t'''ime '''p'''rotocol server and get the current time and set the Beagle to it and set the local time zone. [http://derekmolloy.ie/automatically-setting-the-beaglebone-black-time-using-ntp/] | ||
+ | |- | ||
+ | | | ||
+ | beagle$ '''mount -t debugfs debugfs /sys/kernel/debug/''' | ||
+ | beagle$ '''cd /sys/kernel/debug''' | ||
+ | beagle$ '''ls''' | ||
+ | | Kernel Debug Info | ||
|} | |} | ||
+ | |||
+ | === Connecting to RHIT wifi === | ||
+ | |||
+ | There is a discussion in the [https://groups.google.com/forum/?fromgroups=#!topic/beaglebone/9PEUmcsLXLU Beagle Google Group] about getting wireless working with the bone. | ||
+ | |||
+ | Use these settings for connecting to the Rose-Hulman wireless network: | ||
+ | |||
+ | * '''SSID:''' RHIT-1X | ||
+ | * '''Security:''' WPA & WPA2 Enterprise | ||
+ | * Leave "anonymous identity" blank | ||
+ | * '''CA Certificate''': (None) | ||
+ | * '''PEAP version''': Version 0 | ||
+ | * '''Inner authentication''': MSCHAPv2 | ||
+ | * Use your Rose username and password | ||
=== bash === | === bash === | ||
Line 52: | Line 97: | ||
When using ssh between to X-windows systems try | When using ssh between to X-windows systems try | ||
− | + | host$ '''ssh -CX root@beagle''' | |
− | host$ ssh - | + | |
− | + | The -X set the DISPLAY variable on the remote machine so you can open windows from the beagle on your host machine. | |
− | The - | ||
The -C compressed the data over the link. Good for slow connections. | The -C compressed the data over the link. Good for slow connections. | ||
Line 62: | Line 106: | ||
You can run a vnc server on the Beagle. Install it with: | You can run a vnc server on the Beagle. Install it with: | ||
− | $ opkg update | + | beagle$ '''opkg update''' |
− | $ opkg install x11vnc | + | beagle$ '''opkg install x11vnc''' |
Install a password with | Install a password with | ||
− | $ x11vnc -storepasswd | + | beagle$ '''x11vnc -storepasswd''' |
Run it on the Beagle with | Run it on the Beagle with | ||
− | $ x11vnc -display :0 -ssl -usepw -forever -q & | + | beagle$ '''x11vnc -display :0 -ssl -usepw -forever -q &''' |
On your host, connect to it with: | On your host, connect to it with: | ||
− | host $vinagre | + | host$ '''vinagre''' |
or '''Applications:Internet:Remote Desktop Viewer''' | or '''Applications:Internet:Remote Desktop Viewer''' | ||
==== Authorizing ssh ==== | ==== Authorizing ssh ==== | ||
− | '''ssh''' and ''' | + | '''ssh''' and '''scp''' can be set up for automatic authorization so you don't have to enter your password when using these commands. Here's how to do it. |
+ | First let's see what's already there: | ||
+ | |||
+ | * On your Beagle run | ||
+ | |||
+ | beagle$ '''ls ~/.ssh''' | ||
+ | |||
+ | '''~/.ssh''' may not exist, if not, it will be created. If it's there, check the files in it. | ||
* On your host computer run | * On your host computer run | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | host$ '''ssh-copy-id root@beagle''' | |
+ | |||
+ | It was ask for you beagle password and then copy the needed files to it. | ||
+ | |||
+ | * Back on the beagle to see what has changed: | ||
+ | |||
+ | host$ '''ssh -CX root@beagle''' | ||
+ | beagle$ '''ls ~/.ssh''' | ||
+ | |||
+ | The ssh command shouldn't ask for a password. What new files appeared? | ||
+ | |||
+ | ==== ssh configuration ==== | ||
+ | |||
+ | Here's a nice tip so you don't have to remember who to login as on the beagle. On your host, put the following in '''~/.ssh/config'''. | ||
+ | |||
+ | Host beagle | ||
+ | User root | ||
+ | UserKnownHostsFile /dev/null | ||
+ | StrictHostKeyChecking no | ||
+ | |||
+ | Before you had to | ||
+ | host$ ssh -CX root@beagle | ||
+ | |||
+ | Now you can just | ||
+ | host$ ssh -CX beagle | ||
=== Mounting dfs/afs === | === Mounting dfs/afs === | ||
Line 114: | Line 166: | ||
</pre> | </pre> | ||
You'll have to replace <code>username</code> with your login name. Then create the mount points: | You'll have to replace <code>username</code> with your login name. Then create the mount points: | ||
− | + | ||
− | cd ~ | + | host$ '''cd ~''' |
− | mkdir MyDocs | + | host$ '''mkdir MyDocs''' |
− | mkdir dfs-home | + | host$ '''mkdir dfs-home''' |
− | mkdir afs-home | + | host$ '''mkdir afs-home''' |
− | + | ||
Now you can mount your files by using: | Now you can mount your files by using: | ||
− | + | ||
− | cd ~ | + | host$ '''cd ~''' |
− | mount dfs-home | + | host$ '''mount dfs-home''' |
− | cd dfs-home | + | host$ '''cd dfs-home''' |
− | ls | + | host$ '''ls''' |
− | + | ||
You should now see your dfs files. You can unmount using: | You should now see your dfs files. You can unmount using: | ||
− | + | ||
− | cd ~ | + | host$ '''cd ~''' |
− | sudo umount dfs-home | + | host$ '''sudo umount dfs-home''' |
− | + | ||
+ | === debugfs === | ||
+ | |||
+ | '''debugfs''' looks like a handy way to look into the kernel. These notes are based on the example [https://groups.google.com/forum/#!msg/beagleboard/bGZcCHwHwrI/CXHJ0WOBpV0J here]. | ||
+ | |||
+ | beagle$ '''cd /''' | ||
+ | beagle$ '''mkdir debugfs''' | ||
+ | beagle$ '''mount -t debugfs none debugfs''' | ||
+ | |||
+ | Then explore... | ||
+ | |||
+ | bone$ '''cd debugfs; ls -F''' | ||
+ | asoc/ gpio mmc0/ pm_debug/ sched_features vram | ||
+ | bdi/ hid/ musb/ regdump testmode wakeup_sources | ||
+ | clock/ memblock/ omap_mux/ regulator/ usb/ | ||
+ | |||
+ | beagle$ ''' cd debugfs; ls -F''' | ||
+ | asoc/ clock/ hid/ omapdss/ sched_features usb/ | ||
+ | bdi/ gpio mmc0/ pm_debug/ tracing/ vram | ||
=== Tool chain work flows === | === Tool chain work flows === | ||
Line 138: | Line 208: | ||
=== Installing more applications === | === Installing more applications === | ||
+ | ==== On the Beagle ==== | ||
− | + | On the Beagle under Angstrom you use '''opkg''' to manage packages. Start with | |
− | + | beagle$ '''opkg update''' | |
− | |||
− | |||
This updated the local database with the current version information. Then | This updated the local database with the current version information. Then | ||
− | + | beagle$ '''opkg list > /tmp/list''' | |
− | + | beagle$ '''less /tmp/list''' | |
− | + | ||
− | |||
will list all the available packages. You can also search here [1] to see what packages are available. | will list all the available packages. You can also search here [1] to see what packages are available. | ||
[1] [http://www.angstrom-distribution.org/repo/ www.angstrom-distribution.org/repo/] | [1] [http://www.angstrom-distribution.org/repo/ www.angstrom-distribution.org/repo/] | ||
+ | |||
+ | ==== On the host ==== | ||
+ | There are tree command that I use for managing packages. | ||
+ | |||
+ | ; dpkg | ||
+ | : is used for listing what packages are installed. | ||
+ | ; synaptic | ||
+ | : is a GUI-based package manager. I used it to discover new packages to install. | ||
+ | ; apt-get | ||
+ | : is used to install and update packages. | ||
+ | |||
+ | For example, let's suppose you run '''make menuconfig''' and the error message says | ||
+ | *** Install ncurses (ncurses-devel) and try again. | ||
+ | |||
+ | Let's see what's installed. | ||
+ | host$ '''dpkg -l > /tmp/list''' | ||
+ | host$ '''grep curses /tmp/list''' | ||
+ | ii libncurses5 5.7+20090803-2ubuntu3 shared libraries for terminal handling | ||
+ | ii libncursesw5 5.7+20090803-2ubuntu3 shared libraries for terminal handling (wide | ||
+ | ii mtr-tiny 0.75-2build1 Full screen ncurses traceroute tool | ||
+ | ii ncurses-base 5.7+20090803-2ubuntu3 basic terminal type definitions | ||
+ | ii ncurses-bin 5.7+20090803-2ubuntu3 terminal-related programs and man pages | ||
+ | |||
+ | Hmmm... there's something related to ncurses installed, but the error says something about ncurses-devel. Let's fire up synaptic | ||
+ | host$ '''synaptic &''' | ||
+ | Enter '''ncurses-devel''' in the search field. | ||
+ | [[File:Screenshot-Synaptic Package Manager .png | 500px]] | ||
+ | |||
+ | The green dot in the '''S''' column says the package is installed. '''libncurses5-dev''' isn't installed. Install it with: | ||
+ | host$ '''sudo apt-get install libncurses5-dev''' | ||
+ | |||
+ | And now your make should work. | ||
=== byobu - A Screen Manager === | === byobu - A Screen Manager === | ||
Line 160: | Line 260: | ||
Install byobu on your host with: | Install byobu on your host with: | ||
− | + | ||
− | $ sudo apt-get update | + | host$ '''sudo apt-get update''' |
− | $ sudo apt-get install byobu | + | host$ '''sudo apt-get install byobu''' |
− | + | ||
It's a bit harder on the Beagle. | It's a bit harder on the Beagle. | ||
− | + | beagle$ '''opkg update''' | |
− | + | beagle$ '''opkg install screen''' | |
− | + | Go to [https://launchpad.net/byobu/+download here] and download the latest version to your Beagle. | |
− | + | beagle$ '''tar zxvf byobu_*.orig.tar.gz''' | |
− | + | beagle$ '''cd byobu*''' and follow the instructions in INSTALL. I had to hack one file. | |
− | + | beagle$ '''gedit /usr/local/lib/byobu/.constants'''. | |
− | + | ||
− | # command -v gsed >/dev/null && export SED="gsed" || export SED="sed" | + | Change the last two lines to: |
− | # command -v greadlink >/dev/null && export READLINK="greadlink" || export READLINK="readlink" | + | |
− | export SED="sed" | + | # command -v gsed >/dev/null && export SED="gsed" || export SED="sed" |
− | export READLINK="readlink" | + | # command -v greadlink >/dev/null && export READLINK="greadlink" || export READLINK="readlink" |
− | + | export SED="sed" | |
+ | export READLINK="readlink" | ||
+ | |||
Now you can run it. | Now you can run it. | ||
− | + | ||
− | $ byobu | + | beagle$ '''byobu''' |
− | + | ||
You'll see a command prompt. You'll also see some status information on the bottom two lines. Type Ctrl-A ? for help. Type Ctrl-A Ctrl-D to detach from the session. Running byobu again will reattach you to the session. Try running byobu in two windows at the same time. You should see the same session in both. | You'll see a command prompt. You'll also see some status information on the bottom two lines. Type Ctrl-A ? for help. Type Ctrl-A Ctrl-D to detach from the session. Running byobu again will reattach you to the session. Try running byobu in two windows at the same time. You should see the same session in both. | ||
Line 187: | Line 289: | ||
=== Finding what opkg installed === | === Finding what opkg installed === | ||
− | Once you've run opkg, how do you know what's been installed? Take a look in '''/usr/lib/opkg/info'''. The files that end in .list contain a list of what's been installed | + | Once you've run opkg, how do you know what's been installed? Take a look in '''/var/lib/opkg/info''' or '''/usr/lib/opkg/info'''. The files that end in .list contain a list of what's been installed. |
=== Backing up an SD card with dd === | === Backing up an SD card with dd === | ||
Line 193: | Line 295: | ||
Here's the command I use to backup an SD card. I use '''System:Administration:Disk Utility''' to figure out the path to the card. In this case it's ''/dev/sdc'' | Here's the command I use to backup an SD card. I use '''System:Administration:Disk Utility''' to figure out the path to the card. In this case it's ''/dev/sdc'' | ||
− | $ sudo time dd if=''/dev/sdc'' of=FIE2011.img bs=4M count=1000 | + | host$ '''sudo time dd if=''/dev/sdc'' of=FIE2011.img bs=4M count=1000''' |
− | $ sudo chown yoder:yoder FIE2011.img | + | host$ '''sudo chown yoder:yoder FIE2011.img''' |
− | $ md5sum FIE2011.img > FIE2011.img.md5 | + | host$ '''md5sum FIE2011.img > FIE2011.img.md5''' |
− | $ bzip2 -k FIE2011.img | + | host$ '''bzip2 -k FIE2011.img''' |
It takes about 5 minutes to dd a 4G card, 1.2 minutes for md5 and bzip2 takes about 23 minutes. | It takes about 5 minutes to dd a 4G card, 1.2 minutes for md5 and bzip2 takes about 23 minutes. | ||
+ | |||
+ | It looks like the 7z compression is becoming popular. Use it via | ||
+ | host$ ''' 7za a FIE2011.img.7z IFE2011.img | ||
+ | |||
+ | It took 16 minutes. The file size is 454M compared to 628M. Wow, faster and smaller. | ||
+ | |||
+ | === CSSE's Linux reference page === | ||
+ | |||
+ | CSSE332, Operating Systems, has a [http://www.rose-hulman.edu/class/csse/csse332/current/Resources/ nice page of Linux resources]. | ||
+ | |||
+ | === Local Ubuntu Update Mirror === | ||
+ | |||
+ | Darryl Mouck in CSSE has passed this on... | ||
+ | |||
+ | We host a local mirror for all ubuntu updates. This is from the current distro back to hardy; it hosts every distro that ubuntu currently supports. | ||
+ | |||
+ | In order to get your system to point to our mirror, please copy and paste this rather lengthy command into a terminal: | ||
+ | |||
+ | host$ '''sudo cp /etc/apt/sources.list{,.old} && \ | ||
+ | sudo sh -c '\ | ||
+ | '''. /etc/lsb-release &&''' | ||
+ | '''echo "''' | ||
+ | '''deb http://ftp.csse.rose-hulman.edu/ubuntu $DISTRIB_CODENAME main restricted universe multiverse''' | ||
+ | '''deb http://ftp.csse.rose-hulman.edu/ubuntu $DISTRIB_CODENAME-updates main restricted universe multiverse''' | ||
+ | '''deb http://ftp.csse.rose-hulman.edu/ubuntu $DISTRIB_CODENAME-security main restricted universe multiverse''' | ||
+ | '''" > /etc/apt/sources.list' && sudo apt-get update''' | ||
+ | |||
+ | The text and further instructions are available [http://csse.rose-hulman.edu/news-mainmenu-2/27-linux-distros/102-ubuntu here]. | ||
+ | |||
+ | The script makes a backup of the updates file and replaces it with links to our mirror. The $DISTRIB_CODENAME is replaced by whatever distro you are running (eg. lucid, maverick, natty etc.). I wish I could take credit for it, but it was a joint effort with Mike McLeish :-) | ||
+ | |||
+ | === Using pico DLP with BBB === | ||
+ | |||
+ | Put this in uEnv.txt to use the BBB with a pico DLP. | ||
+ | optargs=video=HDMI-A-1:640x480@60 | ||
+ | |||
+ | === More tips === | ||
+ | |||
+ | [http://www.gigamegablog.com/2012/01/29/beaglebone-linux-101-configuring-angstrom-linux/ GigaMegaBlog] has some nice tips for the BeagleBone, many of which apply to the -xM. | ||
== Windows == | == Windows == | ||
Line 204: | Line 345: | ||
Most of the work is done under Linux; however there are some handy Windows-based tools. | Most of the work is done under Linux; however there are some handy Windows-based tools. | ||
− | === | + | === Serial Port === |
− | [http://www.tucows.com/preview/195282 Tera Term] | + | [http://www.vandyke.com/products/securecrt/ SecureCRT] is a good program that gives you both access to a serial port and is also an ssh client. Rose has a license for [http://www.rose-hulman.edu/tsc/software/documentation/applications/securecrt-secureFX/installation/ SecureCRT]. |
+ | |||
+ | [http://www.tucows.com/preview/195282 Tera Term] also gives you access to the serial port and it's free. | ||
=== Notepad++ === | === Notepad++ === | ||
Line 212: | Line 355: | ||
[http://notepad-plus-plus.org/ Notepad++] is a nice text editor for Windows. | [http://notepad-plus-plus.org/ Notepad++] is a nice text editor for Windows. | ||
− | == Set up == | + | == Set up on the BeagleBoard == |
+ | |||
+ | === Setup stuff on github === | ||
+ | If you've cloned the course github site ([EBC Exercise 05 Getting Exercise Support Materials]]) you will find set up things in '''exercises/setup'''. '''install.sh''' is a list of various things I to to a fresh SD card to 'move in'. For example, the bone will mount a filesystem on the host computer if it's connected via USB. You can turn this off and have the eithernet over USB run at boot time with: | ||
+ | |||
+ | # Turn off storage gadget, turn on network at boot time. | ||
+ | cd /lib/systemd/system/basic.target.wants | ||
+ | rm storage-gadget-init.service | ||
+ | ln -s ../network-gadget-init.service . | ||
+ | |||
+ | === Accessing the Beagle via the Serial Port === | ||
+ | |||
+ | During boot up the Beagle logs various messages on the serial port. You can see these messages by: | ||
+ | |||
+ | * See what USB/tty devices are already attached to your host | ||
+ | host$ '''ls /dev/ttyU*''' | ||
+ | * Attach a serial to USB converter to your host computer and the Beagle's serial port. | ||
+ | * See what new USB/tty devices appeared | ||
+ | host$ '''ls /dev/ttyU*''' | ||
+ | * On my host, '''/dev/ttyUSB1''' appeared. On the host computer run | ||
+ | |||
+ | host$ '''byobu /dev/ttyUSB''1'' 115200''' | ||
+ | where '''ttyUSB1''' is what appeared when you plugged in your converter. | ||
+ | |||
+ | You are now talking to your Beagle's serial port. Login quickly. There appears to be a bug that makes garbage appear on your screen if you wait too long. Try | ||
+ | beagle$ '''shutdown -r now''' | ||
+ | |||
+ | You will see the shutdown messages, followed by the U-boot messages. After a 3 second (or so) delay you will see the kernel booting. | ||
+ | |||
+ | '''Tip 1''': Ctrl-a H will cause the data on the serial port to be logged. See | ||
+ | host$ '''man byobu''' | ||
+ | for help. | ||
+ | |||
+ | '''Tip 2''': <F6> will disconnect from the session. You can reconnect later. | ||
=== Installing Ubuntu === | === Installing Ubuntu === | ||
Line 241: | Line 417: | ||
have the ramdisk, I downloaded the one used being shipped with the xM | have the ramdisk, I downloaded the one used being shipped with the xM | ||
boards today [http://www.google.com/url?sa=D&q=http://beagleboard-validation.s3.amazonaws.com/deploy/201008201549/sd/ramdisk.gz]. | boards today [http://www.google.com/url?sa=D&q=http://beagleboard-validation.s3.amazonaws.com/deploy/201008201549/sd/ramdisk.gz]. | ||
− | + | ||
− | + | beagle$ '''wget http://www.google.com/url?sa=D&q=http://beagleboard-validation.s3.amazonaws.com/deploy/201008201549/sd/ramdisk.gz''' | |
− | http://www.google.com/url?sa=D&q=http://beagleboard-validation.s3.amazonaws.com/deploy/201008201549/sd/ramdisk.gz | + | Connecting to beagleboard-validation.s3.amazonaws.com (72.21.214.39:80) |
− | Connecting to beagleboard-validation.s3.amazonaws.com (72.21.214.39:80) | + | ramdisk.gz 100% |*******************************| 19492k 00:00:00 ETA |
− | ramdisk.gz 100% |*******************************| 19492k 00:00:00 ETA | + | beagle$ '''cp ramdisk.gz /media/mmcblk0p1/''' |
− | + | beagle$ '''shutdown -r now''' | |
− | + | ||
− | |||
I halted the board during reboot and did: | I halted the board during reboot and did: | ||
− | + | ||
− | OMAP3 beagleboard.org # mmc rescan 0 | + | OMAP3 beagleboard.org # '''mmc rescan 0''' |
− | OMAP3 beagleboard.org # run loaduimage | + | OMAP3 beagleboard.org # '''run loaduimage''' |
− | Loading file "/boot/uImage" from mmc device 0:2 (xxa2) | + | Loading file "/boot/uImage" from mmc device 0:2 (xxa2) |
− | 3194256 bytes read | + | 3194256 bytes read |
− | OMAP3 beagleboard.org # run loadramdisk | + | OMAP3 beagleboard.org # '''run loadramdisk''' |
− | reading ramdisk.gz | + | reading ramdisk.gz |
− | 19960110 bytes read | + | 19960110 bytes read |
− | OMAP3 beagleboard.org # run ramboot | + | OMAP3 beagleboard.org # '''run ramboot''' |
− | + | ||
I allowed it to boot and did: | I allowed it to boot and did: | ||
− | + | ||
− | + | beagle$ '''umount /dev/mmcblk0p1''' | |
− | + | beagle$ '''umount /dev/mmcblk0p2''' | |
− | + | beagle$ '''fdisk /dev/mmcblk0''' | |
− | Command (m for help): p | + | Command (m for help): '''p''' |
− | Disk /dev/mmcblk0: 3965 MB, 3965190144 bytes | + | Disk /dev/mmcblk0: 3965 MB, 3965190144 bytes |
− | 255 heads, 63 sectors/track, 482 cylinders | + | 255 heads, 63 sectors/track, 482 cylinders |
− | Units = cylinders of 16065 * 512 = 8225280 bytes | + | Units = cylinders of 16065 * 512 = 8225280 bytes |
− | Sector size (logical/physical): 512 bytes / 512 bytes | + | Sector size (logical/physical): 512 bytes / 512 bytes |
− | Disk identifier: 0x00000000 | + | Disk identifier: 0x00000000 |
− | + | Device Boot Start End Blocks Id System | |
− | /dev/mmcblk0p1 * 1 15 120456 c W95 FAT32 (LBA) | + | /dev/mmcblk0p1 * 1 15 120456 c W95 FAT32 (LBA) |
− | /dev/mmcblk0p2 16 444 3445942+ 83 Linux | + | /dev/mmcblk0p2 16 444 3445942+ 83 Linux |
− | Command (m for help): d | + | Command (m for help): '''d''' |
− | Partition number (1-4): 2 | + | Partition number (1-4): '''2''' |
− | Command (m for help): n | + | Command (m for help): '''n''' |
− | Command action | + | Command action |
− | + | e extended | |
− | + | p primary partition (1-4) | |
− | p | + | '''p''' |
− | Partition number (1-4): 2 | + | Partition number (1-4): '''2''' |
− | First cylinder (16-482, default 16): | + | First cylinder (16-482, default 16): |
− | Using default value 16 | + | |
− | Last cylinder, +cylinders or +size{K,M,G} (16-482, default 482): | + | Using default value 16 |
− | Using default value 482 | + | Last cylinder, +cylinders or +size{K,M,G} (16-482, default 482): |
− | Command (m for help): w | + | |
− | The partition table has been altered! | + | Using default value 482 |
− | Calling ioctl() to re-read partition table. | + | Command (m for help): '''w''' |
− | Syncing disks. | + | The partition table has been altered! |
− | + | Calling ioctl() to re-read partition table. | |
− | + | Syncing disks. | |
− | resize2fs 1.41.9 (22-Aug-2009) | + | beagle$ '''umount /dev/mmcblk0p2''' |
− | Resizing the filesystem on /dev/mmcblk0p2 to 937794 (4k) blocks. | + | beagle$ '''resize2fs /dev/mmcblk0p2''' |
− | The filesystem on /dev/mmcblk0p2 is now 937794 blocks long. | + | resize2fs 1.41.9 (22-Aug-2009) |
− | + | Resizing the filesystem on /dev/mmcblk0p2 to 937794 (4k) blocks. | |
− | + | The filesystem on /dev/mmcblk0p2 is now 937794 blocks long. | |
+ | beagle$ '''shutdown -r now''' | ||
+ | |||
I then waited for the reboot. That was all there was to it. | I then waited for the reboot. That was all there was to it. | ||
Going the other way would require performing the resize operation | Going the other way would require performing the resize operation | ||
Line 302: | Line 479: | ||
Anyone care to automate this and submit this to Angstrom? | Anyone care to automate this and submit this to Angstrom? | ||
− | + | ||
=== Sharing Laptop Internet Connection with BeagleBoard === | === Sharing Laptop Internet Connection with BeagleBoard === | ||
Two options: One uses Ubuntu's GUI network connections manager, the other requires modifying things yourself. | Two options: One uses Ubuntu's GUI network connections manager, the other requires modifying things yourself. | ||
Line 325: | Line 502: | ||
On the host machine, configure eth0 for a static IP: | On the host machine, configure eth0 for a static IP: | ||
− | + | ||
+ | host$ '''sudo ifconfig eth0 192.168.1.13''' | ||
+ | |||
If you don't want to configure this after every boot, add an entry to /etc/network/interfaces with the following: | If you don't want to configure this after every boot, add an entry to /etc/network/interfaces with the following: | ||
<pre> | <pre> | ||
Line 336: | Line 515: | ||
On the host machine, configure the IP tables to use NAT translation for routing packets: | On the host machine, configure the IP tables to use NAT translation for routing packets: | ||
− | + | ||
− | sudo iptables -A FORWARD -o wlan0 -i eth0 -s 192.168.1.0/24 -m conntrack --ctstate NEW -j ACCEPT | + | host$ '''sudo iptables -A FORWARD -o wlan0 -i eth0 -s 192.168.1.0/24 -m conntrack --ctstate NEW -j ACCEPT''' |
− | sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT | + | host$ '''sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT''' |
− | sudo iptables -A POSTROUTING -t nat -j MASQUERADE | + | host$ '''sudo iptables -A POSTROUTING -t nat -j MASQUERADE''' |
− | + | ||
To avoid having to setup the IP tables after every boot, save the IP tables | To avoid having to setup the IP tables after every boot, save the IP tables | ||
− | + | ||
+ | host$ '''sudo iptables-save | sudo tee /etc/iptables.sav''' | ||
+ | |||
And add the following command to /etc/rc.local (or other appropriate file for your distribution) to be run at boot | And add the following command to /etc/rc.local (or other appropriate file for your distribution) to be run at boot | ||
<pre>iptables-restore < /etc/iptables.sav</pre> | <pre>iptables-restore < /etc/iptables.sav</pre> | ||
IP forwarding needs to be enabled: | IP forwarding needs to be enabled: | ||
− | + | ||
+ | host$ '''sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"''' | ||
+ | |||
To make sure this is set after rebooting, add these lines to /etc/sysctl.conf: | To make sure this is set after rebooting, add these lines to /etc/sysctl.conf: | ||
<pre> | <pre> | ||
Line 355: | Line 538: | ||
Install the DHCP server software | Install the DHCP server software | ||
− | + | ||
+ | host$ '''sudo apt-get install dhcp3-server''' | ||
+ | |||
And edit the configuration file /etc/dhcp3/dhcpd.conf (comment out any already existing lines other than "ddns-update-style none;") | And edit the configuration file /etc/dhcp3/dhcpd.conf (comment out any already existing lines other than "ddns-update-style none;") | ||
<pre> | <pre> | ||
Line 374: | Line 559: | ||
<pre>INTERFACES="eth0"</pre> | <pre>INTERFACES="eth0"</pre> | ||
Then restart the DHCP server service | Then restart the DHCP server service | ||
− | + | ||
+ | host$ '''sudo service dhcp3-server restart''' | ||
You may need to reboot your host machine, and it may be necessary to run the command above to restart the DHCP server every time you boot (I'm not sure if it starts appropriately at boot). | You may need to reboot your host machine, and it may be necessary to run the command above to restart the DHCP server every time you boot (I'm not sure if it starts appropriately at boot). | ||
Line 381: | Line 567: | ||
Once the Beagle does have an IP address, try | Once the Beagle does have an IP address, try | ||
− | + | ||
+ | beagle$ '''ping -c 3 -W 10 www.google.com''' | ||
+ | |||
to test if the setup is working correctly. If it complains about a bad name, the DNS servers are incorrect; try pinging a specific IP such as 8.8.8.8 to see if packets get through (though unless you want to rely on all IP addresses, you will need to get some DNS servers that work). | to test if the setup is working correctly. If it complains about a bad name, the DNS servers are incorrect; try pinging a specific IP such as 8.8.8.8 to see if packets get through (though unless you want to rely on all IP addresses, you will need to get some DNS servers that work). | ||
Line 411: | Line 599: | ||
=== Using u-boot to specify a MAC address at boot === | === Using u-boot to specify a MAC address at boot === | ||
− | The BeagleBoard has a problem where Linux will randomly select a MAC address at boot. In order to get around this, [http:// | + | The BeagleBoard has a problem where Linux will randomly select a MAC address at boot. In order to get around this, [http://blog.galemin.com/tag/random-mac-address/ one blogger] provides a patch to enable a kernel command line parameter to set a MAC address. Below is one way to apply, your mileage may vary. |
# Make sure your kernel compiles and boots. | # Make sure your kernel compiles and boots. | ||
Line 436: | Line 624: | ||
[1] [http://help.ubuntu.com/community/RenameUSBDrive help.ubuntu.com/community/RenameUSBDrive] | [1] [http://help.ubuntu.com/community/RenameUSBDrive help.ubuntu.com/community/RenameUSBDrive] | ||
+ | |||
+ | |||
+ | |||
+ | === Setup a USB Wireless Device on Beagle === | ||
+ | |||
+ | ([http://embeddedgeeks.wordpress.com/2012/01/03/belkin-micro-wifi-usb-dongle-on-the-beagleboard/ Here] are instructions on setting up a Belkin USB dongle.) | ||
+ | |||
+ | The device I used to setup a wireless connection on the Beagle Board was the Linksys Compact Wireless-G USB Network Adapter with SpeedBooster. | ||
+ | |||
+ | I first opened the wpa_supplicant.conf file to setup my networks: | ||
+ | |||
+ | beagle$ '''cd /etc''' | ||
+ | beagle$ '''gedit wpa_supplicant.conf &''' | ||
+ | |||
+ | This file is filled with numerous examples of possible wireless configurations for you to basically fill in. After looking at the examples, I scrolled down to the bottom of the page and set up two networks: one for home and one for school. Here are examples of my setup networks: | ||
+ | <pre> | ||
+ | #Home Network | ||
+ | network={ | ||
+ | ssid="YourHomeNetworkName" | ||
+ | psk="YourHomeNetworkPassword" | ||
+ | } | ||
+ | |||
+ | #School Network | ||
+ | network={ | ||
+ | ssid="RHIT-1X" | ||
+ | proto=WPA | ||
+ | key_mgmt=WPA-EAP | ||
+ | pairwise=CCMP | ||
+ | group=TKIP | ||
+ | eap=PEAP | ||
+ | phase1="peapver=0 peaplabel=0" | ||
+ | phase2="auth=MSCHAPV2" | ||
+ | scan_ssid=1 | ||
+ | identity="YourSchoolUsername" | ||
+ | password="YourSchoolPassword" | ||
+ | } | ||
+ | </pre> | ||
+ | For the network examples above,the quotation marks actually belong there but replace the Your.... areas with your corresponding information. No <space> before the first quotation mark.When finished editing save and exit this file. | ||
+ | The information for the RHIT school network was found here:[http://lug.rose-hulman.edu/wiki/RHIT-1X RHLUG] | ||
+ | |||
+ | Now you must specify that this is the file to use for the wireless device: | ||
+ | |||
+ | beagle$ '''cd network''' | ||
+ | beagle$ '''gedit interfaces &''' | ||
+ | |||
+ | This file will display all of the different types of Internet connections you have setup. | ||
+ | To use the wpa_supplicant.conf file, scroll down to around line 42 of the code and uncomment the configuration for wpasupplicant. After doing this make sure all of the above lines mentioning anything about wlan0 are commented out. Return back to where it says "iface wlan0 inet dhcp" that you uncommented around line 42. | ||
+ | Add "auto wlan0" above this line, make sure the line "wpa-conf /etc/wpa_supplicant.conf" is uncommented below the iface line, and change the wpa-driver line below that line to wext. So after all of that the code in this file for the wireless device should be the following: | ||
+ | <pre> | ||
+ | auto wlan0 | ||
+ | iface wlan0 inet dhcp | ||
+ | wpa-conf /etc/wpa_supplicant.conf | ||
+ | wpa-driver wext | ||
+ | </pre> | ||
+ | NOTE: the auto wlan0 command in this file means that this device will load at boot time. You can take the time in here now to comment out any interfaces you don't use like auto usb0 to make these devices not load at boot time, which will increase the speed at which you boot up. | ||
+ | Save and exit this file | ||
+ | |||
+ | Once you have finished this you can either restart the Beagle Board or: | ||
+ | |||
+ | beagle$ '''cd''' | ||
+ | beagle$ '''/etc/init.d/networking restart''' | ||
+ | |||
+ | I've found that a lot of the time the interface doesn't receive an IP address when it boots up. If you run ifconfig in the terminal you should see your wireless device connected to a network. If it is connected but no IP address I do the following: | ||
+ | |||
+ | beagle$ '''ifdown wlan0''' | ||
+ | # it will report messages here and then | ||
+ | beagle$ '''ifup wlan0''' | ||
+ | # more messages and it should report connecting and having an IP address | ||
+ | |||
+ | This ifdown ifup method has worked every time for me so far but if anyone can find a way to prevent having to do this almost every time please feel free to edit this | ||
== Development tips for bitbake and oe == | == Development tips for bitbake and oe == | ||
Line 447: | Line 705: | ||
Line 564 shows an additional git repository was used. | Line 564 shows an additional git repository was used. | ||
− | + | host$ '''cd sources/openembedded''' | |
− | $ cd sources/openembedded | + | host$ '''git remote add myrepo git://gitorious.org/~Jadon/angstrom/jadon-openembedded.git''' |
− | $ git remote add myrepo git://gitorious.org/~Jadon/angstrom/jadon-openembedded.git | + | host$ '''git remote update''' |
− | $ git remote update | ||
− | |||
Run this git command to get access to this repository. (It took about 2 minutes at 6:20am.) Line 21 shows the hash tag for the build. | Run this git command to get access to this repository. (It took about 2 minutes at 6:20am.) Line 21 shows the hash tag for the build. | ||
− | + | ANGSTROM_REPO_ID=24805033b1205acc35f8b4d75cc42f8b9c2a1b38 | |
− | ANGSTROM_REPO_ID=24805033b1205acc35f8b4d75cc42f8b9c2a1b38 | ||
− | |||
If we pull from this tag we will have the same files as were used to generate the SD image. So do the following | If we pull from this tag we will have the same files as were used to generate the SD image. So do the following | ||
− | + | host$ '''git checkout 24805033b1205acc35f8b4d75cc42f8b9c2a1b38''' | |
− | $ git checkout 24805033b1205acc35f8b4d75cc42f8b9c2a1b38 | + | |
− | |||
This takes about 10 seconds. | This takes about 10 seconds. | ||
Line 504: | Line 757: | ||
[http://groups.google.com/group/beagleboard/msg/db315d63de2a522a Here's] a nice tip on what to do before posting a question to a news group. | [http://groups.google.com/group/beagleboard/msg/db315d63de2a522a Here's] a nice tip on what to do before posting a question to a news group. | ||
+ | |||
+ | {{YoderFoot}} |
Revision as of 09:12, 16 July 2013
Embedded Linux Class by Mark A. Yoder
Some useful tips and tricks for Linux and the Beagleboard.
Contents
- 1 Interesting Links
- 2 Linux
- 2.1 Quick Tips
- 2.2 Connecting to RHIT wifi
- 2.3 bash
- 2.4 ssh
- 2.5 Mounting dfs/afs
- 2.6 debugfs
- 2.7 Tool chain work flows
- 2.8 Installing more applications
- 2.9 byobu - A Screen Manager
- 2.10 Finding what opkg installed
- 2.11 Backing up an SD card with dd
- 2.12 CSSE's Linux reference page
- 2.13 Local Ubuntu Update Mirror
- 2.14 Using pico DLP with BBB
- 2.15 More tips
- 3 Windows
- 4 Set up on the BeagleBoard
- 4.1 Setup stuff on github
- 4.2 Accessing the Beagle via the Serial Port
- 4.3 Installing Ubuntu
- 4.4 Installing Always Innovating's Super Jumbo
- 4.5 Resizing an SD card partition via the Beagle
- 4.6 Sharing Laptop Internet Connection with BeagleBoard
- 4.7 Using u-boot to specify a MAC address at boot
- 4.8 Rename an External Storage Device
- 4.9 Setup a USB Wireless Device on Beagle
- 5 Development tips for bitbake and oe
- 6 Fixing Problems
- 7 Details of making your own MLO
- 8 Getting help from a news group
Interesting Links
Since we are working with the open source community, you need to know where the action is. Here are some useful links to what's happening in the Beagle community.
- State of the Beagle 2011, learn about the Beagle's past, present and future.
- BeagleBoard.org, the starting point for all thing Beagle.
- Beagle Discussion Group, lot's of good information here, but you'll have to dig a bit. Subscribe and follow the discussion.
- blogspot, see what is being said about the Beagle.
- eLinux, this is where this page is being hosted. It's about embedded Linux in general, not just the BeagleBoard.
- Free Electrons Beagle Board Training, some good labs about what makes embedded Linux run.
- TI Embedded Speech Recognizer (TIesr) is a fixed-point recognizer written in C++ and C.
- Google Summer of Code. BeagleBoard is an accepted organization.
- Linux Kernel Map
- Texas Instruments Embedded Processors Wiki
Linux
Learn UNIX in 10 Minutes is a quick overview of the most commonly used Linux commands.
Top 10 Tools is a nice summary of 10 of the most useful Linux commands.
Quick Tips
Tip | Description |
---|---|
beagle$ gnome-open |
Open a file or directory using the default program |
Give the IP address a name | Inside /etc/hosts add a line of the form <IP address> <alias> this will allow you to refer to the host by name. |
Built-in GUI for gdb | If you invoke gdb with the command line argument -tui, it will show a built-in GUI |
beagle$ ntpdate ntp.org beagle$ rm /etc/localtime beagle$ ln -s /usr/share/zoneinfo/America/New_York /etc/localtime |
This will go to a network time protocol server and get the current time and set the Beagle to it and set the local time zone. [1] |
beagle$ mount -t debugfs debugfs /sys/kernel/debug/ beagle$ cd /sys/kernel/debug beagle$ ls |
Kernel Debug Info |
Connecting to RHIT wifi
There is a discussion in the Beagle Google Group about getting wireless working with the bone.
Use these settings for connecting to the Rose-Hulman wireless network:
- SSID: RHIT-1X
- Security: WPA & WPA2 Enterprise
- Leave "anonymous identity" blank
- CA Certificate: (None)
- PEAP version: Version 0
- Inner authentication: MSCHAPv2
- Use your Rose username and password
bash
Tip | Description |
---|---|
Ctrl-r | Reverse incremental search |
Ctrl-g | Abort command |
Esc-. | Insert last argument from last command |
ssh
Suspending ssh
Most programs can be suspended by typing ^z
(Ctrl-z). If you have an ssh connection to another machine you can suspend it by entering ~^z
. You can resume the connection by entering fg.
ssh and X-windows
When using ssh between to X-windows systems try
host$ ssh -CX root@beagle
The -X set the DISPLAY variable on the remote machine so you can open windows from the beagle on your host machine.
The -C compressed the data over the link. Good for slow connections.
vnc
You can run a vnc server on the Beagle. Install it with:
beagle$ opkg update beagle$ opkg install x11vnc
Install a password with
beagle$ x11vnc -storepasswd
Run it on the Beagle with
beagle$ x11vnc -display :0 -ssl -usepw -forever -q &
On your host, connect to it with:
host$ vinagre
or Applications:Internet:Remote Desktop Viewer
Authorizing ssh
ssh and scp can be set up for automatic authorization so you don't have to enter your password when using these commands. Here's how to do it. First let's see what's already there:
- On your Beagle run
beagle$ ls ~/.ssh
~/.ssh may not exist, if not, it will be created. If it's there, check the files in it.
- On your host computer run
host$ ssh-copy-id root@beagle
It was ask for you beagle password and then copy the needed files to it.
- Back on the beagle to see what has changed:
host$ ssh -CX root@beagle beagle$ ls ~/.ssh
The ssh command shouldn't ask for a password. What new files appeared?
ssh configuration
Here's a nice tip so you don't have to remember who to login as on the beagle. On your host, put the following in ~/.ssh/config.
Host beagle User root UserKnownHostsFile /dev/null StrictHostKeyChecking no
Before you had to
host$ ssh -CX root@beagle
Now you can just
host$ ssh -CX beagle
Mounting dfs/afs
You can set up your Linux box to directly mount your afs and dfs files. The Rose-Hulman Linux Users' Group has a nice page with the details .
After installing sshfs
I added the following to my /etc/fstab
file:
sshfs#username@dfs.Rose-hulman.edu:/DFS/MyDocs/username /home/username/MyDocs fuse user,noauto,uid=1000,gid=1000 0 0 sshfs#username@dfs.rose-hulman.edu:/DFS/Users/Y/username /home/username/dfs-home fuse user,noauto,uid=1000,gid=1000 0 0 sshfs#username@afs.rose-hulman.edu: /home/username/afs-home fuse user,noauto,uid=1000,gid=1000 0 0
You'll have to replace username
with your login name. Then create the mount points:
host$ cd ~ host$ mkdir MyDocs host$ mkdir dfs-home host$ mkdir afs-home
Now you can mount your files by using:
host$ cd ~ host$ mount dfs-home host$ cd dfs-home host$ ls
You should now see your dfs files. You can unmount using:
host$ cd ~ host$ sudo umount dfs-home
debugfs
debugfs looks like a handy way to look into the kernel. These notes are based on the example here.
beagle$ cd / beagle$ mkdir debugfs beagle$ mount -t debugfs none debugfs
Then explore...
bone$ cd debugfs; ls -F asoc/ gpio mmc0/ pm_debug/ sched_features vram bdi/ hid/ musb/ regdump testmode wakeup_sources clock/ memblock/ omap_mux/ regulator/ usb/
beagle$ cd debugfs; ls -F asoc/ clock/ hid/ omapdss/ sched_features usb/ bdi/ gpio mmc0/ pm_debug/ tracing/ vram
Tool chain work flows
Here is a link to a list of workflows for various tool chains.
Installing more applications
On the Beagle
On the Beagle under Angstrom you use opkg to manage packages. Start with
beagle$ opkg update
This updated the local database with the current version information. Then
beagle$ opkg list > /tmp/list beagle$ less /tmp/list
will list all the available packages. You can also search here [1] to see what packages are available.
[1] www.angstrom-distribution.org/repo/
On the host
There are tree command that I use for managing packages.
- dpkg
- is used for listing what packages are installed.
- synaptic
- is a GUI-based package manager. I used it to discover new packages to install.
- apt-get
- is used to install and update packages.
For example, let's suppose you run make menuconfig and the error message says
*** Install ncurses (ncurses-devel) and try again.
Let's see what's installed.
host$ dpkg -l > /tmp/list host$ grep curses /tmp/list ii libncurses5 5.7+20090803-2ubuntu3 shared libraries for terminal handling ii libncursesw5 5.7+20090803-2ubuntu3 shared libraries for terminal handling (wide ii mtr-tiny 0.75-2build1 Full screen ncurses traceroute tool ii ncurses-base 5.7+20090803-2ubuntu3 basic terminal type definitions ii ncurses-bin 5.7+20090803-2ubuntu3 terminal-related programs and man pages
Hmmm... there's something related to ncurses installed, but the error says something about ncurses-devel. Let's fire up synaptic
host$ synaptic &
Enter ncurses-devel in the search field.
The green dot in the S column says the package is installed. libncurses5-dev isn't installed. Install it with:
host$ sudo apt-get install libncurses5-dev
And now your make should work.
byobu - A Screen Manager
For years Unix has had screen
which is a screen manager. byobu is wrapper for screen that puts a nice face on it. You can run byobu on your host computer and on the Beagle. With byobu you can start a long running program (bitbake for example) in one terminal and detach from the terminal and the program will keeping running in the background. Using byobu you can later attach to the program (possibly from another terminal) and see how the program is progressing.
Install byobu on your host with:
host$ sudo apt-get update host$ sudo apt-get install byobu
It's a bit harder on the Beagle.
beagle$ opkg update beagle$ opkg install screen
Go to here and download the latest version to your Beagle.
beagle$ tar zxvf byobu_*.orig.tar.gz beagle$ cd byobu* and follow the instructions in INSTALL. I had to hack one file. beagle$ gedit /usr/local/lib/byobu/.constants.
Change the last two lines to:
# command -v gsed >/dev/null && export SED="gsed" || export SED="sed" # command -v greadlink >/dev/null && export READLINK="greadlink" || export READLINK="readlink" export SED="sed" export READLINK="readlink"
Now you can run it.
beagle$ byobu
You'll see a command prompt. You'll also see some status information on the bottom two lines. Type Ctrl-A ? for help. Type Ctrl-A Ctrl-D to detach from the session. Running byobu again will reattach you to the session. Try running byobu in two windows at the same time. You should see the same session in both.
Hmmm.... I had to reinstall and it doesn't seem to be working now.
Finding what opkg installed
Once you've run opkg, how do you know what's been installed? Take a look in /var/lib/opkg/info or /usr/lib/opkg/info. The files that end in .list contain a list of what's been installed.
Backing up an SD card with dd
Here's the command I use to backup an SD card. I use System:Administration:Disk Utility to figure out the path to the card. In this case it's /dev/sdc
host$ sudo time dd if=/dev/sdc of=FIE2011.img bs=4M count=1000 host$ sudo chown yoder:yoder FIE2011.img host$ md5sum FIE2011.img > FIE2011.img.md5 host$ bzip2 -k FIE2011.img
It takes about 5 minutes to dd a 4G card, 1.2 minutes for md5 and bzip2 takes about 23 minutes.
It looks like the 7z compression is becoming popular. Use it via
host$ 7za a FIE2011.img.7z IFE2011.img
It took 16 minutes. The file size is 454M compared to 628M. Wow, faster and smaller.
CSSE's Linux reference page
CSSE332, Operating Systems, has a nice page of Linux resources.
Local Ubuntu Update Mirror
Darryl Mouck in CSSE has passed this on...
We host a local mirror for all ubuntu updates. This is from the current distro back to hardy; it hosts every distro that ubuntu currently supports.
In order to get your system to point to our mirror, please copy and paste this rather lengthy command into a terminal:
host$ sudo cp /etc/apt/sources.list{,.old} && \ sudo sh -c '\ . /etc/lsb-release && echo " deb http://ftp.csse.rose-hulman.edu/ubuntu $DISTRIB_CODENAME main restricted universe multiverse deb http://ftp.csse.rose-hulman.edu/ubuntu $DISTRIB_CODENAME-updates main restricted universe multiverse deb http://ftp.csse.rose-hulman.edu/ubuntu $DISTRIB_CODENAME-security main restricted universe multiverse " > /etc/apt/sources.list' && sudo apt-get update
The text and further instructions are available here.
The script makes a backup of the updates file and replaces it with links to our mirror. The $DISTRIB_CODENAME is replaced by whatever distro you are running (eg. lucid, maverick, natty etc.). I wish I could take credit for it, but it was a joint effort with Mike McLeish :-)
Using pico DLP with BBB
Put this in uEnv.txt to use the BBB with a pico DLP.
optargs=video=HDMI-A-1:640x480@60
More tips
GigaMegaBlog has some nice tips for the BeagleBone, many of which apply to the -xM.
Windows
Most of the work is done under Linux; however there are some handy Windows-based tools.
Serial Port
SecureCRT is a good program that gives you both access to a serial port and is also an ssh client. Rose has a license for SecureCRT.
Tera Term also gives you access to the serial port and it's free.
Notepad++
Notepad++ is a nice text editor for Windows.
Set up on the BeagleBoard
Setup stuff on github
If you've cloned the course github site ([EBC Exercise 05 Getting Exercise Support Materials]]) you will find set up things in exercises/setup. install.sh is a list of various things I to to a fresh SD card to 'move in'. For example, the bone will mount a filesystem on the host computer if it's connected via USB. You can turn this off and have the eithernet over USB run at boot time with:
# Turn off storage gadget, turn on network at boot time. cd /lib/systemd/system/basic.target.wants rm storage-gadget-init.service ln -s ../network-gadget-init.service .
Accessing the Beagle via the Serial Port
During boot up the Beagle logs various messages on the serial port. You can see these messages by:
- See what USB/tty devices are already attached to your host
host$ ls /dev/ttyU*
- Attach a serial to USB converter to your host computer and the Beagle's serial port.
- See what new USB/tty devices appeared
host$ ls /dev/ttyU*
- On my host, /dev/ttyUSB1 appeared. On the host computer run
host$ byobu /dev/ttyUSB1 115200
where ttyUSB1 is what appeared when you plugged in your converter.
You are now talking to your Beagle's serial port. Login quickly. There appears to be a bug that makes garbage appear on your screen if you wait too long. Try
beagle$ shutdown -r now
You will see the shutdown messages, followed by the U-boot messages. After a 3 second (or so) delay you will see the kernel booting.
Tip 1: Ctrl-a H will cause the data on the serial port to be logged. See
host$ man byobu
for help.
Tip 2: <F6> will disconnect from the session. You can reconnect later.
Installing Ubuntu
I've installed 2 different versions of Ubuntu on my SD cards. Each of my SD cards is 4GB, and this is just large enough to hold the Ubuntu images.
I followed the instructions from here and here.
The first link references a Ubuntu wiki which details how to install a netbook edition of Ubuntu on ARM/OMAP processor-based systems. It is not beagle-specific. This image runs a little slowly, but not much slower than the SPEd image.
The second link references instructions for installing another image. This image is very minimal, and doesn't have a gui. There are instructions for installing a gui, which I did, with good success. As far as I can tell, even with the gui, this is the fastest image so far.
Installing Always Innovating's Super Jumbo
Always Innovating works with branded products and services companies that are looking to deliver great touch devices as part of their offerings. They have published a free SD card image for the BeagleBoard that runs Angstrom, Android, Ubuntu, and ChromiumOS. Here's a video showing what it can do.
I've put a copy of the compressed image on my DFS site. Feal free to play with it. Here's a wiki that shows how to switch between OS's on the fly.
Resizing an SD card partition via the Beagle
The following is a slick way to boot the Beagle so it isn't using the SD, then repartition the SD card. It came from [2]
Jason Kridner says ... I got a related question from Mark about how to perform the partition resizing, so I figured I'd address that here. I don't believe you'd be able to resize a mounted partition and that this operation would require another file system to mount. Because this image does not have the ramdisk, I downloaded the one used being shipped with the xM boards today [3].
beagle$ wget http://www.google.com/url?sa=D&q=http://beagleboard-validation.s3.amazonaws.com/deploy/201008201549/sd/ramdisk.gz Connecting to beagleboard-validation.s3.amazonaws.com (72.21.214.39:80) ramdisk.gz 100% |*******************************| 19492k 00:00:00 ETA beagle$ cp ramdisk.gz /media/mmcblk0p1/ beagle$ shutdown -r now
I halted the board during reboot and did:
OMAP3 beagleboard.org # mmc rescan 0 OMAP3 beagleboard.org # run loaduimage Loading file "/boot/uImage" from mmc device 0:2 (xxa2) 3194256 bytes read OMAP3 beagleboard.org # run loadramdisk reading ramdisk.gz 19960110 bytes read OMAP3 beagleboard.org # run ramboot
I allowed it to boot and did:
beagle$ umount /dev/mmcblk0p1 beagle$ umount /dev/mmcblk0p2 beagle$ fdisk /dev/mmcblk0 Command (m for help): p Disk /dev/mmcblk0: 3965 MB, 3965190144 bytes 255 heads, 63 sectors/track, 482 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/mmcblk0p1 * 1 15 120456 c W95 FAT32 (LBA) /dev/mmcblk0p2 16 444 3445942+ 83 Linux Command (m for help): d Partition number (1-4): 2 Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (16-482, default 16): Using default value 16 Last cylinder, +cylinders or +size{K,M,G} (16-482, default 482): Using default value 482 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. beagle$ umount /dev/mmcblk0p2 beagle$ resize2fs /dev/mmcblk0p2 resize2fs 1.41.9 (22-Aug-2009) Resizing the filesystem on /dev/mmcblk0p2 to 937794 (4k) blocks. The filesystem on /dev/mmcblk0p2 is now 937794 blocks long. beagle$ shutdown -r now
I then waited for the reboot. That was all there was to it. Going the other way would require performing the resize operation first and specifying the size.
Anyone care to automate this and submit this to Angstrom?
Sharing Laptop Internet Connection with BeagleBoard
Two options: One uses Ubuntu's GUI network connections manager, the other requires modifying things yourself.
Option 1 - Using Ubuntu Network Connections GUI
- In Ubuntu, go to System -> Preferences -> Network Connections
- On the 'Wired' tab, select 'Auto eth0' and click 'Edit' (Note: name may be other than 'eth0'. If nothing exists in this list, then make sure there is not an entry starting with 'auto eth0' in your /etc/network/interfaces file; such an entry prevents Network Manager from managing that interface.)
- Click the 'IPv4 Settings' tab and change 'Method' to 'Shared to other computers'
- Click apply
- Restart Ubuntu
- Connect the BeagleBoard to the laptop with the crossover Ethernet cable
- Boot the BeagleBoard - if Ubuntu was already running and the Ethernet cable was already plugged in, the BeagleBoard should automatically get assigned an IP address and you should be able to access the Internet on the BeagleBoard via the laptop's wireless connection
Option 2 - Modifying Things Yourself (DHCP Server)
This will setup a DHCP server on the host machine that will listen to the Ethernet port and assign an IP address to the BeagleBoard when it is connected with an Ethernet crossover cable. The host machine will then act as a router using NAT to send packets out the wifi interface.
A number of steps were taken from the Ubuntu Community Documentation.
Notes:
- 'eth0' will refer to the internal interface (connected to the BeagleBoard) and 'wlan0' will refer to the external interface (connected to the Internet). Your interface names may differ.
- A number of configuration files are changed. It's a good idea to save a backup copy of these before modifying them.
On the host machine, configure eth0 for a static IP:
host$ sudo ifconfig eth0 192.168.1.13
If you don't want to configure this after every boot, add an entry to /etc/network/interfaces with the following:
auto eth0 address 192.168.1.13 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255
On the host machine, configure the IP tables to use NAT translation for routing packets:
host$ sudo iptables -A FORWARD -o wlan0 -i eth0 -s 192.168.1.0/24 -m conntrack --ctstate NEW -j ACCEPT host$ sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT host$ sudo iptables -A POSTROUTING -t nat -j MASQUERADE
To avoid having to setup the IP tables after every boot, save the IP tables
host$ sudo iptables-save | sudo tee /etc/iptables.sav
And add the following command to /etc/rc.local (or other appropriate file for your distribution) to be run at boot
iptables-restore < /etc/iptables.sav
IP forwarding needs to be enabled:
host$ sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
To make sure this is set after rebooting, add these lines to /etc/sysctl.conf:
net.ipv4.conf.default.forwarding=1 net.ipv4.conf.all.forwarding=1
Install the DHCP server software
host$ sudo apt-get install dhcp3-server
And edit the configuration file /etc/dhcp3/dhcpd.conf (comment out any already existing lines other than "ddns-update-style none;")
#Added for DHCP with BeagleBoard default-lease-time 600; max-lease-time 7200; option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; option routers 192.168.1.13; #<--This must match the IP address you statically set for eth0 option domain-name-servers 137.112.4.196,137.112.5.28,137.112.12.11; #<--Rose-Hulman's DNS servers (according to my laptop, at least) option domain-name "rose-hulman.edu"; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.14 192.168.1.14; #<--You can specify a larger range; I used this to force my BeagleBoard to always have the same IP so I could add an entry for that IP in /etc/hosts }
You may need to edit /etc/default/dhcp3-server to specify the interface for the DHCP server
INTERFACES="eth0"
Then restart the DHCP server service
host$ sudo service dhcp3-server restart
You may need to reboot your host machine, and it may be necessary to run the command above to restart the DHCP server every time you boot (I'm not sure if it starts appropriately at boot).
Now connect the BeagleBoard to the host machine with a crossover Ethernet cable and boot the Beagle. After booting, run 'ifconfig' to see if the Beagle was assigned an IP address. If it does not have an IP address, try running the command 'dhclient usb0'.
Once the Beagle does have an IP address, try
beagle$ ping -c 3 -W 10 www.google.com
to test if the setup is working correctly. If it complains about a bad name, the DNS servers are incorrect; try pinging a specific IP such as 8.8.8.8 to see if packets get through (though unless you want to rely on all IP addresses, you will need to get some DNS servers that work).
Option 3 - Manual Routing, Static Beagle IP
This will setup the routing on Ubuntu (sending all eth0 traffic out wlan0). It will then set a static IP address on the BeagleBoard (so you can stick an entry for your BeagleBoard in /etc/hosts for convenience). The key difference from Option 2 is that the DHCP server in that option supplied the BeagleBoard with DNS servers. In this option, we add a script that gives the BeagleBoard some static DNS server addresses every time it boots.
First, follow through the steps in Option 2 right up until it starts talking about installing the DHCP server. Instead of installing the DHCP server, do the following.
On your BeagleBoard, add the following entry to /etc/network/interfaces
(comment out any pre-existing entries regarding 'usb0')
auto usb0 iface usb0 inet static address 192.168.1.14 # This is the static IP address of your choice netmask 255.255.255.0 network 192.168.1.0 gateway 192.168.1.13 # This must match the static IP address you assigned to eth0 on your host machine
After booting, the BeagleBoard is now configured with a static IP address and knows the gateway for all its traffic is the address of your host machine. The last thing to do is to make sure your BeagleBoard knows what DNS servers to use. This information is stored in the /etc/resolv.conf
file. You could add it manually every time after boot, but we'll make a script to do it at boot instead.
On your BeagleBoard, navigate to the /etc/rc5.d/ directory. In this directory, create a file named S99<name>
where <name>
can be anything you prefer. My file was named S99SetRoseHulmanNameServers
. Add the following inside that file:
#! /bin/sh echo "nameserver 137.112.4.196" >> /etc/resolv.conf # These three IP addresses are the Rose-Hulman DNS servers echo "nameserver 137.112.5.28" >> /etc/resolv.conf # Replace them with whatever DNS servers you are using echo "nameserver 137.112.12.11" >> /etc/resolv.conf
That should be it. Assuming all cables are connected properly and you have a WiFi connection on the host machine, after booting the BeagleBoard should have a usable Internet connection.
Using u-boot to specify a MAC address at boot
The BeagleBoard has a problem where Linux will randomly select a MAC address at boot. In order to get around this, one blogger provides a patch to enable a kernel command line parameter to set a MAC address. Below is one way to apply, your mileage may vary.
- Make sure your kernel compiles and boots.
- Grab the patch, and open it with gedit
- Open .../git/drivers/net/usb/smsc95xx.c
- Go to line 64-ish, and look for a place to insert the first code with plus signs preceding each line. Remove the plus signs.
- Go to 656-ish, and repeat for the other block of code.
- Save and re-compile.
- Install the new kernel as normal.
- Edit the kernel command line. There are two ways to do this:
- Edit the uBoot source and recompile
- Go to u-boot, and edit ../include/configs/omap3_beagle.h
- Change mmcargs, nandargs, and ramargs to include a parameter for "ethaddr=...", where ... is your MAC address.
- Save, close, recompile.
- Install the new u-boot as normal.
- Edit the boot.scr file
- Edit the uBoot source and recompile
- Register your MAC Address via any method that works, and enjoy reduced-hassle internet access on your Beagle.
- Optionally, Update opkg.
Rename an External Storage Device
I ran out of space on my Linux (Ubuntu) partition, so I opted to do all my development on an external hard drive. This works just fine, except that the drive is labeled "Expansion Drive" and the space in there causes problems in some of the setup scripts. It is possible to add an entry in /etc/fstab that mounts the device with a certain name, but this is very cumbersome, for many reasons. Instead, I used this [1] very helpful guide to change the label on my external drive.
[1] help.ubuntu.com/community/RenameUSBDrive
Setup a USB Wireless Device on Beagle
(Here are instructions on setting up a Belkin USB dongle.)
The device I used to setup a wireless connection on the Beagle Board was the Linksys Compact Wireless-G USB Network Adapter with SpeedBooster.
I first opened the wpa_supplicant.conf file to setup my networks:
beagle$ cd /etc beagle$ gedit wpa_supplicant.conf &
This file is filled with numerous examples of possible wireless configurations for you to basically fill in. After looking at the examples, I scrolled down to the bottom of the page and set up two networks: one for home and one for school. Here are examples of my setup networks:
#Home Network network={ ssid="YourHomeNetworkName" psk="YourHomeNetworkPassword" } #School Network network={ ssid="RHIT-1X" proto=WPA key_mgmt=WPA-EAP pairwise=CCMP group=TKIP eap=PEAP phase1="peapver=0 peaplabel=0" phase2="auth=MSCHAPV2" scan_ssid=1 identity="YourSchoolUsername" password="YourSchoolPassword" }
For the network examples above,the quotation marks actually belong there but replace the Your.... areas with your corresponding information. No <space> before the first quotation mark.When finished editing save and exit this file. The information for the RHIT school network was found here:RHLUG
Now you must specify that this is the file to use for the wireless device:
beagle$ cd network beagle$ gedit interfaces &
This file will display all of the different types of Internet connections you have setup. To use the wpa_supplicant.conf file, scroll down to around line 42 of the code and uncomment the configuration for wpasupplicant. After doing this make sure all of the above lines mentioning anything about wlan0 are commented out. Return back to where it says "iface wlan0 inet dhcp" that you uncommented around line 42. Add "auto wlan0" above this line, make sure the line "wpa-conf /etc/wpa_supplicant.conf" is uncommented below the iface line, and change the wpa-driver line below that line to wext. So after all of that the code in this file for the wireless device should be the following:
auto wlan0 iface wlan0 inet dhcp wpa-conf /etc/wpa_supplicant.conf wpa-driver wext
NOTE: the auto wlan0 command in this file means that this device will load at boot time. You can take the time in here now to comment out any interfaces you don't use like auto usb0 to make these devices not load at boot time, which will increase the speed at which you boot up. Save and exit this file
Once you have finished this you can either restart the Beagle Board or:
beagle$ cd beagle$ /etc/init.d/networking restart
I've found that a lot of the time the interface doesn't receive an IP address when it boots up. If you run ifconfig in the terminal you should see your wireless device connected to a network. If it is connected but no IP address I do the following:
beagle$ ifdown wlan0 # it will report messages here and then beagle$ ifup wlan0 # more messages and it should report connecting and having an IP address
This ifdown ifup method has worked every time for me so far but if anyone can find a way to prevent having to do this almost every time please feel free to edit this
Development tips for bitbake and oe
Gumstix Development Tips appears to have some good ideas that can apply to the Beagle too.
Point to a given git snapshot
The original SD card image came from here. The file ec2buld.sh shows how the image was build. There are a couple of interesting things in this file.
Line 564 shows an additional git repository was used.
host$ cd sources/openembedded host$ git remote add myrepo git://gitorious.org/~Jadon/angstrom/jadon-openembedded.git host$ git remote update
Run this git command to get access to this repository. (It took about 2 minutes at 6:20am.) Line 21 shows the hash tag for the build.
ANGSTROM_REPO_ID=24805033b1205acc35f8b4d75cc42f8b9c2a1b38
If we pull from this tag we will have the same files as were used to generate the SD image. So do the following
host$ git checkout 24805033b1205acc35f8b4d75cc42f8b9c2a1b38
This takes about 10 seconds.
Fixing Problems
Kernel Boot Problems
Here is a link with some suggestions of what to do if your kernel isn't booting properly.
Serial port garbage
If you are having trouble with garbage on the console, this might help. Sometimes the serial port times out. Most of the time it just generates some junk which can be cleared with CTRL-U or backspace. However, if it happens at the login prompt then getty thinks the terminal is 7-bit with parity (rather than 8-bit raw). If this happens and you continue to login the whole session appears to be scrambled - if you press CTRL-D you can login again provided you don't stop typing... :]
I have simply added the following two lines to root's .profile
:
stty -parenb -parodd cs8 -inpck -istrip echo 0 > /sys/class/tty/ttyS2/device/sleep_timeout
A better fix would probably be to just add the second line to a rc.d startup script somewhere.
This suggestion came from this posting.
Turning off gpe
The following worked last year, but doesn't seem to work now.
Running above will write on top of what Angstrom is doing. You can turn off the display manager by using:
/etc/init.d/gpe-dm stop
Replace stop
with start
if you want to run it again.
Details of making your own MLO
Hardware Environment for a BeagleBoard XM with JTAG
Software Environment for a BeagleBoard XM with JTAG
This might make a good lab.
Getting help from a news group
Here's a nice tip on what to do before posting a question to a news group.
Embedded Linux Class by Mark A. Yoder