In this appendix, we present the procedure for setting up a Linux host development environment to build the example applications from Chapter 12 for embedded Linux residing on the Arcom board. These GNU tools are different from the GNU tools covered in Appendix B.
Depending on the version of the Arcom board you ordered, embedded Linux comes preinstalled in flash memory. When the Arcom board is powered up, RedBoot executes a boot script to execute the Linux kernel residing in flash.
The procedure in this appendix is based on the Arcom board instructions found in the Arcom Embedded Linux Technical Manual, which is included in the development kit CD-ROM. Refer to the section titled “Installing the AEL Host Environment,” where AEL stands for Arcom Embedded Linux.
The install procedure has been verified on a Celeron computer running Linux Fedora Core 5. If you encounter problems installing the host build environment, we suggest you contact Arcom directly. For technical support in Europe, send email to [email protected]. For technical support in the United States, send email to [email protected].
To ensure that applications you develop run properly on the Arcom board, you must compile and link your source code using the libraries present on the target board’s version of Linux.
Building applications for Linux using a Windows (and Cygwin) host is beyond the scope of this book. The Internet is replete with how-to instructions for configuring Cygwin build environments.
The Linux distribution running on the host system must be compatible with the Linux Standard Base (LSB) version 1.3 (see http://www.linuxbase.org for more information). We used Fedora Core 5 (http://fedora.redhat.com) on our host development system.
You will need permission to become superuser (root) to perform the installation procedure successfully.
The following commands are executed from a terminal window with the Arcom board development CD-ROM inserted in the drive.
Mount the CD-ROM where the Arcom board development CD-ROM is located using the following command:
# mount /dev/cdrom /mnt
Run the install script:
# perl /mnt/install
At this point, the installation program outputs a message similar to the following:
Host Distribution Type: Red Hat Linux Host Environment: /mnt/host Packages: /mnt/packages Temporary Storage: /tmp Checking for Linux Standard Base version 1 lsb_release -- /usr/bin/lsb_release lsb_release reports version Q:core-3.0-ia32:core-3.0-noarch:graphics-3.0-ia32:graphics-3.0-noarch' -- LSB version >= 2 detected Use of uninitialized value in pattern match (m//) at /mnt/install line 700. core-3.0-ia32 core-3.0-noarch graphics-3.0-ia32 graphics-3.0-noarch Several LSB components were found, however none of them appear to provide version 1 as required. If possible it is recommended that a host distribution that natively supports LSB version 1 is used, there may be an additional package for LSB version 1 support availble for the host distribution. However if your distribution only supports a different LSB version it may be possible to install using these LSB components however this is not guaranteed. Shall I attempt to install using this version of LSB? [y/N]y Checking for the LSB dynamic linker /lib/ld-lsb.so.1 -- ok Checking for required binaries in $PATH... rpm -- /bin/rpm Checking for required packages... lsb version 1.3 -- 3.0-9.2 ok (did not check version) rpm -- 4.4.2-15.2 ok rpm-build -- 4.4.2-15.2 ok wget -- 1.10.2-3.2.1 ok Checking available disk space /opt/arcom -- 4095 megabytes -- ok /tmp -- 4095 megabytes -- ok /var/tmp -- 4095 megabytes -- ok Installation of the Arcom Embedded Linux Host Environment will now begin. This may take some time to complete. Installing Base Arcom Embedded Linux Host Environment Checking that a simple LSB application can be executed ok Preparing Arcom Embedded Linux Host Environment Installing Arcom Embedded Linux Host Environment
Once the installation is successfully completed, the following message will be output:
Installation complete. You should add Q/opt/arcom/bin'' to your PATH. You can do this for the current login session with the following command: export PATH=/opt/arcom/bin:$PATH or you can modify the path for all login sessions for this user by adding the same statement to Q$HOME/.bash_profile'' or for all users by adding it to Q/etc/profile''.
In order to ensure the path is set correctly each time you open a terminal shell, edit the $HOME/.bash_profile file (where $HOME is specific to your environment) by adding the following line:
PATH=/opt/arcom/bin:$PATH ; export PATH
The directory /opt/arcom should be populated with various files. The executable files, such as arm-linux-gcc, are contained under the /opt/arcom/bin directory.
To test that you installed the tools correctly and set up the path properly, close the existing terminal window. Open a new terminal window (to ensure the path is set properly) and enter the command:
# arm-linux-gcc -v
You should see a response similar to the following:
Reading specs from /opt/arcom/lib/gcc/arm-linux/3.4.4/specs Configured with: ../gcc-3.4.4/configure --with-gxx-include-dir=/opt/arcom/arm-linux/include/c++/3.4.4 --target=arm-linux --host=i386-pc-linux-gnu --enable-cross-toolchain --enable-languages=c,c++ --with-gnu-as --with-gnu-ld --prefix=/opt/arcom --mandir=/opt/arcom/share/man --with-slibdir=/opt/arcom/arm-linux/lib --enable-symvers=gnu --enable-c99 --enable-long-long --program-prefix=arm-linux- --program-suffix=-3.4 --with-headers=/opt/arcom/arm-linux/include --without-newlib --enable-threads --enable-shared --enable-__cxa_atexit --with-arch=armv4t --with-float=hard Thread model: posix gcc version 3.4.4
The Linux examples are contained in the book’s compressed file under the ProgEmbSys/chapter12 directory. If you followed the installation instructions in Appendix B, the files should be located in the proper directory. Otherwise, these files can be extracted into any directory, but we recommend installing the example source code files in the /opt/ProgEmbSys/chapter12 directory.
We do not cover building the Linux kernel that runs on the Arcom board. For additional information about building the Linux kernel, refer to the Arcom Embedded Linux Technical Manual.
To build any of the Chapter 12 Linux examples, proceed as follows.
Open a terminal window and change to the directory of the examples you would like to build. For instance, to build the blink example, enter the command:
# cd /opt/ProgEmbSys/chapter12/blink
Then build the example code using the makefile with the following command:
# make
This should produce two executable files named blink and blinkdbg.
To download the examples and run them on the Arcom board, first boot embedded Linux. Make sure you connect the Arcom board’s COM1 port to your PC’s serial port and are running a console program, such as minicom.
Ensure you have the Arcom board’s Ethernet board connected to the main board. Then connect an Ethernet cable between the Arcom board and your computer (either directly or via a hub). The instructions for connecting the Ethernet board are shown in the Arcom VIPER Technical Manual and the VIPER-I/O Technical Manual.
The following instructions also assume that a Dynamic Host Configuration Protocol (DHCP) server is present on your network. This allows the Arcom board to obtain a dynamic Internet Protocol (IP) address. If you do not have a DHCP server on your network, refer to the Arcom Embedded Linux Technical Manual section on statically configuring a network interface.
Power up the Arcom board and allow RedBoot to run the Linux boot script. You should see output similar to the following once Linux begins its boot process:
RedBoot> clock -l 27 -m 2 -n 10 mem:99.532MHz run:199.065MHz turbo:199.065MHz. cccr 0x141 (L=27 M=1 N=1.0) RedBoot> mount -t jffs2 -f filesystem RedBoot> load -r -b %{FREEMEMLO} %{kernel} Using default protocol (file) Raw file loaded 0x00400000-0x004d4c3f, assumed entry at 0x00400000 RedBoot> exec -c %{cmdline} Using base address 0x00400000 and length 0x000d4c40 Uncompressing Linux............
After Linux has successfully booted, you should see the Arcom board’s login prompt:
viper login:
You can then download and run the Linux examples by following these steps:
At the board’s login prompt, enter root
for the login name and arcom
for the password. The Arcom board
should then output a command prompt:
[email protected] root#
Next, download the program from the host computer to the Arcom board. For instance, to download the blink example, open a terminal window on the host Linux system and enter the following commands:
#cd /opt/ProgEmbSys/chapter12/blink
#scp blink 192.168.0.4:/tmp/blink
You may need to replace the IP address (192.168.0.4) with the IP address appropriate for your Arcom board.
You are then prompted to enter the password for the board as shown here:
[email protected]'s password:
Enter the password arcom
.
The download will take place and the terminal should show output
similar to the following:
blink 100% 3620 3.5KB/s 00:00
To execute the downloaded program, enter the following at the Arcom board’s prompt:
[email protected] root# /tmp/blink
If the program downloaded properly, the green LED should be toggling.
The Linux examples take control over the Arcom board and are intended to run forever. In order to terminate a specific example, press Ctrl-C at the console; the Arcom board should abort the program and return to the VIPER-Lite prompt.
This section gets you started with remote debugging; additional instructions for debugging embedded Linux applications are contained in the Arcom Embedded Linux Technical Manual. The embedded Linux debug procedure takes place over the Ethernet connection rather than via a serial connection.
After you have downloaded a program, as previously shown, you can start a gdb debug session. The following example shows how to debug the blink example.
Start the debug session by launching the gdb server process on the Arcom board using the command:
[email protected] root# gdbserver :9000 /tmp/blink "blink"
The Arcom board will then wait for you to connect your host to the target, indicating that it is waiting by outputting the following message:
Process /tmp/blink created; pid = 706 Listening on port 9000
Begin a gdb session on the host by entering the following in a terminal window:
# arm-linux-gdb blinkdbg
You should then see the familiar gdb prompt (as we covered in Chapter 5), similar to the following:
GNU gdb 6.1.1 Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "--host=i386-redhat-linux-gnu --target=arm-linux"... (gdb)
Connect the host to the target by entering the following command at the host’s gdb prompt:
(gdb) target remote 192.168.0.4:9000
You need to change the IP address (192.168.0.4) to the IP address appropriate for your Arcom board.
Upon successful connection, the Arcom board outputs the following message (the following IP address may be different for your host):
Remote debugging from host 192.168.0.3
You are now ready to start debugging! For additional information about debugging with gdb, refer to Chapter 5.