Boot在华恒S3C2410EDU板子上的移植(5)

params->u1.s.page_size = LINUX_PAGE_SIZE;
params->u1.s.nr_pages = (DRAM_SIZE >> LINUX_PAGE_SHIFT);
#if 0
params->u1.s.page_size = LINUX_PAGE_SIZE;
params->u1.s.nr_pages = (dram_size >> LINUX_PAGE_SHIFT);
params->u1.s.ramdisk_size = 0;
params->u1.s.rootdev = rootdev;
params->u1.s.flags = 0;

#endif
/* If use ramdisk */
params->u1.s.initrd_start = 0xC0800000 ;
params->u1.s.initrd_size = 0x440000;
params->u1.s.rd_start = 0;

/* set linux command line */
if (linux_cmd == NULL) {
printf("Wrong magic: could not found linux command line/n");
} else {
memcpy(params->commandline, linux_cmd, strlen(linux_cmd) + 1);
}
}
以及几个宏变量的定义。
在cmd_boot.c中将do_go函数改为
int do_go (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
ulongaddr, rc;
int     rcode = 0;

if (argc < 2) {
printf ("Usage:/n%s/n", cmdtp->usage);
return 1;
}

addr = simple_strtoul(argv[1], NULL, 16);

printf ("## Starting application at 0x%08lx .../n", addr);

printf("Start linux ../n");
setup_linux_param(/*boot_mem_base*/0x30000000 + 0x100);
call_linux(0, 0xc1, addr);
printf("End/n");
rc = ((ulong (*)(int, char *[]))addr) (--argc, &argv[1]);
if (rc != 0) rcode = 1;

printf ("## Application terminated, rc = 0x%lx/n", rc);
return rcode;
}
就ok啦。
重新编译后,我的linux和ramdisk.image.gz就可以欢快的跑起来啦。
哈,不过这是2.4的内核,把armlinux.c中的ttyS0改为ttySAC0,在用论坛上下的zImage.2410.2.6测试一下,哈,2.6也能跑啦。
不过bootm的问题我无法解决。
做了一个uImage。Tftp 30008000后,出现:
## Booting image at 30008000 ...
  Image Name:
  Created:      2007-01-01  12:18:08 UTC
  Image Type:   ARM Linux Kernel Image (gzip compressed)
  Data Size:    893780 Bytes = 872.8 kB
  Load Address: 30008000
  Entry Point:  30008000
  Verifying Checksum ... OK
  Uncompressing Kernel Image ... Error: inflate() returned -3
GUNZIP ERROR - must RESET board to recover

看了论坛上的旧帖,说是地址覆盖了。故改为31000000 .tftp后,bootm 31000000,呵,内核也能跑以来,可是莫名奇妙的是那些打印信息不在console上显示,怎么全都跑到lcd上显示去了。。。我晕。。就是把原来的zImage做成的uImage,解压后两个应该是一样的啊。
晕。。。不搞了。。还是先用go继续做吧。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwgyfy.html