Exemple #1
0
int main(void)
{
    static char buf[16];
    static long size = -1;
    static unsigned char *loadbuf = NULL;
    char *entry_point;
    void (*f)(void);
    extern int buffer_start;    /* リンカ・スクリプトで定義されているバッファ */

    INTR_DISABLE;   /* 割込み無効にする */

    init();

    puts("kzload (kozos boot loader) started.\n");

    while (1) {
        puts("kzload> ");   /* prompt */
        gets(buf);

        if(!strcmp(buf, "load")) {  /* XMODEMでのファイルのダウンロード */
            loadbuf = (char *)(&buffer_start);
            size = xmodem_recv(loadbuf);
            wait(); /* 転送アプリが終了し端末アプリに制御が戻るまで待ち合わせる */
            if(size < 0) {
                puts("\nXMODEM receive error!\n");
            } else {
                puts("\nXMODEM receive succeeded.\n");
            }
        } else if(!strcmp(buf, "dump")) {   /* メモリの16進ダンプ出力 */
            puts("size: ");
            putxval(size, 0);
            puts("\n");
            dump(loadbuf, size);
        } else if(!strcmp(buf, "run")) {    /* ELF形式ファイルの実行 */
            entry_point = elf_load(loadbuf);
            if(!entry_point) {
                puts("run error!\n");
            } else {
                puts("starting from entry point: ");
                putxval((unsigned long)entry_point, 0);
                puts("\n");
                f = (void (*)(void))entry_point;
                /* ロードしたプログラムに処理を渡す */
                f();
                /* ここには返ってこない */
            }
        } else {
            puts("unknown command.\n");
        }
    }

    return 0;
}
Exemple #2
0
int main(void)
{
	static char buf[16];
	static long size = -1;
	static unsigned char *loadbuf = NULL;
	char *entry_point;
	void (*f)(void);
	extern int buffer_start;

	INTR_DISABLE;

	init();

	puts("kzload (kozos boot loader) started.\n");

	while (1) {
		puts("kzload> ");
		gets(buf);

		if (!strcmp(buf, "load")) {
			loadbuf = (char *)&buffer_start;
			size = xmodem_recv(loadbuf);
			wait();
			if (size < 0) {
				puts("\nXMODEM receive error!\n");
			} else {
				puts("\nXMODEM receive succeeded.\n");
			}
		} else if (!strcmp(buf, "dump")) {
			puts("size: ");
			putxval(size, 0);
			puts("\n");
			dump(loadbuf, size);
		} else if (!strcmp(buf, "run")) {
			entry_point = elf_load(loadbuf);
			if (!entry_point) {
				puts("run error\n");
			} else {
				puts("starting from entry point: ");
				putxval((unsigned long)entry_point, 0);
				puts("\n");
				f = (void (*)(void))entry_point;
				f();
				/* not reach here */
			}
		} else {
			puts("unknown.\n");
		}
	}

	return 0;
}
Exemple #3
0
void loadx(int argc, char *argv[])
{	
	char * p = (char *)DOWN_BIN_ADDR;
	
	if (argc >= 2)
		p = (char *)atoi(argv[1]);
	
	printf("load bin file by xmodem to address 0x%x\n", (int)p);		
			
	xmodem_recv(p);
	
	printf("\nloadx finished! \n");
}
Exemple #4
0
int main(void)
{
	static char buf[16];
	static long size = -1;
	static unsigned char *loadbuf = NULL;
	extern int buffer_start; /* This buffer is defined in the linker script */
	char *entry_point;
	void (*f)(void);

	INTR_DISABLE; /* disable interruption */
	init();

	puts("Hello World!\n");
	puts("kzload (kozos boot loader) started.\n");

	while (1) {
		puts("kzload> "); /* display of prompt */
		gets(buf); /* receipt of commands via serial */

		if (!strcmp(buf, "load")) { /* file download in XMODEM */
			loadbuf = (char *)(&buffer_start);
			size = xmodem_recv(loadbuf);
			wait();	/* Wait until transfer application terminates and terminal console can be controled. */
			if (size < 0) {
				puts("\nXMODEM receive error!\n");
			} else {
				puts("\nXMODEM receive succeeded.\n");
			}
		} else if (!strcmp(buf, "dump")) { /* hexadecimal dump of a memory */
			puts("size: ");
			putxval(size, 0);
			puts("\n");
			dump(loadbuf, size);
		} else if (!strcmp(buf, "run")) { /* execute ELF files */
			entry_point = elf_load(loadbuf); /* load ELF files to a memory */
			if (!entry_point) {
				puts("run error!\n");
			} else {
				puts("starting from entry point: ");
				putxval((unsigned long)entry_point, 0);
				puts("\n");
				f = (void (*)(void))entry_point;
				f(); /* operation is switched to the loaded program at this point */
			}
		} else {
			puts("unknown.\n");
		}
	}

	return 0;
}
Exemple #5
0
int main(
		void
		)
{
	static char buf[16];
	static long size = -1;
	static unsigned char* loadbuf = NULL;
	extern int buffer_start; /* buffer defined at ld.scr */

	init();

	puts("kzload (kozos boot loader) started.\n");

	while(1)
	{
		puts("kzload> ");
		gets(buf);

		if(strcmp(buf, "load") == 0)
		{
			loadbuf = (char*)(&buffer_start);
			size = xmodem_recv(loadbuf);
			wait();
			if(size < 0)
			{
				puts("\nXMODEM receive error!\n");
			}
			else
			{
				puts("\nXMODEM receive succeeded.\n");
			}
		}
		else if(strcmp(buf, "dump") == 0)
		{
			puts("size: ");
			putxval(size, 0);
			puts("\n");
			dump(loadbuf, size);
		}
		else if(strcmp(buf, "run") == 0)
		{
			elf_load(loadbuf);
		}
		else
		{
			puts("unknown.\n");
		}
	}

	return 0;
}
Exemple #6
0
static int receive_program(unsigned char* buf){
  unsigned char *loadbuf = (unsigned char*)buf;
  long size = xmodem_recv(loadbuf);
  wait(300000);

  if( size < 0 ){ //受信失敗
    puts("\nXMODEM receive error!\n");
    return -1;
  }

  puts("\nXMODEM receive success!\n");

  return size;
}
Exemple #7
0
int32
command_load (void)
{
  size = xmodem_recv (xmodem_recv_buffer_start_address);
  if (size < 0)
    {
      put_string ("\nXMODEM receive error!\n");
    }
  else
    {
      put_string ("\nXMODEM receive succeeded.\n");
    }
  return size;
}
Exemple #8
0
void loadx(int argc, char * argv[])
{		
	int addr = DOWNLOAD_ADDR;
	int size = 0;
	
	printf("loadx usage: loadx 0x31000000 \n");
	
	if (argc > 1)
	{
		addr = atoi(argv[1]);
	}

	size = xmodem_recv(addr);
	
	printf("loadx to addr 0x%x, total size 0x%x \n", addr, size);	
}
Exemple #9
0
void load_start( void )
{
    extern int buffer_start; /* リンカ・スクリプトで定義されているバッファ */

    loadbuf = (char *)(&buffer_start);
    size = xmodem_recv(loadbuf);
    wait(); /* 転送アプリが終了し端末アプリに制御が戻るまで待ち合わせる */

    if (size < 0) {
        puts("\nXMODEM receive error!\n");
    } else {
        puts("os size : 0x");
        putxval( size, 0 );
        puts("\nstored os address: 0x");
        putxval( (uint32)loadbuf, 8);
        puts("\nXMODEM receive succeeded.\n");
    }
}
Exemple #10
0
int main(void)
{
  static char buf[16];
  static long size = -1;
  static unsigned char *loadbuf = NULL;
  extern int buffer_start; /* リンカ・スクリプトで定義されているバッファ */

  init();

  puts("kzload (kozos boot loader) started.\n");

  while (1) {
    puts("kzload> "); /* プロンプト表示 */
    gets(buf); /* シリアルからのコマンド受信 */

    if (!strcmp(buf, "load")) { /* XMODEMでのファイルのダウンロード */
      loadbuf = (char *)(&buffer_start);
      size = xmodem_recv(loadbuf);
      wait(); /* 転送アプリが終了し端末アプリに制御が戻るまで待ち合わせる */
      if (size < 0) {
	puts("\nXMODEM receive error!\n");
      } else {
	puts("\nXMODEM receive succeeded.\n");
      }
    } else if (!strcmp(buf, "dump")) { /* メモリの16進ダンプ出力 */
      puts("size: ");
      putxval(size, 0);
      puts("\n");
      dump(loadbuf, size);
    } else if (!strcmp(buf, "run")) { /* ELF形式ファイルの実行 */
      elf_load(loadbuf); /* メモリ上に展開(ロード) */
    } else {
      puts("unknown.\n");
    }
  }

  return 0;
}
int main(void) {
  static char buf[16];
  static long size = -1;
  static unsigned char *loadbuf = NULL;
  static char *entry_point;
  void (*f)(void);
  extern int buffer_start; // バッファ領域を指すシンボル。リンカスクリプトで定義されている。

  INTR_DISABLE;
  
  init();
  puts("kzload (kozos boot loader) started.\n");

  while (1) {
    puts("kzload> ");
    gets(buf); // シリアルからのコマンド受信。

    if (!strcmp(buf, "load")) { // XMODEMでのダウンロード
      loadbuf = (char *)(&buffer_start);
      size = xmodem_recv(loadbuf);
      wait();
      if (size < 0) {
        puts("\nXMODEM receive error!\n");
      } else {
        puts("\nXMODEM receive succeeded.\n");
      }
    } else if (!strcmp(buf, "dump")) { // メモリの16進ダンプ
      puts("size: ");
      putxval(size, 0);
      puts("\n");
      dump(loadbuf, size);
    } else if (!strcmp(buf, "run")) { // ELF形式ファイルの実行
      entry_point = elf_load(loadbuf); // メモリ上に展開
      if (!entry_point) {
        puts("run error!\n");
      } else {
        puts("starting from entry point: ");
        putxval((unsigned long)entry_point, 0);
        puts("\n");
        f = (void (*)(void))entry_point;
        f(); // ロードしたプログラムに処理を渡す
        // ここには基本的に到達しない
      }
    } else {
      puts("unknown.\n");
    }
  }
  
  printval();
  puts("overwrite variables.\n");
  global_data = 0x20;
  global_bss = 0x30;
  static_data = 0x40;
  static_bss = 0x50;
  printval();
  
  while(1)
    ;
  
  return 0;
}