void boot_kernel(void) { void (*theKernel)(int zero, int arch, unsigned int params); /* 将Linux内核读取到DDR中 */ printf("\n\rRead kernel from Nand Flash\n\r"); nand_read(0x21000000, 0x400000, 0x800000); /* 设置启动参数 */ printf("Set boot params\n\r"); init_taglist(); /* 跳转执行*/ printf("Boot kernel...\n\r"); theKernel = (void (*)(int, int, unsigned int))0x21000040;/* Linux 内核入口地址 */ theKernel(0, 3466, 0x22000000); /* 第一个参数是0,第二个参数是机器码,第三个参数是启动参数地址 */ }
int Main(void) { char *cmd[8]; int cmdcnt; char buff[32]; init(); start(); puts(help[0]); init_taglist(0x40000000); while(1) { puts("IMX233# "); cmdcnt = cmdline(cmd); if (cmdcnt == 1 && strcmp(cmd[0], "h") == 0) { int i; for (i = 0; i < 3; i++) { puts("\r\n"); puts(help[i]); } } if (cmdcnt == 2 && strcmp(cmd[0], "get") == 0) { cmd_get(cmd[1]); } if (cmdcnt == 2 && strcmp(cmd[0], "go") == 0) { cmd_go(cmd[1]); } if (cmdcnt == 1 && strcmp(cmd[0], "ddr") == 0) { ddrtest(); } putchr('\n'); putchr('\r'); } return 0; }
void down_kernel(void) { void (*theKernel)(int zero, int arch, unsigned int params); printf("download linux kernel through ymodem\n\r"); char *addr = (char *)0x21000000; ymodem_recv(addr); /* 设置启动参数 */ printf("Set boot params\n\r"); init_taglist(); /* 跳转执行*/ printf("Boot kernel...\n\r"); theKernel = (void (*)(int, int, unsigned int))0x21000040;/* Linux 内核入口地址 */ theKernel(0, 3466, 0x22000000); /* 第一个参数是0,第二个参数是机器码,第三个参数是启动参数地址 */ }