Пример #1
0
void __init create_root_nfs_cmdline( char *cmdline )
{
    char root_nfs_cl[] = "root=/dev/nfs nfsroot=%s:" CONFIG_ROOT_NFS_DIR
        " ip=%s:%s::%s::eth0:off rw";

    char *localip = NULL;
    char *hostip = NULL;
    char mask[16] = "";
    PNVRAM_DATA pNvramData = (PNVRAM_DATA) get_nvram_start_addr();
    char bootline[128] = "";
    char *p = bootline;

    memcpy(bootline, pNvramData->szBootline, sizeof(bootline));
    while( *p )
    {
        if( p[0] == 'e' && p[1] == '=' )
        {
            /* Found local ip address */
            p += 2;
            localip = p;
            while( *p && *p != ' ' && *p != ':' )
                p++;
            if( *p == ':' )
            {
                /* Found network mask (eg FFFFFF00 */
                *p++ = '\0';
                sprintf( mask, "%u.%u.%u.%u", HEXBYTE(p), HEXBYTE(p + 2),
                HEXBYTE(p + 4), HEXBYTE(p + 6) );
                p += 4;
            }
            else if( *p == ' ' )
                *p++ = '\0';
        }
        else if( p[0] == 'h' && p[1] == '=' )
        {
            /* Found host ip address */
            p += 2;
            hostip = p;
            while( *p && *p != ' ' )
                p++;
            if( *p == ' ' )
                    *p++ = '\0';
        }
        else 
            p++;
    }

    if( localip && hostip ) 
        sprintf( cmdline, root_nfs_cl, hostip, localip, hostip, mask );
}
Пример #2
0
cStringerStream& operator << (cStringerStream& out,
                              const cNtHeader& object)
{
    uint i;

    out << "cNtHeader memory dump" << endl;
    out << "=====================" << endl << endl;

    /* Start printing the content of the cNtHeaders */
    out << "FileHeader" << endl;
    out << "----------" << endl;
    out << "     Machine:              ";
    switch (object.FileHeader.Machine)
    {
    case IMAGE_FILE_MACHINE_I386:    out << "Intel 32 bit" << endl; break;
    case IMAGE_FILE_MACHINE_IA64:    out << "Intel 64 bit" << endl; break;
    case IMAGE_FILE_MACHINE_ALPHA:   out << "DEC Alpha "   << endl; break;
    case IMAGE_FILE_MACHINE_POWERPC: out << "Power PC"     << endl; break;
    default: out << "Unknown - " << HEXWORD(object.FileHeader.Machine) << endl; break;
    }

    out << "     NumberOfSections:     " << (uint)object.FileHeader.NumberOfSections << endl;
    out << "     TimeDateStamp:        " << HEXDWORD(object.FileHeader.TimeDateStamp) << endl;
    out << "     PointerToSymbolTable: " << HEXDWORD(object.FileHeader.PointerToSymbolTable) << endl;
    out << "     NumberOfSymbols:      " << (uint)object.FileHeader.NumberOfSymbols << endl;
    out << "     SizeOfOptionalHeader: " << (uint)object.FileHeader.SizeOfOptionalHeader << endl;

    /* Print a list of all the flags avaliable */
    out << "     Characteristics:      " << HEXWORD(object.FileHeader.Characteristics) << endl;
    for (i = 0; i < 16; i++)
    {
        if ((object.FileHeader.Characteristics & (1 << i)) != 0)
        {
            out << "                           ";
            out << cHumanStringTranslation::getWindowsImageFileCharacter(1 << i) << endl;
        }
    }

    out << endl;
    out << "OptionalHeader" << endl;
    out << "--------------" << endl;
    out << "     Magic:               " << HEXWORD(object.OptionalHeader.Magic) << endl;
    out << "     Linker version:      " << HEXBYTE(object.OptionalHeader.MajorLinkerVersion) <<  ":" << HEXBYTE(object.OptionalHeader.MinorLinkerVersion) << endl;
    out << "     Size of code:        " << (uint)object.OptionalHeader.SizeOfCode << endl;
    out << "     SzInitializedData:   " << (uint)object.OptionalHeader.SizeOfInitializedData << endl;
    out << "     SzUninitialiezdData: " << (uint)object.OptionalHeader.SizeOfUninitializedData << endl;
    out << "     AddressOfEntryPoint: " << HEXDWORD(object.OptionalHeader.AddressOfEntryPoint + object.OptionalHeader.ImageBase) << endl;
    out << "     BaseOfCode:          " << HEXDWORD(object.OptionalHeader.BaseOfCode          + object.OptionalHeader.ImageBase) << endl;
    out << "     BaseOfData:          " << HEXDWORD(object.OptionalHeader.BaseOfData          + object.OptionalHeader.ImageBase) << endl;
    out << "     ImageBase:           " << HEXDWORD(object.OptionalHeader.ImageBase) << endl;
    out << "     SectionAlignment:    " << (uint)object.OptionalHeader.SectionAlignment  << endl;
    out << "     FileAlignment:       " << (uint)object.OptionalHeader.FileAlignment << endl;
    out << "     OS version:          " << (uint)object.OptionalHeader.MajorOperatingSystemVersion << "." << (uint)object.OptionalHeader.MinorOperatingSystemVersion << endl;
    out << "     Image version:       " << (uint)object.OptionalHeader.MajorImageVersion << "." << (uint)object.OptionalHeader.MinorImageVersion << endl;
    out << "     Sunsystem version:   " << (uint)object.OptionalHeader.MajorSubsystemVersion << "." << (uint)object.OptionalHeader.MinorSubsystemVersion << endl;
    out << "     Win32VersionValue:   " << (uint)object.OptionalHeader.Win32VersionValue  <<endl;
    out << "     SizeOfImage:         " << HEXDWORD(object.OptionalHeader.SizeOfImage) << "  " << (uint)object.OptionalHeader.SizeOfImage << endl;
    out << "     SizeOfHeaders:       " << (uint)object.OptionalHeader.SizeOfHeaders << endl;
    out << "     CheckSum:            " << HEXDWORD(object.OptionalHeader.CheckSum) << endl;
    out << "     Subsystem:           ";
    switch (object.OptionalHeader.Subsystem)
    {
    case IMAGE_SUBSYSTEM_WINDOWS_GUI:    out << "Windows GUI"; break;
    case IMAGE_SUBSYSTEM_WINDOWS_CUI:    out << "Windows CUI"; break;
    case IMAGE_SUBSYSTEM_POSIX_CUI:      out << "Posix CUI"; break;
    case IMAGE_SUBSYSTEM_NATIVE:         out << "No subsystem"; break;
    case IMAGE_SUBSYSTEM_NATIVE_WINDOWS: out << "Native windows"; break;
    case IMAGE_SUBSYSTEM_WINDOWS_CE_GUI: out << "Windows CE GUI"; break;
    default: out << "Unkwon subsystem: " << HEXWORD(object.OptionalHeader.Subsystem);
    }
    out << endl;
    out << "     SizeOfStackReserve:  " << HEXDWORD(object.OptionalHeader.SizeOfStackReserve)  << endl;
    out << "     SizeOfStackCommit:   " << HEXDWORD(object.OptionalHeader.SizeOfStackCommit)   << endl;
    out << "     SizeOfHeapReserve:   " << HEXDWORD(object.OptionalHeader.SizeOfHeapReserve)   << endl;
    out << "     SizeOfHeapCommit:    " << HEXDWORD(object.OptionalHeader.SizeOfHeapCommit)    << endl;
    out << "     LoaderFlags:         " << (uint)object.OptionalHeader.LoaderFlags         << endl;
    out << "     NumberOfRvaAndSizes: " << (uint)object.OptionalHeader.NumberOfRvaAndSizes << endl;

    for (i = 0; i < IMAGE_NUMBEROF_DIRECTORY_ENTRIES; i++)
    {
        if (object.OptionalHeader.DataDirectory[i].Size != 0)
        {
            /* Print only the active directories */
            out << "Dir#" << HEXBYTE(i) << " size: "<<
                HEXDWORD(object.OptionalHeader.DataDirectory[i].Size) <<
                " location: " << HEXDWORD(object.OptionalHeader.DataDirectory[i].VirtualAddress + object.OptionalHeader.ImageBase) <<
                " - " << cHumanStringTranslation::getWindowsDirectoryName(i) << endl;
        }
    }

    out << endl << endl;
    out << endl << endl;
    out << "Sections" << endl;
    out << "========" << endl << endl;
    cList<cSectionPtr>::iterator itr  = object.m_sections.begin();
    for (; itr != object.m_sections.end(); ++itr)
    {
        cNtSectionHeader* section = (cNtSectionHeader*)((*itr).getPointer());
        out << *section;
        out << endl;
    }

    return out;
}
static void __init create_cmdline(char *cmdline)
{
	char boot_type = '\0', mask[16] = "";
	char bootline[NVRAM_BOOTLINE_LEN] = "";
	char *localip = NULL, *hostip = NULL, *p = bootline, *rdaddr = NULL;

	/*
	 * too early in bootup sequence to acquire spinlock, not needed anyways
	 * only the kernel is running at this point
	 */
	kerSysNvRamGetBootlineLocked(bootline);

	while (*p) {
		if (p[0] == 'e' && p[1] == '=') {
			/* Found local ip address */
			p += 2;
			localip = p;
			while (*p && *p != ' ' && *p != ':')
				p++;
			if (*p == ':') {
				/* Found network mask (eg FFFFFF00 */
				*p++ = '\0';
				sprintf(mask, "%u.%u.%u.%u", HEXBYTE(p),
					HEXBYTE(p + 2),
				HEXBYTE(p + 4), HEXBYTE(p + 6));
				p += 4;
			} else if (*p == ' ')
				*p++ = '\0';
		} else if (p[0] == 'h' && p[1] == '=') {
			/* Found host ip address */
			p += 2;
			hostip = p;
			while (*p && *p != ' ')
				p++;
			if (*p == ' ')
				*p++ = '\0';
		} else if (p[0] == 'r' && p[1] == '=') {
			/* Found boot type */
			p += 2;
			boot_type = *p;
			while (*p && *p != ' ')
				p++;
			if (*p == ' ')
				*p++ = '\0';
		} else if (p[0] == 'a' && p[1] == '=') {
			p += 2;
			rdaddr = p;
			while (*p && *p != ' ')
				p++;
			if (*p == ' ')
				*p++ = '\0';
		} else 
			p++;
	}

	if (boot_type == 'h' && localip && hostip) {
		/* Boot from NFS with proper IP addresses */
		sprintf(cmdline, "root=/dev/nfs nfsroot=%s:" CONFIG_ROOT_NFS_DIR
				" ip=%s:%s::%s::eth0:off rw",
				hostip, localip, hostip, mask);
	} else if (boot_type == 'c') {
		/* boot from tftp */
		sprintf(cmdline, "root=/dev/ram0 ro rd_start=%s rd_size=0x%x",
				rdaddr, RAMDISK_SIZE << 10);
	} else {
		/* go with the default, boot from flash */
#ifdef CONFIG_ROOT_FLASHFS
		strcpy(cmdline, CONFIG_ROOT_FLASHFS);
#endif
	}
}