Personal tools

Log in

Changes

From IGEP - ISEE Wiki

Jump to: navigation, search

The IGEP X-loader

35 bytes added, 23:16, 25 February 2011
no edit summary
#<br># (C) Copyright 2009-2011 ISEE<br># Manel Caro (mcaro@iseebcn.com)<br>#<br># Change log:<br># Version: IGEP-X-Loader 2.0.1-2<br># <br># See file CREDITS for list of people who contributed to this<br># project.<br>#<br># This program is free software; you can redistribute it and/or<br># modify it under the terms of the GNU General Public License as<br># published by the Free Software Foundation; either version 2 of<br># the License, or (at your option) any later version.<br>#<br># This program is distributed in the hope that it will be useful,<br># but WITHOUT ANY WARRANTY; without even the implied warranty of<br># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br># GNU General Public License for more details.<br>#<br># You should have received a copy of the GNU General Public License<br># along with this program; if not, write to the Free Software<br># Foundation, Inc., 59 Temple Place, Suite 330, Boston,<br># MA 02111-1307 USA<br>#
Index<br>=====
1 Summary.<br>2 Features and Issues.<br>2.1 Improvements &amp; Modifications.<br>2.2 Issues<br>2.3 TODO<br>4 Settings &amp; Configuration<br>4.1 MMC Boot<br>4.2 Setup igep.ini file<br>4.3 Boot Priority<br>4.4 OneNand Partition settings<br>4.4.1 Xloader partition<br>4.4.2 Boot Partition<br>4.4.3 Rootfs<br>5 Build procedure<br>5.1 Build with Ubuntu Cross Compiler gcc 4.5.1<br>5.2 Build with IGEP SDK<br>5.3 Build Native<br>6 Contribution &amp; Support &amp; Report Bugs
1 Summary:Index<br>===========<br>This directory contains the source code for X-Loader, an initial program<br>loader for Embedded boards based on OMAP processors.
1 Summary.<br>2 Features and Issues:.<br>2.1 Improvements &amp; Modifications.<br>2.2 Issues<br>2.3 TODO<br>4 Settings &amp; Configuration<br>4.1 MMC Boot<br>4.2 Setup igep.ini file<br>4.3 Boot Priority<br>4.4 OneNand Partition settings<br>4.4.1 Xloader partition<br>4.4.2 Boot Partition<br>4.4.3 Rootfs<br>5 Build procedure<br>5.1 Build with Ubuntu Cross Compiler gcc 4.5.1<br>5.2 Build with IGEP SDK<br>5.3 Build Native<br>=======================6 Contribution &amp; Support &amp; Report Bugs
2.1 Improvements &amp; ModificationsSummary:<br>===========<br>This directory contains the source code for X---------------------------------Loader, an initial program<br>loader for Embedded boards based on OMAP processors.
* Added malloc/free functionality.<br>* Added mtd framework and onenand support, removed the old onenand drivers.<br>* Added fs jffs2 support using mtd &amp; onenand support (Read Only).<br>* Added crc32 and zlib. <br>* Jffs2 zlib compression support (Read Only).<br>* Dual boot mmc &amp; onenand with mmc highest priority.<br>* Added Linux kernel boot directly (Support for 2.6.22 Features and highest version kernels)<br>* Linux kernel supported imagesIssues: vmlinuz, bzImage and zImage.<br>* Support for loading Linux Ram disk (EXPERIMENTAL)<br>* Added "ini" files parser.<br>* The configuration resides in a plain txt (ini format file).<br>* Support Windows &amp; Linux formating ini files.<br>* boot from mmc, onenand, or mix with mmc highest priority.<br>* Added codeblocks project and compilation rules.<br>* Added support for gcc 4.5.1=======================
2.2 Issues1 Improvements &amp; Modifications<br>---------------------------------
* The ini file it's limited to max size: 16 KiBAdded malloc/free functionality.<br>* Added mtd framework and onenand support, removed the old onenand drivers.<br>* Added fs jffs2 support using mtd &amp; onenand support (Read Only).<br>* Added crc32 and zlib. <br>* Jffs2 zlib compression support (Read Only).<br> This is not a real limitation due all ini file it's * Dual boot mmc &amp; onenand with mmc highest priority.<br> copied into the RAM memory* Added Linux kernel boot directly (Support for 2.6.22 and highest version kernels)<br>* Kernel Command line parameters it's limited toLinux kernel supported images: 4 KiBvmlinuz, bzImage and zImage.<br>* Support for loading Linux Ram disk (EXPERIMENTAL)<br>* Added "ini" files parser.<br> This is not * The configuration resides in a real limitation due all plain txt (ini format file it's ).<br>* Support Windows &amp; Linux formating ini files.<br> copied into the RAM memory* boot from mmc, onenand, or mix with mmc highest priority.<br>* Malloc it's limited to 32 MiBAdded codeblocks project and compilation rules.<br>* Cannot write comments in lines with tag=value Added support for gcc 4.5.1
2.3 TODO2 Issues<br>-----------
* Add support for IGEP0030 - Family boardsThe ini file it's limited to max size: 16 KiB<br> This is not a real limitation due all ini file it's <br> copied into the RAM memory.<br>* Add support for other OMAP/DM/AM processor boardsKernel Command line parameters it's limited to: 4 KiB<br> This is not a real limitation due all ini file it's <br> copied into the RAM memory.<br>* Remove compilation warningsMalloc it's limited to 32 MiB.<br>* Add Cannot write comments in the lines with tag=value inline comments
2.3 Status:TODO<br>==========--------
* Support IGEP0020 Revision B &amp; C family Add support for IGEP0030 - Family boards.<br> - Tested with IGEPv2 (DM3730@1Ghz and 512* Add support for other OMAP/512 MB RamDM/Onenand)AM processor boards.<br> - Tested with IGEPv2 (AM3703@1Ghz and 512/512 MB Ram/Onenand)* Remove compilation warnings.<br> - Tested with IGEPv2 (OMAP3530@720Mhz and 512/512 MB Ram/Onenand)* Add in the tag=value inline comments
4 Settings &amp; Configuration3 Status:<br>============================
4*Support IGEP0020 Revision B &amp; C family boards.1 MMC Boot<br>------------Tested with IGEPv2 (DM3730@1Ghz and 512/512 MB Ram/Onenand)<br>Get a new mmc - Tested with IGEPv2 (AM3703@1Ghz and create two partitions, the first one must be fat (you can follow <br>this howto: http://code.google.com/p/beagleboard512/wiki512 MB Ram/LinuxBootDiskFormatOnenand)<br>In this first partition - Tested with IGEPv2 (boot partitionOMAP3530@720Mhz and 512/512 MB Ram/Onenand) you should copy:
* x-loader.bin.ift (you must rename this file to MLO) / This is a signed image using contrib/signGP tool4 Settings &amp; Configuration:<br>* igep.ini<br>* Your desired kernel image.============================
Don't use 4.1 MMC Boot<br>------------<br>Get a uImage kernel format (from uboot)new mmc and create two partitions, only kernel formats the first one must be supportedfat (you can follow <br>this howto: http://code.google.com/p/beagleboard/wiki/LinuxBootDiskFormat)<br>In this first partition (boot partition) you should copy:
Compilation Example:*x-loader.bin.ift (you must rename this file to MLO) / This is a signed image using contrib/signGP tool<br>* igep.ini<br>$make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- zImage modules* Your desired kernel image.
Read the Don't use a uImage kernel documentation about format (from uboot), only kernel imagesformats be supported.
4.2 Setup igep.ini fileCompilation Example:<br>$make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi---------------------<br># Note this format permits use the characters<br># '#' and ';' as comment check file size restrictionszImage modules
[Read the kernel]<br>kaddress=0x80008000<br>;rdaddress=0x84000000<br>serial.low=00000001<br>serialdocumentation about kernel images.high=00000000<br>revision=0001<br>;kImageName=<br>;kRdImageName=
[kparams]<br>console=ttyS2,115200n8<br>;earlyprintk=serial,ttyS2,115200<br>mem=512M<br>boot_delay=0<br>;mpurate=800<br>;loglevel=7<br>omapfb4.mode=dvi:1024x768MR-16@60<br>smsc911x2 Setup igep.mac=0xb2,0xb0,0x14,0xb5,0xcd,0xdeini file<br>;ubi.mtd=2------------------------<br>;root=ubi0:igep0020-rootfs # Note this format permits use the characters<br># '#' and ';rootfstype=ubifs<br>root=/dev/mmcblk0p2 rw rootwait' as comment check file size restrictions
-----------------------------------[kernel]<br>kaddress=0x80008000<br>;rdaddress=0x84000000<br>serial.low=00000001<br>serial.high=00000000<br>revision=0001<br>;kImageName=<br>;kRdImageName=
Tags Supported[kparams]<br>console=ttyS2,115200n8<br>;earlyprintk=serial,ttyS2,115200<br>mem=512M<br>boot_delay=0<br>;mpurate=800<br>;loglevel=7<br>omapfb.mode=dvi:1024x768MR-16@60<br>smsc911x.mac=0xb2,0xb0,0x14,0xb5,0xcd,0xde<br>;ubi.mtd=2<br>;root=ubi0:igep0020--------------rootfs <br>;rootfstype=ubifs<br>root=/dev/mmcblk0p2 rw rootwait
---- [kernel] ----<br>* kaddress=0x80008000
Kernel copy address, you should use the same address used in kernel imageTags Supported<br>configuration. If you don't know what it means maybe it's better don't change it.---------------
* rdaddress=0x84000000<br>Kernel RAM disk copy address. <br>If you don't know what it means maybe it's better don't change it.----
* serial.low=00000001[kernel] ----<br>* serial.highkaddress=00000000<br>Board serial Number, you can read this information using /proc/cpuinfo0x80008000
* revision=0001Kernel copy address, you should use the same address used in kernel image<br>Board Revision ID, configuration. If you can read this information using /proc/cpuinfodon't know what it means maybe it's better don't change it.
* kImageNamerdaddress=zImage0x84000000<br>Kernel file name, if RAM disk copy address. <br>If you don't provide this tag know what it means maybe it's better don't change it try to load these others:<br>// DEFAULT IMAGES<br>"zImage"<br>"zimage"<br>"vmlinuz"<br>"bzImage"<br>"bzimage".
* kRdImageNameserial.low=rdimage00000001<br>Kernel RAM Disk file* serial.high=00000000<br>Board serial Number, if you don't provide can read this tag it try to load these others:<br>information using /proc/ DEFAULT IMAGES<br>"initrd"cpuinfo
---- [kparams] ----*revision=0001<br>Kernel parametersBoard Revision ID, all these parameters are passed directly to the kernel you can read this information using the<br>kernel command line./proc/cpuinfo
*kImageName=zImage<br>Kernel file name, if you don't provide this tag it try to load these others:<br>// DEFAULT IMAGES<br>"zImage"<br>"zimage"<br>"vmlinuz"<br>"bzImage"<br>"bzimage" *kRdImageName=rdimage<br>Kernel RAM Disk file, if you don't provide this tag it try to load these others:<br>// DEFAULT IMAGES<br>"initrd" ---- [kparams] ----<br>Kernel parameters, all these parameters are passed directly to the kernel using the<br>kernel command line. kernel parameters documentation:<br>http://www.kernel.org/doc/Documentation/kernel-parameters.txt<br>http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/ch09.pdf
4.3 Boot Priority<br>-----------------<br>First try mmc and if it fails then try from OneNand.
Examples:<br>a) MLO (x-loader), igep.ini, zImage from MMC<br>If all it's present in the mmc it don't try to boot from Onenand.
b) MLO (x-loader) in MMC, igep.ini and zImage in Onenand.<br>If only MLO it's provided this one try to load the other information from<br>the Onenand.
4.4 OneNand Partition settings<br>-------------------------------<br>We suggest use minimum 3 partitions on the OneNand.
Creating 3 MTD partitions on "omap2-onenand":<br>0x000000000000-0x000000080000 &nbsp;: "X-Loader"<br>0x000000080000-0x000000c80000 &nbsp;: "Boot"<br>0x000000c80000-0x000020000000 &nbsp;: "File System"
4.4.1) Xloader partition<br>* Not fs formated (raw)<br>* Suggested size: 0x80000 (512 KiB)<br>* The xloader must be signed before copy it in the flash memory.
You should copy the x-loader in the firsts 4 blocks (first 512 KiB), this is not a <br>formated partition due the ROM not permits boot from there, you should use tools:<br>flash_eraseall and nandwrite for copy x-loader in the first blocks.
Suggested procedure:
nand_eraseall /dev/mtd0<br>nandwrite -p /dev/mtd0 &lt;x-loader&gt;
* Sign x-loader<br>You should execute contrib/signGP for sign the xloader that resides inside the flash memory.
contrib/signGP x-load.bin <br>The signed x-loader it's named: x-load.bin.ift
Due the Onenand 512 MiB has two dies it's necessary split the x-loader and convert it to a 1 die binary.<br>This is a know OMAP/DM/AM OneNand/Nand boot limitation.
This is the procedure for create the x-loader OneNand binary:<br>You should execute: (You can use copy paste in your console)
split -b 2K x-load.bin.ift split-<br>for file in `ls split-a?`; do cat $file &gt;&gt; x-load-ddp.bin.ift; cat $file &gt;&gt; x-load-ddp.bin.ift; done
This last command generate a file named x-load-ddp.bin.ift this is the x-loader for copy it in the OneNand.
4.4.2 Boot Partition<br>--------------------<br>* fs used jffs2 zlib compressed filesystem.<br>* Suggested size: 0xC00000 (12 MiB)
First time creation:<br>a) Use the same procedure described in point 4.2.1. Copy your jffs2 compressed image in the<br>partition, it can be a empty file.
b) Erase the partition and mount it as jffs2 filesystem then you can copy with cp command.
Next Times:<br>Copy the files using cp command, or edit directly.
when kernel boots you can enable mount this partition over /boot directory for access all boot content.
4.4.3 Rootfs <br>------------<br>* fs (your prefered fs supported by linux, maybe a good choice it should be ubifs)<br>* Size, all or you can create more partitions if you wish ... &nbsp;:)
<br>5 Build procedure<br>=================
5.1 Build with Ubuntu Cross Compiler gcc 4.5.1
* This is tested with Ubuntu 10.10
a) Install the cross compiler:<br>apt-get install cpp-4.5-arm-linux-gnueabi g++-4.5-arm-linux-gnueabi
b) Configure the board<br>make igep0020-sdcard_config
c) Build<br>make
d) Sign x-loader<br>You should execute contrib/signGP for sign the xloader that resides inside the flash memory.<br>contrib/signGP x-load.bin <br>The signed x-loader it's named: x-load.bin.ift
<br>5.2 Build with IGEP SDK
a) Source the enviroment<br>source /usr/local/poky/eabi-glibc/environment-setup-arm-none-linux-gnueabi
b) Edit the file Makefile<br>Find the define:
And Set the variable as:<br>CROSS_COMPILE = arm-none-linux-gnueabi-
b) Configure the board<br>make igep0020-sdcard_config
c) build<br>make
d) Sign x-loader<br>You should execute contrib/signGP for sign the xloader that resides inside the flash memory.<br>contrib/signGP x-load.bin <br>The signed x-loader it's named: x-load.bin.ift
<br>5.3 Build Native
a) Configure the board<br>make igep0020-sdcard_config
b) Modify the config.mk file<br>Edit the variable CFLAGS and add the option: -fno-stack-protector
CFLAGS &nbsp;:= $(CPPFLAGS) -Wall -Wstrict-prototypes -fno-stack-protector
c) build <br>make CROSS_COMPILE=""
d) Sign x-loader<br>You should execute contrib/signGP for sign the xloader that resides inside the flash memory.<br>contrib/signGP x-load.bin <br>The signed x-loader it's named: x-load.bin.ift
<br>6 Contribution &amp; Support &amp; Report Bugs<br>======================================<br>Contributions to this project be welcome and you can send your patches to support@iseebcn.com<br>or you can use the igep forum for it.<br>You can access to IGEP-x-Loader repository using our git at git.igep.es<br>IGEP IRC Channel: http://webchat.freenode.net/?channels=igep<br><br>