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