#include "KernelShell.class.h" #include #include #include #include #include #include #include void KernelShell::devices(Vector& args) { Vector dev = Dev::findDevices(); *m_vt << " - Detected devices :\n"; for (u32int i = 0; i < dev.size(); i++) { *m_vt << " - " << dev[i]->getClass(); m_vt->setCursorCol(25); *m_vt << dev[i]->getName() << "\n"; } } void KernelShell::loadkeys(Vector& args) { if (args.size() == 1) { *m_vt << "Error : no argument specified.\n"; } else { if (!Kbd::loadKeymap(args[1])) { *m_vt << "Error while loading keymap " << args[1] << ".\n"; } } } void KernelShell::free(Vector& args) { u32int frames = PhysMem::total(), freef = PhysMem::free(); *m_vt << " - Free frames : " << (s32int)freef << " (" << (s32int)(freef * 4 / 1024) << "Mo) of " << (s32int)frames << " (" << (s32int)(frames * 4 / 1024) << "Mo).\n"; u32int kh = Mem::kheapSize(), freek = Mem::kheapFree(); *m_vt << " - Kernel heap free : " << (s32int)(freek / 1024 / 1024) << "Mo (" << (s32int)(freek / 1024) << "Ko) of " << (s32int)(kh / 1024 / 1024) << "Mo (" << (s32int)(kh / 1024) << "Ko).\n"; } void KernelShell::uptime(Vector& args) { *m_vt << " - Uptime : " << (s32int)(Time::uptime()) << "s.\n"; } void KernelShell::part(Vector& args) { *m_vt << " * ID\tClass Name\n"; for (u32int i = 0; i < Part::devices.size(); i++) { *m_vt << " - " << (s32int)i << "\t"; if (Part::devices[i] == 0) { *m_vt << "[none]\n"; } else { *m_vt << Part::devices[i]->getClass(); m_vt->setCursorCol(33); *m_vt << Part::devices[i]->getName() << "\n"; for (u32int j = 0; j < Part::partitions.size(); j++) { if (Part::partitions[j]->getDevice() == Part::devices[i]) { *m_vt << "\t - Partition " << (s32int)Part::partitions[j]->getPartNumber() << ", start at " << (s32int)Part::partitions[j]->getStartBlock() << ", size " << (s32int)Part::partitions[j]->getBlockCount() << "\n"; } } } } } void KernelShell::mount(Vector& args) { if (args.size() == 1) { for (u32int i = 0; i < VFS::filesystems.size(); i++) { *m_vt << VFS::filesystems[i]->getDevDescription() << " on " << VFS::path(VFS::filesystems[i]->getRootNode()) << "\n"; } } else if (args.size() == 2) { if (args[1] == "help") { *m_vt << "Usage: mount [help|]\n" << "Options formats :\n" << " - :ramfs\n" << " - :[]::[:[:[ro|rw]]]\n" << "You can have a list of available block devices and partitions by typing 'part'.\n"; } else { if (VFS::mount(args[1], m_vt)) *m_vt << "Ok, filesystem mounted.\n"; } } else { *m_vt << "Usage: mount [ \n"; } } void KernelShell::readblock(Vector& args) { if (args.size() == 3) { Vector devcs = Dev::findDevices("block"); u32int id = args[1].toInt(), block = args[2].toInt(); if (id < devcs.size()) { BlockDevice* bdev = (BlockDevice*)devcs[id]; *m_vt << "Block " << block << " from device " << bdev->getName() << " (" << bdev->getClass() << ")\n"; u8int* buff = (u8int*)Mem::alloc(bdev->blockSize()); bdev->readBlocks(block, 1, buff); m_vt->hexDump(buff, 32); Mem::free(buff); } else { *m_vt << "Block device #" << id << " does not exist.\n"; } } else { *m_vt << "Usage: readblock \n"; } }