Serenity Operating System
at master 49 lines 1.7 kB view raw
1/* 2 * Copyright (c) 2021, Andrew Kaster <akaster@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <AK/DeprecatedString.h> 8#include <LibCore/ArgsParser.h> 9#include <LibCore/MappedFile.h> 10#include <LibCore/System.h> 11#include <LibDeviceTree/FlattenedDeviceTree.h> 12#include <LibDeviceTree/Validation.h> 13#include <LibMain/Main.h> 14 15ErrorOr<int> serenity_main(Main::Arguments arguments) 16{ 17 TRY(Core::System::pledge("stdio rpath")); 18 19 DeprecatedString filename; 20 21 Core::ArgsParser args; 22 args.add_positional_argument(filename, "File to process", "file", Core::ArgsParser::Required::Yes); 23 args.parse(arguments); 24 25 // FIXME: Figure out how to do this sanely from stdin 26 auto file = TRY(Core::MappedFile::map(filename)); 27 28 if (file->size() < sizeof(DeviceTree::FlattenedDeviceTreeHeader)) { 29 warnln("Not enough data in {} to contain a device tree header!", filename); 30 return 1; 31 } 32 33 auto const* fdt_header = reinterpret_cast<DeviceTree::FlattenedDeviceTreeHeader const*>(file->data()); 34 auto bytes = ReadonlyBytes { file->data(), file->size() }; 35 36 TRY(DeviceTree::dump(*fdt_header, bytes)); 37 38 auto compatible = TRY(DeviceTree::slow_get_property<StringView>("/compatible"sv, *fdt_header, bytes)); 39 auto compatible_strings = compatible.split_view('\0'); 40 dbgln("compatible with: {}", compatible_strings); 41 42 auto bootargs = TRY(DeviceTree::slow_get_property<StringView>("/chosen/bootargs"sv, *fdt_header, bytes)); 43 dbgln("bootargs: {}", bootargs); 44 45 auto cpu_compatible = TRY(DeviceTree::slow_get_property<StringView>("/cpus/cpu@0/compatible"sv, *fdt_header, bytes)); 46 dbgln("cpu0 compatible: {}", cpu_compatible); 47 48 return 0; 49}