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; }
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; }
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"); }
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; }
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; }
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; }
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; }
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); }
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"); } }
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; }