Задать вопрос
  • Как link`овать fasm + c(++)?

    jcmvbkbc
    @jcmvbkbc
    судя по сохраненному temp файлу он ругается на .cfi_offset 3, -12

    Zailox, ok, мне gcc таких смещений не генерирует, всё это барахло можно отключить добавив опцию -fno-asynchronous-unwind-tables в командную строку gcc. Я запушил патч с этим изменением в репу из ответа.
    Написано
  • Как загрузить VirtualBox EFI в QEMU?

    jcmvbkbc
    @jcmvbkbc
    -drive if=pflash,file=Downloads/VBoxEFI64.fd,readonly=true

    что такое Downloads/VBoxEFI64.fd и чего ты от этой командной строки ожидаешь, что x86_64 вдруг возьмёт и загрузится с параллельного FLASH-чипа?
    Написано
  • Как link`овать fasm + c(++)?

    jcmvbkbc
    @jcmvbkbc
    сейчас протестирую.

    Zailox, как успехи?
    Написано
  • Как link`овать fasm + c(++)?

    jcmvbkbc
    @jcmvbkbc
    мне главное из под ассемблера запустить уже другое ядро, на Си

    Zailox, для этого ассемблер-то и не нужен. Можно собрать свой код как multiboot приложение и загружать его напрямую в QEMU или с помощью u-boot на реальном железе. Или как UEFI приложение. В обоих случаях код приложения стартует сразу в защищённом режиме.
    Написано
  • Как link`овать fasm + c(++)?

    jcmvbkbc
    @jcmvbkbc
    Zailox, написал ответ.
    Написано
  • А return 0(1) * _getch(), есть ли смысл от такой конструкции?

    jcmvbkbc
    @jcmvbkbc
    А ещё 0*что то может быть выкинуто при оптимизации и никакого ожидания ввода не останется.

    rPman, не может оптимизатор выкинуть вызов функции о которой ничего неизвестно.
    Написано
  • Как link`овать fasm + c(++)?

    jcmvbkbc
    @jcmvbkbc
    я починил эту ос, теперь хотел понемногу добавлять C

    Zailox, поделись ссылкой на код?
    Написано
  • Как link`овать fasm + c(++)?

    jcmvbkbc
    @jcmvbkbc
    Zailox Если ты приведёшь пример в котором ты хочешь сделать такую линковку я могу показать как это сделать конкретно в твоём примере.
    Написано
  • Запись только в конец файла?

    jcmvbkbc
    @jcmvbkbc
    Vitsliputsli, флаг "a" для fopen() транслируется в флаг O_APPEND для open(), который гарантирует, что запись всегда происходит в конец файла, вне зависимости от внешних воздействий на этот файл. См. https://man7.org/linux/man-pages/man2/open.2.html
    Написано
  • Интерактивный скрипт с read при запуске системы (debian). Как?

    jcmvbkbc
    @jcmvbkbc
    Во время загрузки не работает интерактивный ввод

    чего это "не работает"? всякие пароли от LUKS на ура интерактивно запрашиваются и вводятся.
    Написано
  • Какой atomic::Ordering нужен в этих ситуациях?

    jcmvbkbc
    @jcmvbkbc
    мы довольно забавно обменялись очевидными фактами

    Eugene Usachev, ок, давай попробуем ещё раз, сначала:

    Предположим, что надо написать Once только с двумя значениями (WasNotCalled = 0, WasCalled = 1). Для метод call может использовать swap и вернуть предыдущее значение. Но какой порядок нужно использовать в этом swap?


    В такой постановке вопрос не имеет смысла, потому что для атомарного изменения одной переменной порядок не имеет значения. Порядок имеет значение, когда надо установить отношение между доступом к памяти и чем-то ещё и в зависимости от этого отношения он может быть разным.

    Например, если этот once используется, чтобы гарантировать однократную запись в какой-нибудь регистр. Т.е. наблюдение once = 0 говорит о том, что никто не записал и пока не планирует записывать, а once = 1 говорит о том, что запись уже произошла или произойдёт в будущем. Это можно реализовать как CAS 0->1 для once + последующая запись в регистр, если CAS был успешен. Тогда нужно использовать как минимум release при записи в once и consume при чтении из него, чтобы эти две операции синхронизировались друг с другом при исполнении разными агентами. А так же гарантировать, что запись в регистр не будет переупорядочена с записью в once, например барьером между записью в once и записью в регистр.

    Я уверен, что двумя значениями once (0 и 1) нельзя обеспечить одновременно единственность вызова и предоставить информацию о том, что вызов уже совершён. Для этого нужно как минимум три значения.
    Написано
  • Какой atomic::Ordering нужен в этих ситуациях?

    jcmvbkbc
    @jcmvbkbc
    Eugene Usachev, говоря, что для CAS это единственная опция я имел в виду вот что. Acquire говорит о том, что операция чтения должна обозреть произошедшие записи в память, Release говорит о том, что операция записи должна опубликовать произведённые изменения. Поскольку CAS -- это обе эти операции, то для него имееют смысл только Relaxed и Acquire + Release, что эквивалентно SeqCst. Relaxed -- это по сути ничего, ни упорядочивания, ни публикации изменений. Acquire и Release имеет смысл применять поотдельности только тогда, когда между ними есть что-то ещё. Это не твой первый случай (где нужно просто атомарно установить значение 1 если было 0 и вернуть, что было). И это не твой второй случай (где нужно в одном месте атомарно увеличить значение и вернуть что было, а в другом -- атомарно уменьшить).
    Написано
  • Проблема с обработкой клавиатурных прерываний в QEMU?

    jcmvbkbc
    @jcmvbkbc
    Вот этот кусок
    int scan_code = 0;   
        asm(
            "push %%eax\n"
            "xor %%eax, %%eax\n"
            "in $0x60, %%al\n"                // принимаю сканкод
            "movl %%eax, -12(%%ebp)\n"
            "pop %%eax\n"
            :
            :
            :
        );

    лучше заменить на
    unsigned char scan_code = 0;
            asm(
                "in $0x60, %0"                // принимаю сканкод
                : "=a"(scan_code)
                :
                :
               );

    чтобы потом не гоняться за этой переменной по стеку
    Написано
  • Из-за чего возникает kernel panic при добавлении утилит?

    jcmvbkbc
    @jcmvbkbc
    После этого ядро стало выдавать ошибку

    Ты не написал как ты загружаешь это ядро и как ты ему даёшь свой initrd. Из приведённого хвоста лога можно догадаться, что как-то наподобие
    qemu-system-x86_64 -kernel kernel-10 -nographic -serial stdio -monitor none -append 'console=ttyS0'
    но ты лучше напиши сам и подробно.
    Написано
  • Как создать файл без формата с скомпилированным C кодом?

    jcmvbkbc
    @jcmvbkbc
    в эмуляторе QEMU запускаю

    nnGot583, в QEMU можно прямо ELF запускать
    Написано
  • Что не так с этим кодом? Или у lvgl сломан SDL рендерер?

    jcmvbkbc
    @jcmvbkbc
    Catmengi, в этом коде есть одна проблема: таймер может начать работать до того, как будут созданы виджеты, но после их создания нет никакой команды перерисовки. Я переключил драйвер дисплея на linux framebuffer и в зависимости от скорости работы потоков я вижу либо белый экран на своём устройстве, либо синий с надписью. Если таймер запускать синхронно в основном потоке после создания виджетов, то приложение всегда работает правильно.
    Написано
  • Что не так с этим кодом? Или у lvgl сломан SDL рендерер?

    jcmvbkbc
    @jcmvbkbc
    изменены только COLOR_DEPTH на 24

    Если я делаю такое изменение в конфиге и всё перестраиваю, то окошко приложения появляется таким же, как и раньше.
    Написано
  • Что не так с этим кодом? Или у lvgl сломан SDL рендерер?

    jcmvbkbc
    @jcmvbkbc
    Что за платформа? Как сконфигурирован/установлен LVGL?
    Написано
  • STM32 общается с микросхемой по SPI. Считываем регистр. Почему вместо ведомого снова говорит мастер?

    jcmvbkbc
    @jcmvbkbc
    какие вопросы можно было бы задать модели, что бы и ответ не подсказать и понять, на сколько глубоко она понимает это?

    rPman, я бы спрашивал что-то вроде "в каком состоянии находятся линии MISO, MOSI, SCK и CS на момент времени отмеченный вертикальной зелёной пунктирной линией" (MISO -- низкий уровень, MOSI -- высокий, SCK -- либо высокий, либо нарастающий фронт, CS -- низкий) или "какому по счёту переданному биту соответствует вертикальная зелёная пунктирная линия" (восьмому если считать с единицы, поскольку это восьмой нарастающий фронт SCK).
    Написано
  • STM32 общается с микросхемой по SPI. Считываем регистр. Почему вместо ведомого снова говорит мастер?

    jcmvbkbc
    @jcmvbkbc
    rPman, похоже, что он не видит, не обращает внимания или не понимает деталей картинки, а ориентируется на какие-то крупные блоки. Если он решил, что передаваемые данные правильно расшифрованы (непонятно почему), то из этого сразу следует и полярность и фаза сигнала, а если бы он посмотрел на сигналы то у него возник бы вопрос с порядком битов.
    Написано