[FE training-materials-updates] Split and fix the kernel module environment lab

Michael Opdenacker michael.opdenacker at free-electrons.com
Sat Sep 21 11:59:43 CEST 2013


Repository : git://git.free-electrons.com/training-materials.git

On branch  : kernel-ng
Link       : http://git.free-electrons.com/training-materials/commit/?id=3a371302ad9945cbdd04410c29327a3565591d00

>---------------------------------------------------------------

commit 3a371302ad9945cbdd04410c29327a3565591d00
Author: Michael Opdenacker <michael.opdenacker at free-electrons.com>
Date:   Sat Sep 21 11:58:26 2013 +0200

    Split and fix the kernel module environment lab
    
    - Now split in 2 consecutive labs for clarity
    - Fix misc issues
    
    Signed-off-by: Michael Opdenacker <michael.opdenacker at free-electrons.com>


>---------------------------------------------------------------

3a371302ad9945cbdd04410c29327a3565591d00
 Makefile                                           |    5 +-
 labs/kernel-board-setup/kernel-board-setup.tex     |  262 ++++++++++++++++++++
 .../network-config-1.png                           |  Bin 40480 -> 40480 bytes
 .../network-config-2.png                           |  Bin 24584 -> 24584 bytes
 .../network-config-3.png                           |  Bin 50383 -> 50383 bytes
 .../host-vs-target.dia                             |    0
 .../kernel-compiling-and-nfs-booting.tex}          |  211 +++-------------
 ...ard-setup-kernel-compiling-and-booting-labs.tex |   17 ++
 .../kernel-source-code-lab-module.tex              |   10 -
 9 files changed, 311 insertions(+), 194 deletions(-)

diff --git a/Makefile b/Makefile
index d251dbc..8b2097c 100644
--- a/Makefile
+++ b/Makefile
@@ -33,7 +33,7 @@ KERNEL_SLIDES = \
 		sysdev-linux-intro-configuration \
 		sysdev-linux-intro-compilation \
 		sysdev-linux-intro-cross-compilation \
-		kernel-source-code-lab-module \
+		kernel-board-setup-kernel-compiling-and-booting-labs \
 		sysdev-linux-intro-modules \
 		kernel-driver-development-title \
 		kernel-driver-development-modules \
@@ -221,7 +221,8 @@ SYSDEV_LABS   = setup \
 KERNEL_LABS   = setup \
 		kernel-sources-download \
 		kernel-sources-exploring \
-		kernel-module-environment \
+		kernel-board-setup \
+		kernel-compiling-and-nfs-booting \
 		kernel-module-simple \
 		kernel-serial-iomem \
 		kernel-serial-output \
diff --git a/labs/kernel-board-setup/kernel-board-setup.tex b/labs/kernel-board-setup/kernel-board-setup.tex
new file mode 100644
index 0000000..c3ba88f
--- /dev/null
+++ b/labs/kernel-board-setup/kernel-board-setup.tex
@@ -0,0 +1,262 @@
+\subchapter{Board setup}{Objective: setup communication
+with the board and configure the bootloader.}
+
+After this lab, you will be able to:
+\begin{itemize}
+\item Access the board through its serial line
+\item Create a bootable micro-SD card to boot the 
+      board with
+\item Configure the U-boot bootloader and a tftp server
+      on your workstation to download files through tftp
+\end{itemize}
+
+\section{Setting up serial communication with the board}
+
+The Beaglebone serial connector is exported on the 6 pins close to one
+of the 48 pins headers. Using your special USB to Serial adaptor provided
+by your instructor, connect the ground wire (blue) to the pin closest
+to the power supply connector (let's call it pin 1), and the TX (red)
+and RX (green) wires to the pins 4 and 5.
+\footnote{See
+\url{https://www.olimex.com/Products/Components/Cables/USB-Serial-Cable/USB-Serial-Cable-F/}
+for details about the USB to Serial adaptor that we are using.} 
+
+Once the USB to Serial connector is plugged in, a new serial port
+should appear: \code{/dev/ttyUSB0}.  You can also see this device
+appear by looking at the output of \code{dmesg}.
+
+To communicate with the board through the serial port, install a
+serial communication program, such as \code{picocom}:
+
+\begin{verbatim}
+sudo apt-get install picocom
+\end{verbatim}
+
+If you run \code{ls -l /dev/ttyUSB0}, you can also see that only
+\code{root} and users belonging to the \code{dialout} group have
+read and write access to this file. Therefore, you need to add your user
+to the \code{dialout} group:
+
+\begin{verbatim}
+sudo adduser $USER dialout
+\end{verbatim}
+
+You now need to log out and log in again to make the new group
+visible everywhere.
+
+Now, you can run \code{picocom -b 115200 /dev/ttyUSB0}, to start serial
+communication on \code{/dev/ttyUSB0}, with a baudrate of \code{115200}. If
+you wish to exit \code{picocom}, press \code{[Ctrl][a]} followed by
+\code{[Ctrl][x]}.
+
+There should be nothing on the serial line so far, as the board is not
+powered up yet.
+
+Before booting your board, make sure that there is no micro-SD card
+in the corresponding slot.
+
+It is now time to power up your board by pluging in the mini-USB
+cable supplied by your instructor (with your PC or a USB power supply at the
+other end of the cable).
+
+See what messages you get on the serial line.
+
+\section{Disable booting from internal flash}
+
+If the board managed to boot to a Linux prompt, it means that 
+it booted from its internal flash storage ({\em eMCC: Embedded MMC}).
+At least, that's want you get on brand new boards.
+
+As we want do boot from the external micro-SD card only,
+and do not want to have to hold the \code{user} button \footnote{That's
+the button that's alone near the micro-SD slot} every time we're booting
+the board, we are going to disable booting from internal flash, by
+removing the \code{MLO} file in the boot partition:  
+
+If you have a Linux prompt, you shoud be able to login in as \code{root}
+with an empty password. If your board didn't reach a Linux prompt, we
+will fix this later, and you can jump to the next section. 
+
+Type the below commands:
+
+\begin{verbatim}
+mount /dev/mmcblk0p1 /mnt
+mv /mnt/MLO /mnt/MLO.orig
+umount /mnt/
+\end{verbatim}
+
+If you reset the board, you should now only see a sequence of \code{C}
+charaters.
+
+\section{Prepare a bootable micro-SD card}
+
+Using a micro-SD card is a convenient way to control the way
+the board boots, whatever the initial contents of the on-board MMC
+storage.
+
+A micro-SD card also makes it easy to modify its contents by connecting
+it to your workstation.
+
+In order to boot from a micro-SD card, the CPU romcode needs the card
+to be partitioned and formated in a particular way.
+
+Connect the micro-SD card provided by your instructor to your
+workstation:
+
+\begin{itemize}
+\item Either using a direct SD slot if available.
+      In this case, the card should be seen as \code{/dev/mmcblk0} by
+      your computer (check the \code{dmesg} command).
+\item Either using a card reader provided by your instructor too.
+      In this case, the card should be seen as \code{/dev/sdb}, or
+      \code{/dev/sdc}, etc.
+\end{itemize}
+
+Now, run the \code{mount} command to check for mounted SD card
+partitions. Umount them with command such as \code{sudo umount
+/dev/mmcblk0p1} or \code{sudo umount /dev/sdb1}, depending on how
+the system sees the media card device.
+
+Now type the below command to partition the micro-SD card
+(we assume that the card is seen as \code{/dev/mmcblk0}):
+
+\begin{verbatim}
+sudo sfdisk --in-order --Linux --unit M /dev/mmcblk0 << EOF
+1,48,0xE,*
+,,,-
+EOF
+\end{verbatim}
+
+Now, let's format the first partition in FAT format:
+
+\begin{verbatim}
+sudo mkfs.vfat -F 16 /dev/mmcblk0p1 -n boot
+\end{verbatim}
+
+Remove the card and insert it again. It should automatically be mounted
+on \code{/media/boot} \footnote{Or on \code{/media/<user>/boot} if you
+are using Ubuntu 12.10 or later.}.
+
+Now, copy the first stage bootloader (\code{MLO}: {\em Mmc LOad}) and the main
+bootloader (\code{u-boot.cmd}) to your micro-SD card:
+
+\begin{verbatim}
+cd $HOME/felabs/linux/bootloader
+cp beaglebone-black/MLO /media/boot/
+cp beaglebone-black/u-boot.img /media/boot
+sudo umount /media/boot
+\end{verbatim}
+
+\section{Boot the board}
+
+Reset the board (using the tiny reset button close to the Ethernet
+connector). You should then see U-boot 2013.10-rc3 start.
+
+Press a key in the \code{picocom} terminal to stop the U-boot
+countdown. You should then see the U-Boot prompt:
+\begin{verbatim}
+U-Boot>
+\end{verbatim}
+
+If this didn't work, it's probably because there is still a valid
+\code{MLO} on the internal MMC. To force the board to boot on the
+external card, you will then have to remove the power supply, press and
+hold the \code{user} button, insert the power supply, and then
+release the \code{user} button.
+
+You can now use U-Boot. Run the \code{help} command to see the available
+commands.
+
+\section{Setting up Ethernet communication}
+
+The next step is to configure U-boot and your workstation to let your
+board download files, such as the kernel image and Device Tree Binary
+(DTB), using the TFTP protocol through an Ethernet cable.
+
+To start with, install a TFTP server on your development workstation:
+
+\begin{verbatim}
+sudo apt-get install tftpd-hpa
+\end{verbatim}
+
+With a network cable, connect the Ethernet port of your board to the
+one of your computer. If your computer already has a wired connection
+to the network, your instructor will provide you with a USB Ethernet
+adapter. A new network interface, probably \code{eth1} or \code{eth2},
+should appear on your Linux system.
+
+To configure your network interface on the workstation side, click on
+the \code{Network Manager} tasklet on your desktop, and select
+\code{Edit Connections}.
+
+\begin{center}
+\includegraphics[width=8cm]{labs/kernel-board-setup/network-config-1.png}
+\end{center}
+
+Select the new wired network connection:
+
+\begin{center}
+\includegraphics[width=8cm]{labs/kernel-board-setup/network-config-2.png}
+\end{center}
+
+In the \code{IPv4 Settings} tab, make the interface use a static IP
+address, like \code{192.168.0.1} (of course, make sure that this address
+belongs to a separate network segment from the one of the main company
+network). You will also need to specify the local network mask
+(\emph{netmask}, often \code{255.255.255.0}). You can keep the
+\code{Gateway} field empty (don't click put the cursor inside the
+corresponding text box, otherwise it will ask for a legal value)
+or set it to \code{0.0.0.0}:
+
+\begin{center}
+\includegraphics[width=8cm]{labs/kernel-board-setup/network-config-3.png}
+\end{center}
+
+Now, it's time to configure networking on U-Boot's side.
+
+Remove the micro-SD card and connect it to your workstation. Create a
+new \code{uEnv.txt} file in the boot partition (mounted on
+\code{/media/boot}), with the below contents:
+
+\begin{verbatim}
+ipaddr=192.168.0.100
+serverip=192.168.0.1
+\end{verbatim}
+
+Umount your micro-SD card, put in back in the board, and reset your
+BeagleBone Black.
+
+Make sure that your environment settings were loaded properly, by
+checking the value of your environment variables:
+
+\begin{verbatim}
+U-Boot# printenv ipaddr
+ipaddr=192.168.0.100
+\end{verbatim}
+
+You can then test the TFTP connection.  First, put a small text
+file in \code{/var/lib/tftpboot}. Then, from U-Boot, do:
+
+\begin{verbatim}
+tftp 0x81000000 textfile.txt
+\end{verbatim}
+
+{\bf Caution: known issue in Ubuntu 12.04 and later}: if this command
+doesn't work, you may have you have to stop the server and start it
+again every time you boot your workstation:
+
+\begin{verbatim}
+/etc/init.d/tftpd-hpa restart
+\end{verbatim}
+
+The \code{tftp} command should command should have downloaded the
+\code{textfile.txt} file from your development workstation into the
+board's memory at location \code{0x81000000} (this location is part of
+the board DRAM). You can verify that the download was successful by
+dumping the contents of the memory:
+
+\begin{verbatim}
+md 0x81000000
+\end{verbatim}
+
+We are now ready to load and boot a Linux kernel!
diff --git a/labs/kernel-module-environment/network-config-1.png b/labs/kernel-board-setup/network-config-1.png
similarity index 100%
rename from labs/kernel-module-environment/network-config-1.png
rename to labs/kernel-board-setup/network-config-1.png
diff --git a/labs/kernel-module-environment/network-config-2.png b/labs/kernel-board-setup/network-config-2.png
similarity index 100%
rename from labs/kernel-module-environment/network-config-2.png
rename to labs/kernel-board-setup/network-config-2.png
diff --git a/labs/kernel-module-environment/network-config-3.png b/labs/kernel-board-setup/network-config-3.png
similarity index 100%
rename from labs/kernel-module-environment/network-config-3.png
rename to labs/kernel-board-setup/network-config-3.png
diff --git a/labs/kernel-module-environment/host-vs-target.dia b/labs/kernel-compiling-and-nfs-booting/host-vs-target.dia
similarity index 100%
rename from labs/kernel-module-environment/host-vs-target.dia
rename to labs/kernel-compiling-and-nfs-booting/host-vs-target.dia
diff --git a/labs/kernel-module-environment/kernel-module-environment.tex b/labs/kernel-compiling-and-nfs-booting/kernel-compiling-and-nfs-booting.tex
similarity index 50%
rename from labs/kernel-module-environment/kernel-module-environment.tex
rename to labs/kernel-compiling-and-nfs-booting/kernel-compiling-and-nfs-booting.tex
index 8f000e3..03c186a 100644
--- a/labs/kernel-module-environment/kernel-module-environment.tex
+++ b/labs/kernel-compiling-and-nfs-booting/kernel-compiling-and-nfs-booting.tex
@@ -38,7 +38,7 @@ accessed through the network by the target, using NFS.
 
 \section{Setup}
 
-Stay in the \code{$HOME/felabs/linux/src/linux} directory.
+Go to the \code{$HOME/felabs/linux/src/linux} directory.
 
 Install packages needed for configuring, compiling and booting
 a kernel for your board:
@@ -53,10 +53,10 @@ U-boot (\code{mkimage} utility).
 
 \section{Apply a kernel patch for BeagleBone Black}
 
-At the time of this writing, the mainline Linux 3.11 kernel needs a 
+At the time of this writing, the mainline Linux 3.11 kernel is missing a 
 specific Device Tree Source (DTS) file for the BeagleBone Black.
-Without it, running the mainline kernel will blow up the HDMI
-transceiver after a dozen boots \footnote{See
+Without it, you could use the DTS for the original Beagle Bone, but it
+would blow up the HDMI transceiver after a dozen boots \footnote{See
 \url{http://article.gmane.org/gmane.linux.kernel.stable/63648} for
 details.}. 
 
@@ -136,6 +136,15 @@ need to specify it during the generation of \code{uImage} using the
 make LOADADDR=0x80008000 uImage
 \end{verbatim}
 
+Now also generate the Device Tree Binaries (DTBs):
+
+\begin{verbatim}
+make dtbs
+\end{verbatim}
+
+Now, copy the \code{uImage} and \code{am335x-boneblack.dtb} files
+to the TFTP server home directory (\code{/var/lib/tftpboot}).
+
 \section{Setting up the NFS server}
 
 Install the NFS server by installing the \code{nfs-kernel-server}
@@ -161,180 +170,14 @@ If there is any error message, this usually means that there was a
 syntax error in the \code{/etc/exports} file. Don't proceed until these
 errors disappear.
 
-\section{Setting up serial communication with the board}
-
-The Beaglebone serial connector is exported on the 6 pins close to one
-of the 48 pins headers. Using your special USB to Serial adaptor provided
-by your instructor, connect the ground wire (blue) to the pin closest
-to the power supply connector (let's call it pin 1), and the TX (red)
-and RX (green) wires to the pins 4 and 5.
-\footnote{See
-\url{https://www.olimex.com/Products/Components/Cables/USB-Serial-Cable/USB-Serial-Cable-F/}
-for details about the USB to Serial adaptor that we are using.} 
-
-Once the USB to Serial connector plugged in, a new serial ports
-should appear: \code{/dev/ttyUSB0}.  You can also see this device
-appear by looking at the output of \code{dmesg}.
-
-To communicate with the board through the serial port, install a
-serial communication program, such as \code{picocom}:
-
-\begin{verbatim}
-sudo apt-get install picocom
-\end{verbatim}
-
-If you run \code{ls -l /dev/ttyUSB0}, you can also see that only
-\code{root} and users belonging to the \code{dialout} group have
-read and write access to this file. Therefore, you need to add your user
-to the \code{dialout} group:
-
-\begin{verbatim}
-sudo adduser $USER dialout
-\end{verbatim}
-
-You now need to log out and log in again to make the new group
-visible everywhere.
-
-Now, you can run \code{picocom -b 115200 /dev/ttyUSB0}, to start serial
-communication on \code{/dev/ttyUSB0}, with a baudrate of \code{115200}. If
-you wish to exit \code{picocom}, press \code{[Ctrl][a]} followed by
-\code{[Ctrl][x]}.
-
-There should be nothing on the serial line so far, as the board is not
-powered up yet.
-
-It is now time to power up your board by pluging in the mini-USB
-cable supplied by your instructor (with your PC or a USB power supply at the
-other end of the cable).
-
-You should then see early boot messages on the serial line. Press a key
-in the \code{picocom} terminal to stop the U-boot countdown. You should
-then see the U-Boot prompt:
-\begin{verbatim}
-U-Boot>
-\end{verbatim}
-
-You may need to reset the board if you didn't have time to interrupt the
-timeout (using the tiny reset button close to the USB host connectors).
-
-You can now use U-Boot. Run the \code{help} command to see the available
-commands.
-
-\section{Setting up Ethernet communication}
-
-The kernel image will be transferred to the board using the TFTP
-protocol, which works on top of an Ethernet connection.
-
-To start with, install a TFTP server on your development workstation:
-
-\begin{verbatim}
-sudo apt-get install tftpd-hpa
-\end{verbatim}
-
-Copy your \code{uImage} file to the \code{/var/lib/tftpboot} directory.
-
-With a network cable, connect the Ethernet port of your board to the
-one of your computer. If your computer already has a wired connection
-to the network, your instructor will provide you with a USB Ethernet
-adapter. A new network interface, probably \code{eth1} or \code{eth2},
-should appear on your Linux system.
-
-To configure your network interface on the workstation side, click on
-the \code{Network Manager} tasklet on your desktop, and select
-\code{Edit Connections}.
-
-\begin{center}
-\includegraphics[width=8cm]{labs/kernel-module-environment/network-config-1.png}
-\end{center}
-
-Select the new wired network connection:
-
-\begin{center}
-\includegraphics[width=8cm]{labs/kernel-module-environment/network-config-2.png}
-\end{center}
-
-In the \code{IPv4 Settings} tab, make the interface use a static IP
-address, like \code{192.168.0.1} (of course, make sure that this address
-belongs to a separate network segment from the one of the main company
-network). You will also need to specify the local network mask
-(\emph{netmask}, often \code{255.255.255.0}). You can keep the
-\code{Gateway} field empty (don't click put the cursor inside the
-corresponding text box, otherwise it will ask for a legal value)
-or set it to \code{0.0.0.0}:
-
-\begin{center}
-\includegraphics[width=8cm]{labs/kernel-module-environment/network-config-3.png}
-\end{center}
-
-Now, configure the network on the board in U-Boot by setting the
-\code{ipaddr} and \code{serverip} environment variables:
-
-\begin{verbatim}
-setenv ipaddr 192.168.0.100
-setenv serverip 192.168.0.1
-\end{verbatim}
-
-In case the board was previously configured in a different way, we
-also turn off automatic booting after commands that can be used to
-copy a kernel to RAM:
-
-\begin{verbatim}
-setenv autostart no
-\end{verbatim}
-
-Also check that the \code{ethaddr} environment variable is
-defined. That's the MAC address that U-boot sees. If it isn't defined,
-set it:
-
-\begin{verbatim}
-set ethaddr 00:00:00:11:22:33
-\end{verbatim}
-
-To make these settings permanent, save the environment:
-
-\begin{verbatim}
-saveenv
-\end{verbatim}
-
-If you changed \code{ethaddr}, also power off your board, and power it
-on again (pressing the \code{reset} button is not enough).
-
-You can then test the TFTP connection \footnote{Note for Ubuntu 12.04
-  users: the \code{tftp-hpa} server may not work the first time you
-  use it after booting your workstation. You may need to restart it
-  after plugging in your board:
-  \code{sudo /etc/init.d/tftpd-hpa restart}}.  First, put a small text
-file in the directory exported through TFTP on your development
-workstation. Then, from U-Boot, do:
-
-\begin{verbatim}
-tftp 0x81000000 textfile.txt
-\end{verbatim}
-
-{\bf Caution: known issue in Ubuntu 12.04 and later}: if this command
-doesn't work, you may have you have to stop the server and start it
-again every time you boot your workstation:
-
-\begin{verbatim}
-/etc/init.d/tftpd-hpa restart
-\end{verbatim}
-
-The \code{tftp} command should command should have downloaded the
-\code{textfile.txt} file from your development workstation into the
-board's memory at location \code{0x81000000} (this location is part of
-the board DRAM). You can verify that the download was successful by
-dumping the contents of the memory:
-
-\begin{verbatim}
-md 0x81000000
-\end{verbatim}
-
 \section{Boot the system}
 
 First, boot the board to the U-Boot prompt. Before booting the kernel,
-we need to tell it that the root filesystem should be mounted over
-NFS, by setting some kernel parameters. Use the following U-Boot
-command to do so (in just 1 line):
+we need to tell it which console to use and that the root filesystem
+should be mounted over NFS, by setting some kernel parameters.
+
+Do this by setting U-boot's \code{bootargs} environment variable:
+Modify the \code{uEnv.txt} file by adding the below line (in just 1 line):
 
 \begin{verbatim}
 setenv bootargs root=/dev/nfs ip=192.168.0.100 console=ttyO0
@@ -342,8 +185,7 @@ setenv bootargs root=/dev/nfs ip=192.168.0.100 console=ttyO0
 \end{verbatim}
 
 Of course, you need to adapt the IP addresses to your exact network
-setup. Save the environment variables (with \code{saveenv}). Now,
-download the kernel image through \code{tftp}:
+setup. Now, download the kernel image through \code{tftp}:
 
 \begin{verbatim}
 tftp 0x81000000 uImage
@@ -352,7 +194,7 @@ tftp 0x81000000 uImage
 You'll also need to download the device tree blob:
 
 \begin{verbatim}
-tftp 0x82000000 am335x-bone.dtb
+tftp 0x82000000 am335x-boneblack.dtb
 \end{verbatim}
 
 Now, boot your kernel:
@@ -374,13 +216,17 @@ To avoid typing the same U-boot commands over and over again each time
 you power on or reset your board, here's a way to automatically call the
 above commands at boot time:
 
+Modify your \code{uEnv.txt} file and add the below lines:
+{\scriptsize
 \begin{verbatim}
-setenv bootcmd 'tftp 0x81000000 uImage; tftp 0x82000000 am335x-bone.dtb; bootm 0x81000000 - 0x82000000'
-saveenv
+bootargs=root=/dev/nfs ip=192.168.0.100 console=ttyO0 nfsroot=192.168.0.1:/home/<user>/felabs/linux/modules/nfsroot
+uenvcmd=tftp 0x81000000 uImage; tftp 0x82000000 am335x-boneblack.dtb; bootm 0x81000000 - 0x82000000
 \end{verbatim}
+}
 
-\code{bootcmd} will automatically be run after the U-boot timeout
-expires. Don't hesitate to change it according to your exact needs.
+\code{uenvcmd} will automatically be run after the U-boot timeout
+expires and the \code{uEnv.txt} settings are loaded.
+Don't hesitate to change it according to your exact needs.
 
 We could also copy the \code{uImage} file to the eMMC flash and avoid
 downloading it over and over again. However, handling flash is outside
@@ -388,3 +234,4 @@ of the scope of this course. See our
 \href{http://free-electrons.com/training/embedded-linux/}{Embedded
 Linux system development course} and its on-line materials for
 details.
+
diff --git a/slides/kernel-board-setup-kernel-compiling-and-booting-labs/kernel-board-setup-kernel-compiling-and-booting-labs.tex b/slides/kernel-board-setup-kernel-compiling-and-booting-labs/kernel-board-setup-kernel-compiling-and-booting-labs.tex
new file mode 100644
index 0000000..af0c7a7
--- /dev/null
+++ b/slides/kernel-board-setup-kernel-compiling-and-booting-labs/kernel-board-setup-kernel-compiling-and-booting-labs.tex
@@ -0,0 +1,17 @@
+\setuplabframe
+{Kernel compiling and booting}
+{
+1st lab: board and bootloader setup:
+  \begin{itemize}
+  \item Prepare the board and access its serial port
+  \item Make it boot on a micro-SD card
+  \item Configure its bootloader to use TFTP
+  \end{itemize}
+2nd lab: kernel compiling and booting:
+  \begin{itemize}
+  \item Set up a cross-compiling environment
+  \item Cross-compile a kernel for an ARM target platform
+  \item Boot this kernel from a directory on your workstation,
+    accessed by the board through NFS
+  \end{itemize}
+}
diff --git a/slides/kernel-source-code-lab-module/kernel-source-code-lab-module.tex b/slides/kernel-source-code-lab-module/kernel-source-code-lab-module.tex
deleted file mode 100644
index c390227..0000000
--- a/slides/kernel-source-code-lab-module/kernel-source-code-lab-module.tex
+++ /dev/null
@@ -1,10 +0,0 @@
-\setuplabframe
-{Module Development Environment}
-{
-  \begin{itemize}
-  \item Set up a cross-compiling environment
-  \item Cross-compile a kernel for an ARM target platform
-  \item Boot this kernel from a directory on your workstation,
-    accessed by the board through NFS
-  \end{itemize}
-}
\ No newline at end of file



More information about the training-materials-updates mailing list