Personal tools

Log in

Changes

From IGEP - ISEE Wiki

Jump to: navigation, search

The IGEP X-loader

1,558 bytes added, 16:32, 7 May 2019
Download from git repository
= Summary<br><br> =X-Loader, an initial program loader for Embedded boards based on OMAP processors.
XAccess to the latest version&nbsp;[http://git.isee.biz/?p=pub/scm/igep-x-loader.git;a=summary here] and read the [http://git.isee.biz/?p=pub/scm/igep-x-Loader, an initial program loader .git;a=blob_plain;f=ISEE_README.txt;h=909c072bc2512026342d802b3ef1b7e8f703458b;hb=4bb2ebd99d5b86522d786ac5b074066e9841799c ISEE_Readme.txt] for Embedded boards based on OMAP processorsget the latest release information. <br>
= Features and Limitations<br> Why IGEP-Xloader=Some important reasons exist for using this bootloader on IGEP boards.
== Improvements &amp; Modifications<br> Security==This is one of the most important reasons why we develop this new IGEP X-loader. you will Probably know that flash devices get new bad memory blocks with normal usage that can make unusable or can damange the software residing inside the flash (ex: upgrading the software, copying a new kernel ... ), in these cases your board won't be usable anymore if you don't use a right nand filesystem that insures data integrity. Using the old schema we've 4 important partitions on flash without any protection, x-loader, u-boot, u-boot enviroment and kernel.
*Malloc/free functionality. *Mtd framework and onenand support, removed IGEP X-loader resolves this situation as the old onenand drivers. *Jffs2 support using mtd &amp; onenand support (Read Only). *Crc32 and zlib. *Jffs2 zlib compression support (Read Only). *Dual boot mmc &amp; onenand with mmc highest priority. *Linux kernel boot directly (Support for 2.6.22 configuration and highest version kernels) *Linux kernel supported images: vmlinuz, bzImage and zImage. *Support for loading Linux Ram disk (EXPERIMENTAL) *"ini" files parser. *The configuration resides in reside inside a plain txt (ini format file). *Support Windows &amp; Linux formating ini files. *Boot from mmc, onenand, or mix with mmc highest priority. *Codeblocks project and compilation rules. *Support for gcc 4.5.1jffs2 partition.<br>
== Limitations<br> Maintenance==With the old schema 3 different software existed (x-loader, u-boot, kernel) that did exactly the same job, so you had to reconfigure the board, increasing the complexity of maintenance for the board system and provide a major bug source because we had to assure that all software was aligned with all changes. Also, from a second point of view, we did the job three times so the boot process was more complex and slow.
*The ini configuration file ==Easy to use==With this new approach use the software it's limited more easy to use, if you've the boot information stored inside a jffs2 partition you can use the linux kernel to max size: 16 KiB *Kernel Command line parameters access it's limited directly without the use of any flash tool tomodify the software (ex: 4 KiB *Malloc using nandwrite it's limited to 32 MiBrisky due to its inability to guarantee data integrity over the Nand Flash memory). *Cannot write comments in lines with tag=value<br>
== TODO<br> Upgrade faster and easy==Upgradint to a new kernel it's easier and faster, you only need to copy the new kernel inside the boot partition, copy your new igep.ini inside and reboot the board with all security.
=Features and Limitations===Improvements &amp; Modifications==* Added malloc/free functionality.* Added mtd framework and onenand support, removed the old onenand drivers.* Added fs jffs2 support using mtd &amp; onenand support (Read Only).* Added crc32 and zlib.* Jffs2 zlib compression support (Read Only).* Dual boot mmc &amp; onenand with mmc highest priority.*Added Linux kernel boot directly (Support for IGEP0030 - Family boards2.6.22 and highest version kernels)* Linux kernel supported images: vmlinuz, bzImage and zImage. *Support for other OMAP/DM/AM processor boardsloading Linux Ram disk (EXPERIMENTAL)* Added "ini" files parser.* The configuration resides in a plain txt (ini format file).* Support Windows &amp; Linux formating ini files.* boot from mmc, onenand, or mix with mmc highest priority. *Remove Added codeblocks project and compilation warningsrules.* Added support for vfat32 extra names.* Configure TPS65950 voltage to 1.35V if it's used a DM3730 processor. *Comments Added new parameter MachineID in kernel tag lines<br>file, with it you can* &nbsp;&nbsp;&nbsp; - configure the kernel board ID setup* Added new parameter buddy for kernels 2.6.35.y and 2.6.37.y* Optimize some LPDDR Memory configuration values* Removed some OneNand Debug information* Removed some FAT incorrect warnings* Added Support Initial Ram disk* Reconfigure Makefile options* Support Kernels 2.6.35, 2.6.37, 3.6.4* Added support for boot ARM binary files (such u-boot or QNX kernel)* Support for Numonyx, Micron and hynix POP Memories.* Memory autodetection.* Added GPTimer functionality.* Support Numonyx, Micron and hynix memories.* DMA Copy support* Omtimized memcpy and memset functions.* DSS Video driver.* Support ISEE toolchain yocto 1.2 based.
== STATUS<br> Limitations==* The ini configuration file it's limited to max size: 16 KiB* Kernel Command line parameters it's limited to: 4 KiB* Malloc it's hardcode limited to 32 MiB.* Video is limited to 1024 x 768 x 16 bits.* Video Memory is limited to 1280 x 720 x 32 bits.
==TODO==*Support IGEP0020 Revision B &amp; C family boardsRemove compilation warnings. *Tested with IGEPv2 (DM3730@1Ghz and 512/512 MB Ram/Onenand) System Rescue.*Tested with IGEPv2 (AM3703@1Ghz Improve boot selection and 512/512 MB Ram/Onenand) priority.*Tested with IGEPv2 (OMAP3530@720Mhz and 512/512 MB Ram/Onenand)<br>Remove unused code.
= Build Procedure<br> =STATUS==* Support:** IGEPv2 DM3730** IGEPv2 OMAP3530** IGEP COM MODULE DM3730** IGEP COM PROTON DM3730** IGEP COM MODULE AM3703
== Build VERSION CHANGES==[2.1.0-1] This version only can be build with Ubuntu Cross Compiler gcc linaro 4.5.1 ==2 other compilers be not supported.
<span style="font[2.1.0-style: italic;1] Removed some uncontrolled "><span style="font-weight: bold;printf">Enviroment</span></span>'''''Ubuntu 10with incorrect information.10'''''
=== Install the cross compiler if you not do it before[2.<br> ===<pre>apt-get install cpp-41.5-arm-linux-gnueabi g++0-41] Modified some code under __DEBUG__ option.5-arm-linux-gnueabi</pre> === Setup the board settings<br> ===<pre>make igep0020-sdcard_config</pre> === Build<br> ===<pre>make</pre> === Sign the binary x-loader<br> ===
''You should execute contrib/signGP for sign the xloader[2.'' <pre>contrib/signGP x-load1.binThe signed x0-loader it's named: x1] Added Support for TPS65950-load.binA3 initialization at 1.ift</pre> == Build with IGEP SDK ==35V
=== Setup the Enviroment<br> ===<pre>source /usr/local/poky/eabi[2.1.0-glibc/environment-setup-arm-none-linux-gnueabi</pre> === Setup the board settings<br> ===<pre>make igep0020-sdcard_config</pre> === Build<br> ===<pre>make CROSS_COMPILE=arm-none-linux-gnueabi-</pre> === Sign the binary x-loader ===1] Added support for IGEP Module 0030
''You should execute contrib/signGP for sign the xloader[2.'' <pre>contrib/signGP x-load1.binThe signed x0-loader it's named: x-load.bin.ift</pre> == Build Native ==1] Added support dynamic Machine ID selection (same xloader boot IGEPv2 &amp; IGEP Module)
=== Configure the board settings<br> ===<pre>make igep0020-sdcard_config</pre><pre>Edit the variable CFLAGS and add the option: -fno-stack-protectorCFLAGS&nbsp;:= $(CPPFLAGS) -Wall -Wstrict-prototypes -fno-stack-protector</pre> === Build<br> ===<pre>make CROSS_COMPILE=arm-none-linux-gnueabi-</pre> === Sign the binary x-loader ===
''You should execute contrib/signGP for sign the xloader[2.'' <pre>contrib/signGP x-load1.binThe signed x-loader it's named: x0-load.bin.ift</pre> = BOOT<br> =2] ARM Compilation bug resolved
The IGEP X-Loader must reside in the microSD card or in the OneNand.<br> ---
== Low Level Initialization ==[2.1.0-3] Update SDRAM structure initialization
The OMAP Processor loads the XLoader directly from the mmc or the OneNand and copy the binary into the internal processor RAM (0x40200000) and jump to this place, this internal memory it's limited to 64K divided as: Interrupts, code, data and stack. Initialization code can be found using this link: [http://git2.igep1.es/?p=pub/scm/igep-x0-loader.git;a=blob;f=cpu/omap3/start.S;h=4cbf4379b8502ebfe0409b35e4aafba712234c34;hb=HEAD start.S3]&nbsp; <pre>&nbsp; 96 reset: 97 /*Added support for Initial RAM disk
98 * set the cpu to SVC32 mode[2.1.0-3] Updated Initial RAM disk destination address
99 */----
100 mrs r0,cpsr[2.2.0-1] Update Makefile structure
101 bic r0,r0,#0x1f[2.2.0-1] Downgrade the boot processor speed
102 orr r0,r0,#0xd3----
103 msr cpsr,r0[2.3.0-1] Add NAND flash devices and Micron MT29CXGXXMAXX memories support
104 [2.3.0-2] Add Hynix NAND memorie and IGEP0032 support
105 /* Copy vectors to mask ROM indirect addr */ [2.3.0-2] Added lzo compression schema.
106 adr r0, _start /* r0 &lt;- current position of code */---
107 add r0, r0, #4 /* skip reset vector */[2.3.0-3] Add Support for execute ARM binaries [2.3.0-3] Bug Fixes related to I and D Cache
108 mov r2, #64 /* r2 &lt;- size to copy */---
109 add r2, r0, r2 /* r2 &lt;[2.4.0- source end address */1] Added Memory test feature
110 mov r1, #SRAM_OFFSET0 /* build vect addr */[2.4.0-1] Added some boot information
111 mov r3, #SRAM_OFFSET1[2.4.0-1] New read_nand_cache function optimized for load from NAND
112 add r1, r1, r3[2.4.0-1] BUG resolved: Refresh Setup in Micron &amp; Hynix Memories
113 mov r3, #SRAM_OFFSET2[2.4.0-1] BUG resolved: Reset Memory controller after initialize Malloc function
114 add r1, r1, r3[2.4.0-1] BUG resolved: Resolve problems updating the flash content under jffs2
115 next:----
116 ldmia r0!, {r3[2.4.0-r10} /* copy from source address [r02] */Resolved Memory Autodetection
117 stmia r1!, {r3[2.4.0-r10} /* copy to target address [r12] */Better hang board led control
118 cmp r0, r2 /* until source end address [r22.4.0-2] */New read_nand_cache function optimized for load from OneNand
119 bne next /* loop until equal */[2.4.0-2] Added Hw GPtimer functionality
120 ----
121 bl cpy_clk_code /* put dpll adjust code behind vectors */[2.5.0-1] Added System DMA driver.
122 [2.5.0-1] Added optimized memcpy &amp; memset functions.
123 /* the mask ROM code should have PLL and others stable */[2.5.0-1] Improved boot speed.
124 bl cpu_init_crit [2.5.0-1] Improve NAND driver support.
&nbsp;125 [2.5.0-1] Auto x-loader.bin.ift and MLO generation.
126 relocate: /* relocate U[2.5.0-Boot to RAM */1] Added DSS video support.
127 adr r0, _start /* r0 &lt;- current position of code */---
128 ldr r1, _TEXT_BASE /* test if we run from flash or RAM */[2.5.0-2] Fixed System DMA misconfiguration.
129 cmp r0, r1 /* no need to relocate if XIP */[2.5.0-2] Improve GPMC timming setup.
130 beq stack_setup /* skip txt cpy if XIP(SRAM, SDRAM) */ [2.5.0-2] Added DSS igep.ini variables.
131 [2.5.0-2] Added Support for new memory capacities.
132 ldr r2, _armboot_start[2.5.0-2] Auto x-loader.bin.ift and MLO generation.
133 ldr r3, _bss_start[2.5.0-2] Minor bug fixes.
134 sub r2, r3, r2 /* r2 &lt;- size of armboot */---
135 add r2, r0, r2 /* r2 &lt;[2.5.0- source end address */3] platform.S: downgrade MPU boot clock from 1GHz to 800 MHz
136 ----
137 copy_loop:[2.6.0-1] Remove OMAP35xx support
138 ldmia r0!, {r3[2.6.0-r10} /* copy from source address [r01] */New DMA driver, now can handle different DMA channels and transfers
139 stmia r1!, {r3[2.6.0-r10} /* copy to target address [r11] */GPMC: Add support for use prefetch engine
140 cmp r0, r2 /* until source end addreee [r22.6.0-1] */NAND: Added a new Nand driver
141 ble copy_loop[2.6.0-1] NAND: Modify memory setup timmings
142 ----
143 /* Set up the stack */[2.6.0-2] DMA: disable dma_memcpy function due random kernel memory corruption
144 stack_setup=Pre-Compiled Binaries={| border="1" width="905" cellspacing="1" cellpadding="1"|-! scope="col"|Release! scope="col"|Download link! scope="col"|Support|-||2.6.0-2||[http://downloads.isee.biz/pub/releases/IGEP_xloader/igep-x-loader-2.6.0-2.tar.bz2 igep-x-loader-2.6.0-2.tar.bz2]||[[The_IGEP_X-loader#STATUS | DM3730 Boards]]|-||2.5.0-2||[http://downloads.isee.biz/pub/releases/IGEP_xloader/igep-x-loader-2.5.0-2.tar.bz2 igep-x-loader-2.5.0-2.tar.bz2]||[[The_IGEP_X-loader#STATUS | All OMAP3 Boards]]|-||2.4.0-2||[http://downloads.isee.biz/pub/releases/IGEP_xloader/igep-x-loader-2.4.0-2.tar.bz2 igep-x-loader-2.4.0-2.tar.bz2]||[[The_IGEP_X-loader#STATUS | All OMAP3 Boards]] except IGEP COM MODULE AM3703|-||2.1.0-2||[http://downloads.isee.biz/pub/releases/IGEP_xloader/igep-x-loader-2.1.0-2.tar.bz2 igep-x-loader-2.1.0-2.tar.bz2]||[[The_IGEP_X-loader#STATUS | All OMAP3 Boards]] except IGEP COM MODULE AM3703|-||2.1.0-3||[http://downloads.isee.biz/pub/releases/IGEP_xloader/igep-x-loader-2.1.0-3.tar.bz2 igep-x-loader-2.1.0-3.tar.bz2]||[[The_IGEP_X-loader#STATUS | All OMAP3 Boards]] except IGEP COM MODULE AM3703|-||2.2.0-1||[http://downloads.isee.biz/pub/releases/IGEP_xloader/igep-x-loader-2.2.0-1.tar.bz2 igep-x-loader-2.2.0-1.tar.bz2]||[[The_IGEP_X-loader#STATUS | All OMAP3 Boards]] except IGEP COM MODULE AM3703|}
145 ldr r0, _TEXT_BASE =Build Procedure===Build with ISEE SDK Yocto Toolchain 1.2=====Download and Install the cross compiler if you not do it before.===Download the toolchain from this [https://www.isee.biz/* upper 128 KiB: relocated uboot *support/downloads/item/igep-sdk-yocto-toolchain-1-2-2-3 link] and uncompress it as root in your /directory.
146 sub sp, r0, #128 /* leave 32 words for abort-stack */<pre>Hint: Remember setup the enviroment before build the source:
147 and sp, sp, #~7 source /* 8 byte alinged for (ldropt/str)d *poky/1.2/environment-setup-armv7a-vfp-neon-poky-linux-gnueabi</pre>
148 ===Download the sources from our git repository===<pre>git clone git://git.isee.biz/pub/scm/igep-x-loader.git</pre>===Get your desired tag / release===git checkout &lt;your_desired_release&gt; -b &lt;your_name_release&gt;
149 /* Clear BSS (if any)<pre>git checkout release-2.5.0-2 -b release-2.5. Is below tx (watch load addr 0-2- need space) *local</pre>
150 clear_bss:===Setup the board build setup===<pre>make igep00x0_config</pre>===Build the software===<pre>make</pre>===Sign the binary x-loader (Only versions prior to 2.5.0-x)===''You should execute contrib/signGP for sign the xloader.''
151 ldr r0, _bss_start <pre>contrib/* find start of bss segment *signGP x-load.binThe signed x-loader it's named: x-load.bin.ift</pre>
==Build Native=====Download from git repository=== 152 ldr r1, _bss_end git clone https:/* stop here */git.isee.biz/arm-boot/igep-x-loader.git git checkout &lt;your_desired_release&gt; -b &lt;your_name_release&gt;
153 mov r2, #0x00000000 /* clear value *<pre style="font-weight: normal;"> git checkout release-2.5.0-2 -b release-2.5.0-2-local</pre>
154 clbss_l===Configure the board settings===<pre>make igep00x0_config</pre><pre>Edit the variable CFLAGS and add the option:-fno-stack-protectorCFLAGS&nbsp;:= $(CPPFLAGS) -Wall -Wstrict-prototypes -fno-stack-protector</pre>===Build===<pre>make CROSS_COMPILE=arm-none-linux-gnueabi-</pre>===Sign the binary x-loader===''You should execute contrib/signGP for sign the xloader.''
155 str r2, [r0] <pre>contrib/* clear BSS location *signGP x-load.binThe signed x-loader it's named: x-load.bin.ift</pre>=BOOT=The IGEP X-Loader must reside in the microSD card or in the Nand Memory.
156 cmp r0, r1 ==MMC Boot=====Prepare the microsd card===You can follow this howto about how [http://code.google.com/* are we at p/beagleboard/wiki/LinuxBootDiskFormat prepare the end yet */microsd card] or [[How to boot from MicroSD Card]]
157 add r0Get a new microsd card and create two partitions, r0, #4 /* increment clear index pointer *the first one must be fat16/32 and the second one can be formated in any format type supported by linux kernel.
158 bne clbss_l /* keep clearing till at end */===Copy the files in the first (FAT) partition===In the first partition you must copy in this order:
159 # x-loader.bin.ift (you must rename this file to MLO before copy it) / This is a signed image using contrib/signGP tool# x-loader configuration file [http://git.igep.es/?p=pub/scm/igep-x-loader.git;a=blob;f=scripts/igep.ini;h=ce093fe80c81d8888bf79464f847059b312bba83;hb=HEAD igep.ini]&nbsp;also you can change the configuration file name editing the file:&nbsp;[http://git.igep.es/?p=pub/scm/igep-x-loader.git;a=blob;f=include/configs/igep00x0.h igep00x0.h]&nbsp;(#define IGEP_BOOT_CFG_INI_FILE "igep.ini")# Your desired kernel image.
160 ldr pc, _start_armboot /* jump to C code */Load Order:
<pre> 161 48 /* Linux Images */ 49 const char* LinuxImageNames [] = { 50 "kparam" /* Use kparam first */ 51 "zImage", /* jffs2 it's case sensitive */ 52 "zimage", /* fat name it's not case sentitive */ 53 "vmlinuz", 54 "bzImage", 55 "bzimage", 56 0, 57 };
162 _start_armbootor you can set the name for your kernel in the configuration file using the tag: kImageName</pre>Don't use a uImage kernel format (from uboot), only standard kernel formats be supported.word start_armboot
</pre> It's important take a lool to the call assembly function cpu_init_crit (you can see the code below) this is resposable to call the board initialization defined in [http://git.igep.es/?p=pub/scm/igep-x-loader.git;a=blob;f=board/igep0020/platform.S platform.S] file. Check the call to lowlevel_init:<br> <pre> 175 cpu_init_crit''kernel build command example''': 176 /*
177 * Invalidate L1 I<pre>make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- zImage modules</Dpre>
178 */===Second Partition===Copy all your rootfs in this second partition.
179 mov r0, #0 Also you can use the [http:/* set up for MCR */releases.linaro.org/platform/linaro-m/headless/final/linaro-m-headless-tar-20101108-2.tar.gz linaro 10.11 minimal image]&nbsp;download the image and untar (as root) in your microsd card second partition.
180 mcr p15, 0, r0, c8, c7, 0 /* invalidate TLBs */Remember install the kernel modules in this partition.
181 mcr p15, 0, r0, c7, c5, 1 /* invalidate icache */  182   183 /* Invalide L2 cache (gp device call point)   184 * - warning, this may have issues on EMU/HS devices  185 * this call can corrupt r0-r5  186 */  187 mov r12, #0x1 @ set up to invalide L2   188 smiExample: .word 0xE1600070 @ Call SMI monitor  189   190 /*  191 * disable MMU stuff and caches  192 */  193 mrc p15, 0, r0, c1, c0, 0  194 bic r0, r0, #0x00002000 @ clear bits 13 (--V-)  195 bic r0, r0, #0x00000007 @ clear bits 2:0 (-CAM)  196 orr r0, r0, #0x00000002 @ set bit 1 (--A-) Align  197 #ifndef CONFIG_ICACHE_OFF  198 orr r0, r0, #0x00001800 @ set bit 11,12 (---I Z---) BTB,I-Cache  199 #endif  200 mcr p15, 0, r0, c1, c0, 0  201   202 /*  203 * Jump to board specific initialization... The Mask ROM will have already initialized  204 * basic memory. Go here to bump up clock rate and handle wake up conditions.  205 */  206 adr r0, _start /* r0 &lt;- current position of code */  207 ldr r1, _TEXT_BASE /* test if we run from flash or RAM */  208 cmp r0, r1 /* pass on info about skipping some init portions */  209 moveq r0,#0x1 /* flag to skip prcm and sdrc setup */  210 movne r0,#0x0  211   212 mov ip, lr /* persevere link reg across call */  213 bl lowlevel_init /* go setup pll,mux,memory */  214 mov lr, ip /* restore link */  215 mov pc, lr /* back to my caller */ </pre> Lowlevel_init it's responsable to set the stack settings and call the lowlevel board initialization called s_init "C" code defined in [http://git.igep.es/?p=pub/scm/igep-x-loader.git;a=blob;f=board/igep0020/igep0020.c here]<br> <pre> 171 .globl lowlevel_init 172 lowlevel_init:  173 ldr sp, SRAM_STACK  174 str ip, [sp] /* stash old link register */  175 mov ip, lr /* save link reg across call */  176 bl s_init /* go setup pll,mux,memory */  177 ldr ip, [sp] /* restore save ip */  178 mov lr, ip /* restore link reg */  179   180 /* back to arch calling code */  181 mov pc, lr
<pre>sudo make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- modules_install INSTALL_MOD_PATH=[path to your target rootfs]
</pre>
==Nand Boot==
===Nand Partitions===
We've defined 3 partitions on the Nand Memory.
<pre>MTD partitions on "omap2-onenand":
(a) 0x000000000000-0x000000080000&nbsp;: "X-Loader"
(b) 0x000000080000-0x000000c80000&nbsp;: "Boot"
(c) 0x000000c80000-0x000020000000&nbsp;: "File System"
</pre>
At the end and after the s_init call the code jump to initial C function called [http://git.igep.es/?p=pub/scm/igep===X-x-loader.git;aLoader Partition===blob;f=lib/board.c start_armboot] defined in * Not fs formated (onenand raw)* Size: 0x80000 (512 KiB)* The xloader must be signed before copy it into the file lib/board.cflash memory.<br>
== C Execution Flow<br> == === s_init<br> === Function: You should copy the x-loader in the firsts 4 blocks (first 512 KiB), this is not a&nbsp;formated partition due the ROM not permits boot from a formated partition in flash, you should use flash_eraseall and [http://git.igepisee.esbiz/?p=pub/scm/igep-x-loaderwriteloader.git;a=blob;f=board/igep0020/igep0020.c s_initsummary writeloader]<br> This function it's responsable to do for copy x-loader in the basic board (processor) initializationfirst blocks. It's called before the "C" generic initialization code.<br><pre> 874 /********************************************************** 875 * Routine: s_init  876 * Description: Does early system init of muxing and clocks.  877 * - Called at time when only stack is available.  878 **********************************************************/  879 void s_init(void)  880 {  881 watchdog_init();  882 try_unlock_memory();  883 set_muxconf_regs();  884 delay(100);  885 prcm_init();  886 per_clocks_enable();  887 gpmc_init ();  888 config_multichip_package();  889 }
<pre>Suggested procedure:
Sign the x-loader before write it on the flash or microsd card.
Sign x-loader:
You should execute contrib/signGP for sign the xloader that resides inside the flash memory.
contrib/signGP x-load.bin
The signed x-loader it's named: x-load.bin.ift
Erase and copy the x-loader into the first flash partition (mtd0):
flash_eraseall /dev/mtd0
writeloader -i &lt;x-loader.bin.ift&gt; -o /dev/mtd0
</pre>
This function set the PLL clocks, MUX settings, GPMC configuration and memory configuration====<span id="1299156619608S" style="display: none;">&nbsp;</span>Boot Partition====* filesystem used jffs2 zlib/lzo compressed filesystem.* Suggested size: 0xC00000 (12 MiB).
=== cpu_init<br> ===X-Loader only support jffs2 partitions for boot partition.
Function<u>Create the boot partition: [http://git.igep.es/?p=pub</scm/igep-x-loader.git;a=blob;f=cpu/omap3/cpu.c cpu_init]<bru>
This function it's the responsable to do the CPU generic initialization and it's the first function called. <br>
=== board_init<br> ===
Function: [http://git.igep.es/?p=pub/scm/igep-x-loader.git;a=blob;f=board/igep0020/igep0020.c board_init]<brpre> Suggested procedure:
This function it's defined per board and it's the responsable to initialize the board. Erase all mtd1 content:flash_eraseall /dev/mtd1
Initialization GPMC for access to LAN9221 Ethernet controller and initialization of malloc &amp; free algorithms (from here all code can use malloc &amp; free calls). Create your partition:<pre> 895 int board_init(void) 896 { 897 mount -t jffs2 /dev/ Setup gpmc &lt;-&gt; Ethernet 898 setup_net_chip(is_cpu_family()); 899 mtdblock1 // Setup Malloc memory 900 mem_malloc_init(XLOADER_MALLOC_IPTR, XLOADER_MALLOC_SIZE); 901 902 return 0; 903 }mnt
</pre>
<br> === <bru> Next uses:<br/u> 4 Settings &amp; Configuration: ===
====== ================ ======<u></u>You can mount the partition over your boot directory in the rootfs
4.1 MMC Boot<brpre>mount ------------<br>Get a new mmc and create two partitions, the first one must be fat (you can follow <br>this howto: http:/t jffs2 /code.google.comdev/pmtdblock1 /beagleboard/wikiboot</LinuxBootDiskFormat)<brpre>In this first partition (boot partition) you should You can use the cp command for copy: your kernel and igep.ini configuration file.
*x-loader.bin.ift (you must rename this file to MLO) / This is a signed image using contrib/signGP tool<brpre>* cp igep.ini/bootcp zImage /boot<br/pre>====Rootfs Partition====* fs (your prefered fs supported by linux, maybe a good choice it should be ubifs)* Your desired kernel imageSize, all or you can create more partitions if you wish ...&nbsp;:)
Don't use a uImage kernel format (==Boot Priority==XLoader first try load from uboot), only kernel formats be supportedmmc and if it fails then try from OneNand.
Compilation Example:'''MLO (x-loader), igep.ini, zImage from MMC'''<br/>$make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- zImage modules If all it's present in the mmc it don't try to boot from Onenand.
Read '''MLO (x-loader) in MMC, igep.ini and zImage in Onenand.'''<br />If only MLO it's provided this one try to load the kernel documentation about kernel imagesother information from&nbsp;the Onenand.
4.2 Setup igep.ini file<br>------------------------<br># Note this format permits use It means that XLoader always try to load the characters<br># '#' information from MMC and ';' as comment check file size restrictions if it fails then try to load from OneNand.
[kernel]<br>kaddress=0x80008000<br>;rdaddress=0x84000000<br>serialConfiguration file: igep.lowini==00000001<br>serial[http://en.wikipedia.org/wiki/INI_file This entry in wikipedia] can help you how a ini file it's structured.high=00000000<br>revision=0001<br>;kImageName=<br>;kRdImageName=
Inside the sources/scripts directory you can found a [kparams]<br>console=ttyS2,115200n8<br>;earlyprintk=serial,ttyS2,115200<br>mem=512M<br>boot_delay=0<br>;mpurate=800<br>;loglevel=7<br>omapfbhttp://git.isee.modebiz/?p=dvi:1024x768MRpub/scm/igep-x-16@60<br>smsc911xloader.macgit;a=0xb2,0xb0,0x14,0xb5,0xcd,0xde<br>blob;ubif=scripts/igep.mtd=2<br>ini;rooth=ubi0:igep0020-rootfs <br>ce093fe80c81d8888bf79464f847059b312bba83;rootfstype=ubifs<br>roothb=refs/devheads/mmcblk0p2 rw rootwait master igep.ini] example file.
----The actual XLoader can handle two kind tags:
Tags Supported<br>--------------- [kernel] Used for internal XLoader setup.
----[kparams] Used for pass the linux kernel parameters.
===TAG: [kernel] &nbsp;===<pre> 1 [kernel] 2 kaddress=0x80008000 3 rdaddress=0x81600000 4 serial.low=00000001 5 serial.high=00000000 6 revision=0001 7 kImageName=zImage-test 8 kRdImageName=rdImage-test 9 MachineID=xxxx Where Machine ID = 2344 for IGEPv2, ID = 2717 for IGEP COM Module, ID = 3203 for IGEP COM PROTON 10 Mode=&lt;kernel&gt; or &lt;binary&gt; 11 dss=&lt;0 or 1&gt; Enable or Disable Video Output 12 dss_color=&lt;0x00FF8000&gt; Write your desired color in hex value 13 dss_bitmap=&lt;filename&gt; Raw display image</pre>{| border="1" width="800" cellspacing="1" cellpadding="1"|-||Parameter Name||Description||Default Value||Comments|-<br>* ||kaddress||Kernel copy address||0x80008000||hex memory address|-||rdaddress||Ram Disk location address||0x81600000||hex memory address|-||serial.low||Serial number (low part)||0 - 99999999||numeric|-||serial.high||Serial number (high part)||0 - 99999999||numeric|-||revision||Revision ID||0 - 9999||numeric|-||kImageName||Kernel, binary image name||N/A||Kernel or binary image name|-||kRdImageName||Ramdisk||N/A||Ram Disk image name|-||MachineID||Machine ID (kernel ID)||2717||2717 (IGEP COM Module) | 2344 IGEPv2 | 3203 (IGEP COM PROTON)|-||Mode||Boot Mode||kernel||kernel=linux kernel / binary=boot binary image|-||dss||Enable Video||0||0 =0x80008000 Disable, 1 Enable Video Output|-||dss_color||Video Color||0x00FF8000||Solid Color|-||dss_bitmap||Video Bitmap Image||string||filename with desired image|}
Kernel copy address, ===TAG:&nbsp;[kparams]===In this tag you should use the same address used in can add all kernel image<br>configuration. If parameters that you don't know what it means maybe it's better don't change it. need, this is only an example:
*rdaddress=0x84000000<brpre>Kernel RAM disk copy address 10 [kparams] 11 console=ttyS2,115200n8 12&nbsp;;earlyprintk=serial,ttyS2,115200 13 mem=512M 14 boot_delay=0 15&nbsp;;mpurate=800 16&nbsp;;loglevel=7 17 omapfb.mode=dvi:1024x768MR-16@60\r 18 smsc911x. <br>If you don't know what it means maybe it's better don't change itmac=0xb2,0xb0,0x14,0xb5,0xcd,0xde\r 19&nbsp;;ubi.mtd=2 20&nbsp;;root=ubi0:igep0020-rootfs 21&nbsp;;rootfstype=ubifs 22 root=/dev/mmcblk0p2 rw rootwait
*serial.low=00000001<br>* serial.high=00000000<br>Board serial Number, Also remember you can read this information comment any line using /proc/cpuinfo';' or '#' characters.
*revision=0001<br/pre>Board Revision ID, you can read this information using /proc/cpuinfo
*kImageName=zImage<br>Kernel file nameFAQ===How I can boot from NFS?==Yes, if you don't provide this should add below parameters in the kparams tag it try to load these others:<br>// DEFAULT IMAGES<br>"zImage"<br>"zimage"<br>"vmlinuz"<br>"bzImage"<br>"bzimage"
*kRdImageName=rdimage<brpre>Kernel RAM Disk file#smsc911x.mac fix your mac addresssmsc911x.mac=0xb2, if 0xb0,0x14,0xb5,0xcd,0xde# IP set you don't provide this tag it try to load these othersIP settings &lt;local_ip&gt;:&lt;server_ip&gt;:&lt;gateway&gt;:<br>&lt;network_mask&gt;::&lt;interface&gt;:ip=192.168.2.123:192.168.2.105:192.168.2.1:255.255.255.0::eth0:# Set root as nfsroot=/dev/nfs# Set your NFS root path as &lt;server_ip&gt;:&lt;rootfs_path&gt;nfsroot=192.168.2.105:/srv/nfs/ DEFAULT IMAGESlinaro_minimal<br/pre>"initrd"==How I can change the assigned kernel memory?==You can use the mem kernel variable as assign your desired kernel memory as:
<pre>[kparams]mem=430M</pre>==How I can add more kernel variables?==You can add more variables creating a new variable ----value pair under kparams tag as:
[kparams] ----<brpre>Kernel parameters, all these parameters are passed directly to the kernel boot_delay=0</pre>==How I can modify my MAC address?==You can assign your desired mac address using the<br>kernel command linevariable&nbsp;smsc911x. mac as:
kernel parameters documentation:<brpre>http://wwwsmsc911x.kernel.orgmac=0xb2,0xb0,0x14,0xb5,0xcd,0xde</doc/Documentation/kernel-pre>==How I can boot my board using ubi root filesystem?==You should use these parameters.txt<br>http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/ch09.pdf
4.3 Boot Priority<br>-----------------<brpre>First try mmc and if it fails then try from OneNandubi. mtd=2
Examplesroot=ubi0:<br>a) MLO (xigep0020-loader), igep.ini, zImage from MMC<br>If all it's present in the mmc it don't try to boot from Onenand. rootfs
b) MLO (x-loader) in MMC, igep.ini and zImage in Onenand.rootfstype=ubifs<br/pre>If only MLO ==How I can boot my board using a RAM disk?==Use a RAMdisk it's provided this one try to load the other information from<br>the Onenandfully supported.
4.4 OneNand Partition settings<br>-------------------------------<brpre>We suggest use minimum 3 partitions on the OneNand[kernel]rdaddress=0x81600000kRdImageName=ramdisk. bin
Creating 3 MTD partitions on "omap2-onenand":<br>0x000000000000-0x000000080000&nbsp;: "X-Loader"<br>0x000000080000-0x000000c80000&nbsp;: "Boot"<br>0x000000c80000-0x000020000000&nbsp;: "File System" [kparams]root=/dev/ram0 rw
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<brpre>nandwrite -p /dev/mtd0 &lt;x-loader&gt;  *Sign x-loader<br>You should execute contrib/signGP for sign ==Can I change the xloader that resides inside the flash memory.Processor frecuency?== contrib/signGP x-load.bin <br>The signed xYes you can, IGEP X-loader it's named: x-load.bin.ift  Due the Onenand 512 MiB has two dies it's necessary split configures the x-loader and convert it processor 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 at 600 Mhz you can use copy paste in your console)  split -b 2K x-load.bin.ift split-<br>for file in `ls split-select 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 different boot speed using the<br>partition, it can be a empty file.  b) Erase the partition and mount it variable mpurate 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.<pre>mpurate=800</pre>If you don't force any frequency the linux kernel will put your processor at the maximum speed (ex: DM3730 will run at 1 Ghz)
*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==How I can boot downloading the kernel using wget?==The way for do that it's using one minimal kernel and RAMdisk (ex: using image-core-minimal from poky) Configure , the board<br>make igep0020-sdcard_config procedure can be more or less:
ca) Build<br>make Copy your minimal kernel and your Ramdisk inside the boot partition.
db) Sign x-loader<br>You should execute contribBoot Normally from this kernel and Ramdisk, create one script your your desired command such wget http://signGP for sign the xloader that resides inside the flash memory192.168.15.<br>contrib22/signGP x-load.bin <br>The signed x-loader it's named: x-loadmykernel.bin.ift
<br>5.2 Build with IGEP SDK c) Execute the script when boot (you can do that adding the script to the init enviroment)
ad) Source if the enviroment<br>source /usr/local/poky/eabi-glibc/environment-setup-arm-none-linux-gnueabi downloading it's ok then execute the kexec call, first load the kernel and then pass to it your desired parameters.
be) Edit finally boot the file Makefile<br>Find the define: new kernel with kexec.
And Set the variable as:<br>CROSS_COMPILE = arm-none-linux-gnueabi-
b) Configure the board<br>make igep0020-sdcard_config
c==My board not boot and I don't know what to do ...==When you test your IGEP X-loader, igep.ini file and kernel we suggest use a microsd card in front of use directly the flash nand, if your flash not boot copy all files in one microsd card and boot from there. You can check what happens removing some files from your microsd card for example if you wish test if your flashed kernel it's loaded in a right way then remove the kernel from your microsd card (note: use the same kernel name) build<br>make , IGEP X-loader first try load the file from your microsd card but if it's not found then it try to find the file in the flash.
d) Sign x-loader<br>You should execute contrib/signGP for sign ==How I can upgrade my old kernel?==Just copy the xloader that resides inside new one, the flash memory.<br>contrib/signGP x-load.bin <br>The signed x-loader most secure way it's named: x-loadcopy the new one and at end replace the igep.binini file with your new one.ift
<brpre>5.3 Build Native mount -t jffs2 /dev/mtdblock1 /boot
a) Configure the board<br>make igep0020-sdcard_config cp newkernel.bin /boot
b) Modify the config cp igep.mk fileini /boot<br/pre>Edit the variable CFLAGS Use a different kernel name and add the option: -fno-stack-protector you always can boot from your old one.
CFLAGS=6 Contribution &amp; Support &amp; Bugs Report=Contributions to this project be welcome and you can send your patches to support@iseebcn.com&nbsp;or you can use the igep forum for it.<br />You can access to IGEP-x-Loader repository using our git at [http://git.isee.biz/?p= $(CPPFLAGS) pub/scm/igep-Wall x-Wstrict-prototypes -fno-stack-protector loader.git;a=summary git.isee.biz]<br />IGEP IRC Channel: [http://webchat.freenode.net/?channels=igep http://webchat.freenode.net/?channels=igep]
c) build <br>make CROSS_COMPILE=""
d) Sign x-loader<br>You should execute contrib{{Message/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 Forum}}
<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[[Category: http://webchat.freenode.net/?channels=igep<br><br>Boot_loaders|X_Loader]]