From: Florian Fainelli Date: Sat, 8 Jul 2006 12:15:22 +0000 (+0000) Subject: Add a documentation repository and upload the RMLL 2006 (http://rmll.info) presentati... X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=bbe32771fb4b1e0a25b8008c7c8d2c1f30bdb50e;p=openwrt%2Fsvn-archive%2Fdocs.git Add a documentation repository and upload the RMLL 2006 (rmll.info) presentation. English translation also available (may need some corrections) SVN-Revision: 4119 --- bbe32771fb4b1e0a25b8008c7c8d2c1f30bdb50e diff --git a/rmll2006/presentation_en.pdf b/rmll2006/presentation_en.pdf new file mode 100644 index 0000000..62722a9 Binary files /dev/null and b/rmll2006/presentation_en.pdf differ diff --git a/rmll2006/presentation_en.tex b/rmll2006/presentation_en.tex new file mode 100644 index 0000000..d4051c0 --- /dev/null +++ b/rmll2006/presentation_en.tex @@ -0,0 +1,559 @@ +\documentclass{beamer} + +\usepackage{beamerthemesplit} +\usepackage[latin1]{inputenc} +\usepackage[french]{babel} +\usepackage{pstricks} % Advanced drawings +\usepackage{fancyhdr} % Headers +\usepackage{epsf} +\usepackage{graphicx} +\usepackage{fancyhdr} + +\title{OpenWrt : fresh air for (wlan) routers} + +\author{Florian Fainelli \\ +florian@openwrt.org} + +\institute{Rencontres Mondiales du Logiciel Libre 2006 \\ +Vandoeuvre-lès-Nancy\\ +Lenght : 30 minutes} + +\date[]{Thursday July 6th 2006} + +\begin{document} + +\frame{\titlepage} +\frame[allowframebreaks] +{ +\frametitle{Summary} +\tableofcontents +} + +\section{Introduction} +\subsection{What is OpenWrt} +\frame +{ +\frametitle{What is OpenWrt} +\begin{itemize} +\item contraction of Opensource Wireless Technology +\item minimalist GNU/Linux distribution GPL licensed +\item set of Makefile providing the building of a full filesystem +\item package and updates repository +\end{itemize} +} + +\subsection{Project history} +\frame +{ +\frametitle{Project history} +\begin{itemize} +\item OpenWrt was created by Gerry Rozeman (aka Groz) and Mike Baker (aka [mbm]) in november 2003. +\item Since the beginning, Gerry and Mike felt the great potential offered by a Linux-based firmware, and at the same time the limitations provided by the Linksys one. That is why they decide to replace the later by a minimalist one, built with the current uClibc buildroot. +\item The philosophy is simple : everything is configured in commmand-line using SSH +\end{itemize} +} + +\subsection{Context} +\frame +{ +\frametitle{Context} +\begin{itemize} +\item At the time the first OpenWrt version is released, Sveasoft firmwares were already available since few months and add various features, configurable through the Linksys web interface. +\item Few months later, DD-WRT firmware comes out, an OpenWrt fork, the main reason for its developpement is the lack of an OpenWrt web interface. +\end{itemize} +} + +\subsection{State of art} +\frame +{ +\frametitle{State of art} +Nowadays, OpenWrt team is composed of 5 main developpers, helped by many contributors : +\begin{itemize} +\item Mike Baker ([mbm]) +\item Imre Kaloz (Kaloz) +\item Nicolas Thill (Nico) +\item Felix Fietkau (nbd) +\item Florian Fainelli (florian) +\end{itemize} +} + +\section{The different versions} +\subsection{Development tools} +\frame +{ +\frametitle{Development tools} +\begin{itemize} +\item subversion repository +\item Trac web interface : https://dev.openwrt.org +\end{itemize} +} + +\frame +{ +\subsection{Subversiion repository organisation} +\frametitle{Subversiion repository organisation} +The subversion repository is divided into several directories : +\begin{itemize} +\item 2 branches : \textbf{whiterussian/} and \textbf{buildroot-ng/} +\item 5 tags : whiterussian\_rc1 to 5 +\item 1 packages directory : \textbf{packages/} +\item kamikaze in trunk (currently being migrated to \textbf{buildroot-ng/} and \textbf{packages/} +\end{itemize} +} + +\subsection{Whiterussian} +\frame +{ +\frametitle{Whiterussian} + +Whiterussian is currently the stable version of the OpenWrt firmware. It runs fine on devices based on Broadcom 947xx and 953xx boards, such as : +\begin{itemize} +\item Linksys WRT54G v1.0 to v4 +\item Asus WL-500g (Deluxe, Premium) +\item Motorola WR850G, WE500G +\item Buffalo WBR-B11, WBR-G54, WLA-G54 +\end{itemize} + +It is being used a firmware basis by several Wireless User Groups, and some companies, such as FON(fonbasic firmware). +} + +\subsection{Whiterussian limitations} +\frame +{ +\frametitle{Whiterussian limitations} +Altough the firmware runs fine, it is currently being limited by : + +\begin{itemize} +\item the usage of a binary Broadcom Wi-Fi driver, thus restricting to a 2.4 kernel +\item the difficulty to maintain and port packages +\item the hardware support limited to Broadcom 47xx/53xx boards +\item a web interface too much relying on the existence of a NVRAM +\end{itemize} +} + +\subsection{Kamikaze} +\frame[allowframebreaks] +{ +\frametitle{Kamikaze} +As a consequence to these difficulties, and the more and more increasing market of Linux-based hardware, the \textbf{Kamikaze} branch was opened. + +New hardware platforms were then supported~: +\begin{itemize} +\item Texas Instruments AR7 (noyau 2.4) +\item Atheros AR531x (noyau 2.4) +\item Aruba (noyau 2.6) +\item x86 (noyaux 2.4 et 2.6) +\item Broadcom SiByte (noyau 2.6) +\item AMD Alchemy (noyau 2.6) +\item Intel Xscale IX42x (noyau 2.6) +\item Router Board RB532 (noyau 2.6) +\end{itemize} +} + +\subsection{Kamikaze limitations} +\frame +{ +\frametitle{Kamikaze limitations} +Kamikaze has a certain number of drawbacks : +\begin{itemize} +\item difficulty in stabilising the kernels, most of the hardware platforms are not fully functionnal (Wi-Fi is not working most of the time) +\item adding and maintaining packages is too close to the whiterussian way +\item maintaining 2 distinct repository using different toolchains +\end{itemize} +} + +\subsection{buildroot-ng} +\frame +{ +\frametitle{buildroot-ng} +\begin{itemize} +\item abstraction et simplication d'écriture des fichiers \textbf{Makefile} et compatibilité avec la syntaxe précédente +\item les paquetages dépendant fortement du noyau vont dans \textbf{buildroot-ng}, les autres dans \textbf{packages/} +\item dépôt multi-architectures indépendamment du du système de base +\end{itemize} +} + +\subsection{Main tasks} +\frame +{ +\frametitle{Main tasks} +\begin{itemize} +\item Finish \textbf{buildroot-ng} +\item Porting AR7-2.4 to AR7-2.6 +\item Porting Broadcom 63xx 2.6 +\item Rewriting \textbf{webif} +\item Rewrite of the user documentation +\end{itemize} +} + +\subsection{Interests of OpenWrt} +\frame +{ +\frametitle{Interests of OpenWrt} +\begin{itemize} +\item fully customizable system from kernel to filesystem +\item strictly identical firware independently from the platform runned on +\item vendor version independent +\item fully GPL code +\end{itemize} +} + +\section{Adding support for a new target} +\subsection{Legal concerns} +\frame +{ +\frametitle{Legal concerns} +Some legal concerns are raised when you know a hardware is running Linux~: +Plusieurs questions légales se posent lorsque vous avez connaissance qu'un matériel donné fonctionne sous Linux~: +\begin{itemize} +\item does the manufacturer provide the firmware source code ? +\item does this hardware use binary drivers ? +\item are we sure it is Linux or uClinux ? +\item is the GPL code compliant with GPL or compatible ? +\end{itemize} +} + +\subsection{Proving that a hardare is running Linux} +\frame +{ +\frametitle{Proving that a hardare is running Linux} +You have different ways of proving that a hardware is running Linux~: +\begin{itemize} +\item downloading a firmware and trying to split it in : bootloader, kernel, filesystem (beware of the Big/Little Endian traps !) +\item pluging a serial console and/or JTAG +\item using a bug in the web interface to get the result of a dmes, cat /proc/xxxx +\end{itemize} +} + +\subsection{What if the manufacturer does not provide sources} +\frame +{ +\frametitle{GPL violation} +In conformance to the GPL, using GPL codes for commercial products implies the following things : +\begin{itemize} +\item publishing kernel sources +\item publishing source code of the GPL applications used in the filesystem +\item publishing sources of the GNU toolchain and the filesystem creation tools +\end{itemize} +In cas of a GPL violation, please inform : \texttt{http://gpl-violations.org} +} + +\subsection{Working basis} +\frame +{ +\frametitle{Working basis} +Your working basis is composed of the following elements : +\begin{itemize} +\item Linux kernel sources, modified to support the hardware, with the latest patches for your architecture (arm, mipsm ppc ...) +\item binary drivers and firmwares for the Wi-Fi card, Ethernet, ADSL ... +\item binary tools to create the firmware : CRC calculation, version, padding ... +\end{itemize} +You are very likely not to be able to get a functionnal firmware with the manufacturer tools. +} +\subsection{Evaluation of the porting effort} +\frame +{ +\frametitle{Evaluation of the porting effort} +According to what we have, to get a working port for the architecture with OpenWrt and being GPL compliant, we have to : +\begin{itemize} +\item analyse and generate differences between a vanilla kernel and the given one +\item create a program adding the corect header in the firmware file (CRC calculation, version, padding ...) +\item keep compatibily with the binary drivers and the current kernel version (beware of the VERSIONING option) +\item eventually reverse engineer the binary drivers +\end{itemize} +} + +\subsection{Adding a new architecture to buildroot-ng} +\frame +{ +\frametitle{Adding a new architecture to buildroot-ng} +Now that we have the requirements for having an OpenWrt system for our arhictecture, let's add it~: +\begin{itemize} +\item add and entry in \textbf{target/Config.in} +\item add a directory \textbf{target/linux/architecture-2.x} (2.4 or 2.6 kernel) containing the arch-specific patches and kernel configuration +\item add a directory \textbf{target/image/architecture} describing how to build the firmware image +\item calling the kernel template in \textbf{include/target.mk} +\end{itemize} +} + +\subsection{Conventions} +\frame +{ +\frametitle{Conventions} +\begin{itemize} +\item Architecture naming must respect the kernel naming in \textbf{arch/} +\item We recommend you get a vanilla kernel booting, rather than changing the filesystem +\item Please separate patches as much as possible : architecture, drivers, various patches ... +\end{itemize} +} + +\subsection{target/Config.in} +\frame[containsverbatim] +{ +\frametitle{target/Config.in} +\begin{verbatim} +config LINUX_2_6_ARCHITECTURE + bool "Architecture foo [2.6]" + select mips + select LINUX_2_6 + select PCI_SUPPORT + select PCMCIA_SUPPORT + help + A short description +\end{verbatim} +} + +\subsection{target/linux/architecture-2.x/Makefile} +\frame[containsverbatim,allowframebreaks] +{ +\frametitle{target/linux/architecture-2.x/Makefile} +\begin{verbatim} +include $(TOPDIR)/rules.mk + +LINUX_VERSION:=2.6.16.7 +LINUX_RELEASE:=1 +LINUX_KERNEL_MD5SUM:=9682b2bd6e02f3087982d7c3f5ba824e + +include ./config +include $(INCLUDE_DIR)/kernel.mk +include $(INCLUDE_DIR)/kernel-build.mk + +$(LINUX_DIR)/.patched: $(LINUX_DIR)/.unpacked + [ -d ../generic-$(KERNEL)/patches ] && +$(PATCH) $(LINUX_DIR) ../generic-$(KERNEL)/patches $(MAKE_TRACE) + [ -d ./patches ] && +$(PATCH) $(LINUX_DIR) ./patches $(MAKE_TRACE) + @$(CP) config $(LINUX_DIR)/.config + touch $@ +\end{verbatim} +} + +\subsection{target/image/architecture/Makefile} +\frame[containsverbatim,allowframebreaks] +{ +\frametitle{target/image/architecture/Makefile} +\begin{verbatim} +include $(TOPDIR)/rules.mk +include $(INCLUDE_DIR)/image.mk + +define Build/Compile + rm -f $(KDIR)/loader.gz + $(MAKE) -C lzma-loader \ + BUILD_DIR="$(KDIR)" \ + TARGET="$(KDIR)" \ + install +endef + +define Build/Clean + $(MAKE) -C lzma-loader clean +endef +define Image/Prepare + cat $(KDIR)/vmlinux | +$(STAGING_DIR)/bin/lzma e -si -so -eos -lc1 -lp2 -pb2 > $(KDIR)/vmlinux.lzma +endef + +define Image/Build/hardware + dd if=$(KDIR)/loader.elf +of=$(BIN_DIR)/openwrt-hardware-$(KERNEL)-$(2).bin +bs=131072 conv=sync + cat $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1).trx +>> $(BIN_DIR)/openwrt-hardware-$(KERNEL)-$(2).bin +endef + +define trxalign/jffs2-128k +-a 0x20000 +endef +define trxalign/jffs2-64k +-a 0x10000 +endef +define trxalign/squashfs +-a 1024 +endef + +$(eval $(call BuildImage)) +\end{verbatim} +} + +\subsection{include/target.mk} +\frame[containsverbatim] +{ +\frametitle{include/target.mk} +\begin{verbatim} +... +$(eval $(call kernel_template,2.6,architecture, + 2_6_ARCHITECTURE)) +... +\end{verbatim} +} + +\subsection{Debuging and stabilising the port} + +\frame +{ +\frametitle{Debuging and stabilizing} +Common debuging tools : +\begin{itemize} +\item GDB +\item EJTAG (si disponible) +\item ksymoops +\item usage of printk +\item debug options enabled in the kernel +\item bootloader documentation (RedBoot, CFE, YAMON, RomE ...) +\item asking for help of users and developpers +\end{itemize} +} + +\subsection{Further problems} +\frame +{ +\frametitle{Further problems} +Once you get a kernel booting on your hardware, it is very likely not to be directly usage, you may encounter the following issues~: +\begin{itemize} +\item drivers working not correctly or not at all +\item unrecognized flash mapping +\item low reaction system (processor caching) +\end{itemize} +} + +\section{Customizing the system} + +\frame +{ +\frametitle{Customizing the system} +You can highly customize your system, such as~: +\begin{itemize} +\item adding a captive portal, RADIUS server +\item doing advanced filtering using iptables +\item adding network stacks and protocols ... +\item adding drivers for various hadware : webcam, additionnal Wi-Fi stick ... +\item adding features to \textbf{webif} +\end{itemize} +} + +\subsection{Adding packages} +\frame +{ +\frametitle{Adding packages} +We invite you to participate to the migrating effort of the packages in \textbf{kamikaze} and make them use the \textbf{buildroot-ng} syntax. + +In opposition to the previous system, where you had to create 3 files : +\begin{itemize} +\item Makefile +\item Config.in +\item ipkg/paquetage.control +\end{itemize} + +\textbf{buildroot-ng} describes and abdstracts everything in a \textbf{Makefile}. +} + +\subsection{Hierarchy} +\frame +{ +\frametitle{Hierarchy} +Packages are structured this way : + +\begin{tabbing} +\hspace{10 pt}\=\hspace{10 pt}\=\hspace{10 pt}\=\kill +packages/ \> \> \> \\ + \> section/ \> \> \\ + \> \> package-name/ \> \\ + \> \> \> Makefile \\ + \> \> \> patches/ +\end{tabbing} +} + +\subsection{packages/section/Makefile} +\frame[containsverbatim,allowframebreaks] +{ +\frametitle{packages/section/Makefile} +\begin{verbatim} +include $(TOPDIR)/rules.mk + +PKG_NAME:=foo +PKG_VERSION:=alpha-beta-4 +PKG_RELEASE:=1 +PKG_MD5SUM:=5988e7aeb0ae4dac8d83561265984cc9 + +PKG_SOURCE_URL:=ftp://ftp.openwrt.org/foo +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_CAT:=zcat + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) +PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install + +include $(INCLUDE_DIR)/package.mk + +define Package/foo +SECTION:=libs +CATEGORY:=Libraries +TITLE:=My sample package +DESCRIPTION:=My other descriptiong +URL:=ftp://ftp.openwrt.org/foo +endef + +define Build/Configure +$(call Build/Configure/Default,--option-foo=bar) +endef + +define Build/Compile + rm -rf $(PKG_INSTALL_DIR) + mkdir -p $(PKG_INSTALL_DIR) + $(MAKE) -C $(PKG_BUILD_DIR) \ + DESTDIR="$(PKG_INSTALL_DIR)" \ + all install +endef + +define Package/foo/install + install -m0755 -d $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libfoo.so.* $(1)/usr/lib/ +endef + +define Build/InstallDev + mkdir -p $(STAGING_DIR)/usr/include + $(CP) $(PKG_INSTALL_DIR)/usr/include/foo-header.h $(STAGING_DIR)/usr/include/ + mkdir -p $(STAGING_DIR)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libfoo.{a,so*} $(STAGING_DIR)/usr/lib/ + touch $(STAGING_DIR)/usr/lib/libfoo.so +endef + +define Build/UninstallDev + rm -rf \ + $(STAGING_DIR)/usr/include/foo-header.h \ + $(STAGING_DIR)/usr/lib/libfoo.{a,so*} +endef + +$(eval $(call BuildPackage,foo)) +\end{verbatim} +} + +\section{Getting support} +\frame +{ +\frametitle{Getting support} +Do not hesisate to contact us via the following ways~: +\begin{itemize} +\item IRC : irc.freenode.net \#openwrt and \#openwrt-devel +\item Mailing-list : openwrt-devel@openwrt.org +\item Forum : http://forum.openwrt.org +\end{itemize} +} + +\section{Becoming a developper} + +\frame +{ +\frametitle{Becoming a developper} +\begin{itemize} +\item Do not hesitate to submit patches adding packages to the repository +\item Do as much test and bugreport as you can +\item Port OpenWrt to a new device ... +\end{itemize} +} + +\frame +{ +\frametitle{Thank you very much} +Thank you very much for your attention, question session is now open. +} + +\end{document} diff --git a/rmll2006/presentation_fr.pdf b/rmll2006/presentation_fr.pdf new file mode 100644 index 0000000..3618ae7 Binary files /dev/null and b/rmll2006/presentation_fr.pdf differ diff --git a/rmll2006/presentation_fr.tex b/rmll2006/presentation_fr.tex new file mode 100644 index 0000000..b64e693 --- /dev/null +++ b/rmll2006/presentation_fr.tex @@ -0,0 +1,560 @@ +\documentclass{beamer} + +\usepackage{beamerthemesplit} +\usepackage[latin1]{inputenc} +\usepackage[french]{babel} +\usepackage{pstricks} % Advanced drawings +\usepackage{fancyhdr} % Headers +\usepackage{epsf} +\usepackage{graphicx} +\usepackage{fancyhdr} + +\title{OpenWrt : fresh air for (wlan) routers} + +\author{Florian Fainelli \\ +florian@openwrt.org} + +\institute{Rencontres Mondiales du Logiciel Libre 2006 \\ +Vandoeuvre-lès-Nancy\\ +Durée : 30 minutes} + +\date[]{Jeudi 6 Juillet 2006} + +\begin{document} + +\frame{\titlepage} +\frame[allowframebreaks] +{ +\frametitle{Sommaire} +\tableofcontents +} + +\section{Introduction} +\subsection{Qu'est-ce qu'OpenWrt} +\frame +{ +\frametitle{Qu'est-ce qu'OpenWrt} +\begin{itemize} +\item contraction d'Opensource Wireless Technology +\item distribution GNU/Linux minimaliste sous licence GPL +\item ensemble de fichiers Makefile permettant de construire un système complet +\item dépôt de paquetages et de mises à jour +\end{itemize} +} + +\subsection{Historique du projet} +\frame +{ +\frametitle{Historique du projet} +\begin{itemize} +\item OpenWrt a été crée à l'initiative de Gerry Rozema (aka groz) et Mike Baker (aka [mbm]) en novembre 2003.\\ +\item Dès le début, Gerry et Mike perçoivent le potentiel d'un firmware basé sur Linux et les limitations dues au firmware Linksys, et décident de le remplacer par un système minimaliste, construit avec un buildroot uClibc de l'époque. +\item La philosophie est simple : tout en ligne de commandes via SSH +\end{itemize} +} + +\subsection{Contexte} +\frame +{ +\frametitle{Contexte} +\begin{itemize} +\item A l'époque où la première version d'OpenWrt voit le jour, les firmwares Sveasoft sont déjà sortis depuis quelques mois et ajoutent de nombreuses fonctionnalités au firmware Linksys original tout en gardant l'interface web identique.\\ +\item Quelques mois plus tard, le firmware DD-WRT sortira, un fork d'OpenWrt, la principale raison étant le manque d'interface web. +\end{itemize} +} + +\subsection{Etat de l'art} +\frame +{ +\frametitle{Etat de l'art} +Aujourd'hui, OpenWrt est constitué de 5 développeurs principaux aidés par de nombreux contributeurs : +\begin{itemize} +\item Mike Baker ([mbm]) +\item Imre Kaloz (Kaloz) +\item Nicolas Thill (Nico) +\item Felix Fietkau (nbd) +\item Florian Fainelli (florian) +\end{itemize} +} + + +\section{Les différentes versions} +\subsection{Outils de développement} +\frame +{ +\frametitle{Outils de développement} +\begin{itemize} +\item dépôt subversion +\item interface web Trac : https://dev.openwrt.org +\end{itemize} +} + +\frame +{ +\subsection{Organisation du dépôt Subversion} +\frametitle{Organisation du dépôt Subversion} +Le dépôt subversion est organisé en différents répertoires: +\begin{itemize} +\item 2 branches : \textbf{whiterussian/} et \textbf{buildroot-ng/} +\item 5 tags : whiterussian\_rc1 à 5 +\item 1 répertoire de paquetages : \textbf{packages/} +\item kamikaze dans trunk (en cours de migration vers \textbf{buildroot-ng/}et \textbf{packages/} +\end{itemize} +} + +\subsection{Whiterussian} +\frame +{ +\frametitle{Whiterussian} + +Whiterussian est actuellement la version dite "stable" du firmware OpenWrt. Elle fonctionne bien sur les matériels à base de cartes Broadcom 947xx et 953xx, soit pour les plus répandus : +\begin{itemize} +\item Linksys WRT54G v1.0 à v4 +\item Asus WL-500g (Deluxe, Premium) +\item Motorola WR850G, WE500G +\item Buffalo WBR-B11, WBR-G54, WLA-G54 +\end{itemize} + +Elle sert de base aux firmwares de nombreuses communautés Wifistes, et à des sociétés comme FON (firmware fonbasic). +} + +\subsection{Limitations de Whiterussian} +\frame +{ +\frametitle{Limitations de whiterussian} +Bien que whiterussian fonctionne bien, le firmware est limité par : + +\begin{itemize} +\item la nécessité d'utiliser un pilote binaire Broadcom pour la carte Wi-Fi, qui restreint à un noyau 2.4 +\item des paquetages difficiles à ajouter et à maintenir +\item le support limité du matériel (uniquement Broadcom 47xx/53xx) +\item une interface web qui repose beaucoup sur la présence d'une NVRAM +\end{itemize} +} + +\subsection{Kamikaze} +\frame[allowframebreaks] +{ +\frametitle{Kamikaze} +Devant ces difficultés et l'apparition croissante de nouveaux matériels fonctionnant sous Linux, la branche \textbf{Kamikaze} est ouverte. + +De nouvelles plateformes sont ainsi supportées ~: +\begin{itemize} +\item Texas Instruments AR7 (noyau 2.4) +\item Atheros AR531x (noyau 2.4) +\item Aruba (noyau 2.6) +\item x86 (noyaux 2.4 et 2.6) +\item Broadcom SiByte (noyau 2.6) +\item AMD Alchemy (noyau 2.6) +\item Intel Xscale IX42x (noyau 2.6) +\item Router Board RB532 (noyau 2.6) +\end{itemize} +} + +\subsection{Limitations de Kamikaze} +\frame +{ +\frametitle{Limitations de Kamikaze} +Kamikaze souffre actuellement des inconvénients suivants : +\begin{itemize} +\item difficulté de stabilisation des noyaux, matériels non intégralement fonctionnels (Wi-Fi inopérant la plupart du temps) +\item ajout et maintient de paquetages encore trop proche de Whiterussian +\item maintient de 2 dépôts de paquetages compilés avec une toolchain différente +\end{itemize} +} + +\subsection{buildroot-ng} +\frame +{ +\frametitle{buildroot-ng} +\begin{itemize} +\item abstraction et simplication d'écriture des fichiers \textbf{Makefile} et compatibilité avec la syntaxe précédente +\item les paquetages dépendant fortement du noyau vont dans \textbf{buildroot-ng}, les autres dans \textbf{packages/} +\item dépôt multi-architectures indépendamment du du système de base +\end{itemize} +} + +\subsection{Principaux chantiers} +\frame +{ +\frametitle{Principaux chantiers} +\begin{itemize} +\item Finalisation de \textbf{buildroot-ng} +\item Portage AR7-2.4 vers AR7-2.6 +\item Portage Broadcom 63xx 2.6 +\item Refonte de \textbf{webif} +\item Ré-écriture de la documentation utilisateur +\end{itemize} +} + +\subsection{Intérêts d'OpenWrt} +\frame +{ +\frametitle{Intérêts d'OpenWrt} +\begin{itemize} +\item système complètement paramètrable du noyau au système de fichiers +\item firmware unifié et identique quelle que soit la plateforme +\item indépendance du système par rapport à des versions figées +\item code intégralement GPL +\end{itemize} +} + +\section{Ajouter le support d'un nouveau matériel} +\subsection{Considérations légales} +\frame +{ +\frametitle{Considérations légales} +Plusieurs questions légales se posent lorsque vous avez connaissance qu'un matériel donné fonctionne sous Linux~: +\begin{itemize} +\item le constructeur livre-t-il le code source du firmware ? +\item ce matériel utilise-t-il des pilotes fournis sous forme de binaires ? +\item est-ce bien Linux ou uClinux ? +\item le code fourni est-il bien sous licence GPL ou compatible ? +\end{itemize} +} + +\subsection{Prouver qu'un matériel fonctionne sous Linux} +\frame +{ +\frametitle{Prouver qu'un matériel fonctionne sous Linux} +Plusieurs moyens s'offrent à vous pour montrer qu'un matériel fonctionne sous Linux : +\begin{itemize} +\item récupérer le firmware binaire et tenter de le séparer en : bootloader, noyau, système de fichiers (attention au Big/Little Endian !) +\item brancher une console série/JTAG sur le routeur +\item utiliser un bug de l'interface web pour récupérer un dmesg, cat /proc/xxxx +\end{itemize} +} + +\subsection{Si le constructeur ne livre pas le code source du firmware} +\frame +{ +\frametitle{Violation de la GPL} +Conformément à la licence GPL, toute utilisation commerciale de logiciels libres oblige les constructeurs de matériel à : +\begin{itemize} +\item fournir les sources du noyau Linux +\item fournir les sources des applications GPL présentent dans le sytème de fichiers +\item fournir les sources de la chaîne de production GNU et des outils de création du système de fichiers +\end{itemize} +En cas de non-respect de la GPL, saisissez sans plus attendre : \texttt{http://gpl-violations.org} +} + +\subsection{Base de travail} +\frame +{ +\frametitle{Base de travail} +Votre base de travail est donc constituée : +\begin{itemize} +\item des sources du noyau Linux, modifiées pour avoir le support de la carte, et avec les derniers correctifs de l'architecture (arm, mips, ppc ...) +\item des pilotes binaires et firmwares pour la carte Wi-Fi, Ethernet, modem ADSL ... +\item des outils binaires de création du firmware : CRC, version, bourrage ... +\end{itemize} +Il y a peu de chances que vous réusissiez à obtenir un firmware fonctionnel avec les outils constructeurs. +} +\subsection{Evaluation du travail à réaliser} +\frame +{ +\frametitle{Evaluation du travail à réaliser} +Compte tenu de ce dont nous disposons, pour obtenir un support fonctionnel du périphérique avec OpenWrt, et du fait que nous devons respecter la GPL, il nous reste à réaliser les tâches suivantes : +\begin{itemize} +\item analyser et générer les différences entre les sources du noyau Linux officiel et celles fournies +\item créer un executable permettant de créer des images firmware valides (calcul CRC, versions, bourrage ...) +\item garder la compatibilité entre les pilotes binaires et les versions actuelles du noyau Linux (attention à l'option VERSIONING) +\item éventuellement, faire de l'ingénierie inverse sur les pilotes binaires +\end{itemize} +} + +\subsection{Ajout d'une nouvelle architecture dans buildroot-ng} +\frame +{ +\frametitle{Ajout d'une nouvelle architecture} +Maintenant que nous avons les éléments nécessaires pour construire un système OpenWrt pour notre architecture cible, ajoutons le : +\begin{itemize} +\item ajout d'une entrée dans \textbf{target/Config.in} +\item ajout d'un répertoire de la forme : \textbf{target/linux/architecture-2.x} (noyau 2.4 ou 2.6) contenant les patches spécifiques +\item ajout d'un répertoire de la forme : \textbf{target/image/architecture} décrivant comment construire le firmware final +\item appel des modèles de Makefile dans \textbf{include/target.mk} +\end{itemize} +} + +\subsection{Conventions} +\frame +{ +\frametitle{Conventions} +\begin{itemize} +\item Les architectures doivent être nommées de la même manière que le noyau Linux sous \textbf{arch/} +\item Nous vous recommandons de faire booter un noyau "vanilla" patché plutôt que de commencer à créer le firmware final ;) +\item Pensez à séparer les patchs : support de la carte, pilotes, correctifs divers ... +\end{itemize} +} + +\subsection{target/Config.in} +\frame[containsverbatim] +{ +\frametitle{target/Config.in} +\begin{verbatim} +config LINUX_2_6_ARCHITECTURE + bool "Architecture toto [2.6]" + select mips + select LINUX_2_6 + select PCI_SUPPORT + select PCMCIA_SUPPORT + help + Une petite description +\end{verbatim} +} + +\subsection{target/linux/architecture-2.x/Makefile} +\frame[containsverbatim,allowframebreaks] +{ +\frametitle{target/linux/architecture-2.x/Makefile} +\begin{verbatim} +include $(TOPDIR)/rules.mk + +LINUX_VERSION:=2.6.16.7 +LINUX_RELEASE:=1 +LINUX_KERNEL_MD5SUM:=9682b2bd6e02f3087982d7c3f5ba824e + +include ./config +include $(INCLUDE_DIR)/kernel.mk +include $(INCLUDE_DIR)/kernel-build.mk + +$(LINUX_DIR)/.patched: $(LINUX_DIR)/.unpacked + [ -d ../generic-$(KERNEL)/patches ] && +$(PATCH) $(LINUX_DIR) ../generic-$(KERNEL)/patches $(MAKE_TRACE) + [ -d ./patches ] && +$(PATCH) $(LINUX_DIR) ./patches $(MAKE_TRACE) + @$(CP) config $(LINUX_DIR)/.config + touch $@ +\end{verbatim} +} + +\subsection{target/image/architecture/Makefile} +\frame[containsverbatim,allowframebreaks] +{ +\frametitle{target/image/architecture/Makefile} +\begin{verbatim} +include $(TOPDIR)/rules.mk +include $(INCLUDE_DIR)/image.mk + +define Build/Compile + rm -f $(KDIR)/loader.gz + $(MAKE) -C lzma-loader \ + BUILD_DIR="$(KDIR)" \ + TARGET="$(KDIR)" \ + install +endef + +define Build/Clean + $(MAKE) -C lzma-loader clean +endef +define Image/Prepare + cat $(KDIR)/vmlinux | +$(STAGING_DIR)/bin/lzma e -si -so -eos -lc1 -lp2 -pb2 > $(KDIR)/vmlinux.lzma +endef + +define Image/Build/périphérique + dd if=$(KDIR)/loader.elf +of=$(BIN_DIR)/openwrt-périphérique-$(KERNEL)-$(2).bin +bs=131072 conv=sync + cat $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1).trx +>> $(BIN_DIR)/openwrt-périphérique-$(KERNEL)-$(2).bin +endef + +define trxalign/jffs2-128k +-a 0x20000 +endef +define trxalign/jffs2-64k +-a 0x10000 +endef +define trxalign/squashfs +-a 1024 +endef + +$(eval $(call BuildImage)) +\end{verbatim} +} + +\subsection{include/target.mk} +\frame[containsverbatim] +{ +\frametitle{include/target.mk} +\begin{verbatim} +... +$(eval $(call kernel_template,2.6,architecture, + 2_6_ARCHITECTURE)) +... +\end{verbatim} +} + +\subsection{Déboguer et stabiliser le portage} + +\frame +{ +\frametitle{Déboguer et stabiliser} +Outils de déboguage : +\begin{itemize} +\item GDB +\item EJTAG (si disponible) +\item ksymoops +\item l'utilisation de printfk +\item un noyau compilé avec les options de déboguage adéquates +\item documentation du bootloader (RedBoot, CFE, YAMON, RomE ...) +\item faire appel aux utilisateurs et développeurs +\end{itemize} +} + +\subsection{Problèmes ultérieurs} +\frame +{ +\frametitle{Problèmes ultérieurs} +Une fois que vous avez réussi à avoir un noyau bootant sur votre matériel, il n'est pas encore utilisable. Il y a fort à parier que : +\begin{itemize} +\item les pilotes ne fonctionnent pas ou pas très bien +\item la cartographie de la flash ne soit pas forcément reconnue +\item le système soit lent, et nécessite des modifications dans le noyau +\end{itemize} +} + +\section{Personnaliser le système} + +\frame +{ +\frametitle{Personnaliser le système} +Vous pouvez intégralement personnaliser votre système sur votre routeur point d'accès Wi-Fi, notamment : +\begin{itemize} +\item ajouter un portail captif, un serveur RADIUS +\item gérer au mieux le pare-feu avec iptables +\item ajouter des protocoles et piles réseau, des services ... +\item ajouter des pilotes de périphériques supplémentaires : webcam, cartes Wi-Fi ... +\item ajouter des des fonctionnalités à l'interface \textbf{webif} +\end{itemize} +} + +\subsection{Ajouter des paquetages} +\frame +{ +\frametitle{Ajouter des paquetages} +Nous vous invitons à participer à l'effort de migration des paquetages présents dans \textbf{kamikaze} vers la syntaxe \textbf{buildroot-ng}. + +Contrairement aux systèmes précédents où il fallait créer au moins 3 fichiers : +\begin{itemize} +\item Makefile +\item Config.in +\item ipkg/paquetage.control +\end{itemize} + +\textbf{buildroot-ng} permet de s'affranchir de ces fichiers en les rassemblant en un seul fichier \textbf{Makefile}. +} + +\subsection{Hiérarchie} +\frame +{ +\frametitle{Hiérarchie} +Les paquetages sont organisés sous forme la forme suivante : + +\begin{tabbing} +\hspace{10 pt}\=\hspace{10 pt}\=\hspace{10 pt}\=\kill +packages/ \> \> \> \\ + \> section/ \> \> \\ + \> \> paquetage/ \> \\ + \> \> \> Makefile \\ + \> \> \> patches/ +\end{tabbing} +} + +\subsection{packages/section/Makefile} +\frame[containsverbatim,allowframebreaks] +{ +\frametitle{packages/section/Makefile} +\begin{verbatim} +include $(TOPDIR)/rules.mk + +PKG_NAME:=mon-paquetage +PKG_VERSION:=alpha-beta-4 +PKG_RELEASE:=1 +PKG_MD5SUM:=5988e7aeb0ae4dac8d83561265984cc9 + +PKG_SOURCE_URL:=ftp://ftp.openwrt.org/mon-paquetage +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_CAT:=zcat + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) +PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install + +include $(INCLUDE_DIR)/package.mk + +define Package/mon-paquetage +SECTION:=libs +CATEGORY:=Libraries +TITLE:=Un programme de demonstation +DESCRIPTION:=Un programme de démonstration également +URL:=ftp://ftp.openwrt.org/mon-paquetage +endef + +define Build/Configure +$(call Build/Configure/Default,--option-supplémentaire=paquetage) +endef + +define Build/Compile + rm -rf $(PKG_INSTALL_DIR) + mkdir -p $(PKG_INSTALL_DIR) + $(MAKE) -C $(PKG_BUILD_DIR) \ + DESTDIR="$(PKG_INSTALL_DIR)" \ + all install +endef + +define Package/mon-paquetage/install + install -m0755 -d $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpaquetage.so.* $(1)/usr/lib/ +endef + +define Build/InstallDev + mkdir -p $(STAGING_DIR)/usr/include + $(CP) $(PKG_INSTALL_DIR)/usr/include/en-tête-paquetage.h $(STAGING_DIR)/usr/include/ + mkdir -p $(STAGING_DIR)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpaquetage.{a,so*} $(STAGING_DIR)/usr/lib/ + touch $(STAGING_DIR)/usr/lib/libpaquetage.so +endef + +define Build/UninstallDev + rm -rf \ + $(STAGING_DIR)/usr/include/en-tête-paquetage.h \ + $(STAGING_DIR)/usr/lib/libpaquetage.{a,so*} +endef + +$(eval $(call BuildPackage,mon-paquetage)) +\end{verbatim} +} + +\section{Obtenir de l'aide} + +\frame +{ +\frametitle{Obtenit de l'aide} +N'hésitez pas à nous contacter à l'aide des moyens suivants~: +\begin{itemize} +\item IRC : irc.freenode.net \#openwrt et \#openwrt-devel +\item Mailing-list : openwrt-devel@openwrt.org +\item Forum : http://forum.openwrt.org +\end{itemize} +} + +\section{Devenir développeur} + +\frame +{ +\frametitle{Devenir développeur} +\begin{itemize} +\item N'hésitez pas à nous soumettre des patchs ajoutant des paquetages +\item Testez et rapportez les bugs que vous rencontrez, tout correctif est le bienvenu +\item Faîtes fonctionner OpenWrt sur une nouvelle architecture, stabilisez un portage existant .. +\end{itemize} +} + +\frame +{ +\frametitle{Merci à tous} +Merci de votre attention, n'hésitez surtout à pas poser vos questions +} + +\end{document}