ltib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Ltib] ltib code modification/protection


From: MEHMET ALI IPIN
Subject: Re: [Ltib] ltib code modification/protection
Date: Tue, 1 Jan 2013 16:02:02 +0000

The directory of the file misc.c is:

~/ltib/rpm/BUILD/linux-2.6.31/arch/arm/boot/compressed$

Misc.c file is copied below:

 

I have downloaded the ltib from the web site of Freescale. It is excluded from thee L2.6.32_09_SDK_SOURCE.tar file, which is prepared  for imx25_3stack Platform.  

https://www.freescale.com/webapp/sps/download/license.jsp?colCode=L2.6.31_09.12.00_SDK_SOURCE&prodCode=IMX25PDK&appType=file2&location=null&DOWNLOAD_ID=null

 

ltib configuration parameters are as following:

cache target rpms is selected.

Glibc

from toolchain only

Toolchain options:

·         libc shared libraries   is checked

·         c++ shared libraries is checked

·         libgcc*.so* is checked

 

ARMv5te gcc-4.1.2,Multi-lib,gnueabi/glibc-2.5-nptl-3

Cflags: -O2 -fsigned-char -msoft-float  

Bootloader: u-boot

Kernel: Linux 2.6.31-imx 

Always rebuild the kernel

Include kernel headers

 

I am just adding few letters to the putstr(“….”) lines below in main and decompress_kernel functions.

 

I hope these may be enough.

 

Thanks and best regards.

 

Mehmet Ali İpin.

 

/*

* misc.c

*

 * This is a collection of several routines from gzip-1.0.3

 * adapted for Linux.

*

* malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994

*

* Modified for ARM Linux by Russell King

*

* Nicolas Pitre <address@hidden>  1999/04/14 :

*  For this code to run directly from Flash, all constant variables must

*  be marked with 'const' and all other variables initialized at run-time

 *  only.  This way all non constant variables will end up in the bss segment,

*  which should point to addresses in RAM and cleared to 0 on start.

*  This allows for a much quicker boot time.

*/

 

unsigned int __machine_arch_type;

 

#include <linux/compiler.h>      /* for inline */

#include <linux/types.h>            /* for size_t */

#include <linux/stddef.h>          /* for NULL */

#include <asm/string.h>

 

#ifdef STANDALONE_DEBUG

#define putstr printf

#else

 

static void putstr(const char *ptr);

 

#include <mach/uncompress.h>

 

#ifdef CONFIG_DEBUG_ICEDCC

 

#ifdef CONFIG_CPU_V6

 

static void icedcc_putc(int ch)

{

                int status, i = 0x4000000;

 

                do {

                               if (--i < 0)

                                               return;

 

                               asm volatile ("mrc p14, 0, %0, c0, c1, 0" : "=r" (status));

                } while (status & (1 << 29));

 

                asm("mcr p14, 0, %0, c0, c5, 0" : : "r" (ch));

}

#elif defined(CONFIG_CPU_XSCALE)

 

static void icedcc_putc(int ch)

{

                int status, i = 0x4000000;

 

                do {

                               if (--i < 0)

                                               return;

 

                               asm volatile ("mrc p14, 0, %0, c14, c0, 0" : "=r" (status));

                } while (status & (1 << 28));

 

                asm("mcr p14, 0, %0, c8, c0, 0" : : "r" (ch));

}

 

#else

 

static void icedcc_putc(int ch)

{

                int status, i = 0x4000000;

 

                do {

                               if (--i < 0)

                                               return;

 

                               asm volatile ("mrc p14, 0, %0, c0, c0, 0" : "=r" (status));

                } while (status & 2);

 

                asm("mcr p14, 0, %0, c1, c0, 0" : : "r" (ch));

}

 

#endif

 

#define putc(ch)             icedcc_putc(ch)

#define flush() do { } while (0)

#endif

 

static void putstr(const char *ptr)

{

                char c;

 

                while ((c = *ptr++) != '\0') {

                               if (c == '\n')

                                               putc('\r');

                               putc(c);

                }

 

                flush();

}

 

#endif

 

#define __ptr_t void *

 

#define memzero(s,n) __memzero(s,n)

 

/*

* Optimised C version of memzero for the ARM.

*/

void __memzero (__ptr_t s, size_t n)

{

                union { void *vp; unsigned long *ulp; unsigned char *ucp; } u;

                int i;

 

                u.vp = s;

 

                for (i = n >> 5; i > 0; i--) {

                               *u.ulp++ = 0;

                               *u.ulp++ = 0;

                               *u.ulp++ = 0;

                               *u.ulp++ = 0;

                               *u.ulp++ = 0;

                               *u.ulp++ = 0;

                               *u.ulp++ = 0;

                               *u.ulp++ = 0;

                }

 

                if (n & 1 << 4) {

                               *u.ulp++ = 0;

                               *u.ulp++ = 0;

                               *u.ulp++ = 0;

                               *u.ulp++ = 0;

                }

 

                if (n & 1 << 3) {

                               *u.ulp++ = 0;

                               *u.ulp++ = 0;

                }

 

                if (n & 1 << 2)

                               *u.ulp++ = 0;

 

                if (n & 1 << 1) {

                               *u.ucp++ = 0;

                               *u.ucp++ = 0;

                }

 

                if (n & 1)

                               *u.ucp++ = 0;

}

 

static inline __ptr_t memcpy(__ptr_t __dest, __const __ptr_t __src,

                                                   size_t __n)

{

                int i = 0;

                unsigned char *d = (unsigned char *)__dest, *s = (unsigned char *)__src;

 

                for (i = __n >> 3; i > 0; i--) {

                               *d++ = *s++;

                               *d++ = *s++;

                               *d++ = *s++;

                               *d++ = *s++;

                               *d++ = *s++;

                               *d++ = *s++;

                               *d++ = *s++;

                               *d++ = *s++;

                }

 

                if (__n & 1 << 2) {

                               *d++ = *s++;

                               *d++ = *s++;

                               *d++ = *s++;

                               *d++ = *s++;

                }

 

                if (__n & 1 << 1) {

                               *d++ = *s++;

                               *d++ = *s++;

                }

 

                if (__n & 1)

                               *d++ = *s++;

 

                return __dest;

}

 

/*

* gzip delarations

*/

#define OF(args)  args

#define STATIC static

 

typedef unsigned char  uch;

typedef unsigned short ush;

typedef unsigned long  ulg;

 

#define WSIZE 0x8000                  /* Window size must be at least 32k, */

                                                               /* and a power of two */

 

static uch *inbuf;                            /* input buffer */

static uch window[WSIZE];         /* Sliding window buffer */

 

static unsigned insize;                   /* valid bytes in inbuf */

static unsigned inptr;                    /* index of next byte to be processed in inbuf */

static unsigned outcnt;                 /* bytes in output buffer */

 

/* gzip flag byte */

#define ASCII_FLAG   0x01 /* bit 0 set: file probably ascii text */

#define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */

#define EXTRA_FIELD  0x04 /* bit 2 set: extra field present */

#define ORIG_NAME    0x08 /* bit 3 set: original file name present */

#define COMMENT      0x10 /* bit 4 set: file comment present */

#define ENCRYPTED    0x20 /* bit 5 set: file is encrypted */

#define RESERVED     0xC0 /* bit 6,7:   reserved */

 

#define get_byte()  (inptr < insize ? inbuf[inptr++] : fill_inbuf())

 

/* Diagnostic functions */

#ifdef DEBUG

#  define Assert(cond,msg) {if(!(cond)) error(msg);}

#  define Trace(x) fprintf x

#  define Tracev(x) {if (verbose) fprintf x ;}

#  define Tracevv(x) {if (verbose>1) fprintf x ;}

#  define Tracec(c,x) {if (verbose && (c)) fprintf x ;}

#  define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}

#else

#  define Assert(cond,msg)

#  define Trace(x)

#  define Tracev(x)

#  define Tracevv(x)

#  define Tracec(c,x)

#  define Tracecv(c,x)

#endif

 

static int  fill_inbuf(void);

static void flush_window(void);

static void error(char *m);

 

extern char input_data[];

extern char input_data_end[];

 

static uch *output_data;

static ulg output_ptr;

static ulg bytes_out;

 

static void error(char *m);

 

static void putstr(const char *);

 

extern int end;

static ulg free_mem_ptr;

static ulg free_mem_end_ptr;

 

#ifdef STANDALONE_DEBUG

#define NO_INFLATE_MALLOC

#endif

 

#define ARCH_HAS_DECOMP_WDOG

 

#include "../../../../lib/inflate.c"

 

/* ===========================================================================

* Fill the input buffer. This is called only when the buffer is empty

* and at least one byte is really needed.

*/

int fill_inbuf(void)

{

                if (insize != 0)

                               error("ran out of input data");

 

                inbuf = input_data;

                insize = &input_data_end[0] - &input_data[0];

 

                inptr = 1;

                return inbuf[0];

}

 

/* ===========================================================================

* Write the output window window[0..outcnt-1] and update crc and bytes_out.

* (Used for the decompressed data only.)

*/

void flush_window(void)

{

                ulg c = crc;

                unsigned n;

                uch *in, *out, ch;

 

                in = window;

                out = &output_data[output_ptr];

                for (n = 0; n < outcnt; n++) {

                               ch = *out++ = *in++;

                               c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8);

                }

                crc = c;

                bytes_out += (ulg)outcnt;

                output_ptr += (ulg)outcnt;

                outcnt = 0;

                putstr(".");

}

 

#ifndef arch_error

#define arch_error(x)

#endif

 

static void error(char *x)

{

                arch_error(x);

 

                putstr("\n\n");

                putstr(x);

                putstr("\n\n -- System halted");

 

                while(1);             /* Halt */

}

 

#ifndef STANDALONE_DEBUG

 

ulg

decompress_kernel(ulg output_start, ulg free_mem_ptr_p, ulg free_mem_ptr_end_p,

                                 int arch_id)

{

                output_data                     = (uch *)output_start;  /* Points to kernel start */

                free_mem_ptr                = free_mem_ptr_p;

                free_mem_end_ptr      = free_mem_ptr_end_p;

                __machine_arch_type = arch_id;

 

                arch_decomp_setup();

 

                makecrc();

                putstr("Uncompressing Linux...");

                gunzip();

                putstr(" done, booting the kernel.\n");

                return output_ptr;

}

#else

 

char output_buffer[1500*1024];

 

int main()

{

                output_data = output_buffer;

 

                makecrc();

                putstr("Uncompressing Linux...");

                gunzip();

                putstr("done.\n");

                return 0;

}

#endif

               

From: ltib-bounces+address@hidden [mailto:ltib-bounces+address@hidden On Behalf Of Peter Barada
Sent: Monday, December 31, 2012 8:00 PM
To: address@hidden
Subject: Re: [Ltib] ltib code modification/protection

 

On 12/31/2012 09:06 AM, MEHMET ALI IPIN wrote:

Dear Sir.

 

I would like to Express my gratitudes to you for opening this help site.

 

I have an i.mx25 prototype board, which I can download Linux-2.6.31 uImage kernel files with u-boot, in Ubuntu 11.10 working within VM Virtual Box. I can configure, and execute ./ltib commands.

But when I want to change a *.c file in the Project, I can modify and save the file. But when I build the Project with any ./ltib command, the ltib is deleting my changes, and using its original *.c file.

 

 I have manually changed the code misc.c at the date 2012-12-31 9:35 (msc.o shows the actual build date)

-rw-r--r-- 1 ali ali 6899 2012- 12-31 09:35 misc.c -rw-r--r-- 1 ali ali 16932 2012- 12-31 09:12 misc.o

 

When I used your ltib commands, about ten minutes later, msc.o shows the actual build date, but misc.c shows the date 2009-09-10.

-rw-r--r-- 1 ali ali 6895 2009- 09-10 01:13 misc.c

-rw-r--r-- 1 ali ali 16932 2012- 12-31 09:45 misc.o

 

Anybody have any idea?

 

Thanks and best regards.

 

Mehmet Ali Ipin

 

More information is needed to understand what is happening - what package is "misc.c" part of and how are you building it (that causes LTIB to modify misc.c)?


-- 
Peter Barada
address@hidden

reply via email to

[Prev in Thread] Current Thread [Next in Thread]