2010/1/8 Patrick Georgi patrick@georgi-clan.de:
How long did you wait? it _might_ be that it merely takes a very long time. That must of course be fixed, but is not the same problem as a hanging system.
I wait for about 15-20 min and nothing special. I put some 'postcode' functions for debug capability and I've found out that it hangs on 'cbfs_load_stage' function when it calls cbfs_find_file:
---------[ lib/cbfs.c ]-------- // ...
void * cbfs_load_stage(const char *name) { struct cbfs_stage *stage = (struct cbfs_stage *) cbfs_find_file(name, CBFS_TYPE_STAGE); /* this is a mess. There is no ntohll. */ /* for now, assume compatible byte order until we solve this. */ u32 entry;
outb(0xaa, 0x80); // <--------------- It doesn't occur
if (stage == NULL) return (void *) -1;
printk_info("Stage: loading %s @ 0x%x (%d bytes), entry @ 0x%llx\n", name, (u32) stage->load, stage->memlen, stage->entry); memset((void *) (u32) stage->load, 0, stage->memlen);
if (cbfs_decompress(stage->compression, ((unsigned char *) stage) + sizeof(struct cbfs_stage), (void *) (u32) stage->load, stage->len)) return (void *) -1;
printk_debug("Stage: done loading.\n");
entry = stage->entry; // entry = ntohl((u32) stage->entry);
return (void *) entry; }
// ... ---------------------------------------------------
On Monday I will test the cbfs_find_file function. I hope I will found something.
Have a good weekend!