[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