Зачастую в процессе разработки собственных устройств или моддинга уже существующих, встаёт задача выполнения стороннего кода: будь то ваши собственные программы с SD-флэшек, или программы, написанные другими пользователями с помощью SDK для вашего устройства. Тема компиляторов и кодогенерации достаточно сложная: чтобы просто загрузить ELF или EXE (PE) программу, вам нужно досконально разбираться в особенностях вашей архитектуры: что такое ABI, релокации, GOT, отличие -fPIE от -fPIC, как писать скрипты для ld и т. п. Недавно я копал SDK для первых версий Symbian и основываясь на решениях из этой ОС понял, каким образом можно сделать крайне «дешевую» загрузку любого нативного кода практически на любом микроконтроллере, совершенно не вникая в особенности кодогенерации под неё! Сегодня мы с вами: узнаем, что происходит в процессе загрузки программы ядром Linux, рассмотрим концепцию, предложенную Symbian Foundation и реализуем её на практике для относительно малоизвестной архитектуры — XTensa (хотя она используется в ESP32, детали её реализации «под капотом» для многих остаются загадкой). Интересно? Тогда добро пожаловать под кат!
Читать полностью »
Рубрика «системное программирование»
Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI?
2024-01-05 в 8:01, admin, рубрики: Atmega, attiny, avr, bodyawm_ништячки, C, c++, cc, dll, elf, esp32, esp8266, exe, executable, gcc, gnu ld, ld, linker, pic, timeweb_статьи, xtensa, бинарные файлы, загрузчик, исполняемый файл, компоновщик, микроконтроллеры, микропроцессоры, программа, программы, системное программированиеZig для меня — это новый C
2023-08-07 в 13:47, admin, рубрики: C, raylib, zig, Программирование, системное программированиеВводное слово
По случаю выхода версии 0.11.0 языка Zig я решил написать статью о том, что привлекло меня в языке, что мне в нём нравится. Сам язык Zig имеет ряд интересных решений, которые выделяют его на фоне других «убийц» языка C. Коротко:
-
встроенная система сборки;
-
прямое использование заголовочных файлов написанных на C;
-
компиляция кода написанного на C компилятором Zig;
Как делается OpenSource: личный опыт
2023-07-29 в 9:45, admin, рубрики: open source, opensourse, личный опыт, Разработка под Linux, системное программированиеЯ - автор двух пакетов, входящих более-менее во все дистрибутивы Linux: sane-airscan и ipp-usb.
Кроме того, sane-airscan входит во все основные дистрибутивы BSD (FreeBSD, NetBSD и OpenBSD) и в ChromeOS. ipp-usb в ChromeOS не взяли потому, что он написан на Go, а у них там очень жестко с размером исполняемых файлов, вместо этого они написали свое на Rust, но предпочли бы взять моё изделие, если бы могли. Совсем недавно появился порт ipp-usb на FreeBSD, вероятно, другие BSD тоже скоро подтянутся.
Старый софт, LPT и современное железо
2023-04-07 в 4:17, admin, рубрики: avr, ECP, epp, lpt, orange, Программирование, программирование микроконтроллеров, реверс-инжиниринг, системное программированиеВводная
В своей прошлой статье я не был полностью честен. Перед тем, как получить рабочее устройство, я много раз проверял как мой код работает, перезаписывая его на многоразовую флеш AT28С64. И с самого начала знал что отлаживаться придется на железе, а потому встал вопрос программатора параллельных EEPROM.
Некогда крайне востребованные, а ныне необходимые только для редких специфических задач, эти программаторы стоят неприлично дорого (на этот раз серьезно). Есть бюджетные варианты, например собрать такой программатор на основе ардуины (но не весело) или быстро изобрести решение самому (но лень писать софт).
Удивительное рядом. Как устроен буфер обмена в Windows и Linux
2023-03-22 в 9:00, admin, рубрики: CopyQ, MacOS, ruvds_статьи, Wayland, X11, Блог компании RUVDS.com, буфер обмена, Разработка под Linux, разработка под windows, системное программирование, СофтБуфер обмена — один из основных элементов GUI, но он сложен в реализации. Подводных камней настолько много, что вы больше никогда не сможете произнести слово «копипаст» с презрительным выражением. Есть тысячи приложений и форматов данных. Невозможно обеспечить полную конвертацию всего во всё.
В некоторых случаях данные вообще нигде не сохраняются по нажатию Ctrl+C. И по нажатию Ctrl+V будет возвращён NULL
. Shit happens, как говорится…
Читать полностью »
KVM: Что такое Kernel-based Virtual Machine?
2023-03-10 в 16:20, admin, рубрики: C, kvm, qemu-kvm, vt-x, аппаратная виртуализация, виртуализация, виртуальные машины, Программирование, Разработка под Linux, системное программированиеНачнем с простого вопроса:
Что означает QEMU/KVM или QEMU-KVM?
Можно ответить - это QEMU + KVM или qemu-system, запущенный с kvm в качестве ускорителя. Но в какой-то степени это еще и анахронизм, так как с появлением KVM его разработчики для интеграции с QEMU поддерживали отдельный форк qemu-kvm, но начиная с QEMU версии 1.3Читать полностью »
Сеть виновата
2023-02-17 в 18:46, admin, рубрики: devops, ECMP, ethernet, IP, network technologies, networks, Блог компании Southbridge, Сетевые технологии, сети, системное программированиеПривет. Я Марат Сибгатулин — сетевик в Яндексе, ведущий подкаста linkmeup, автор серии книг «Сети для самых маленьких» и спикер курса Слёрм Сети для DevOps, который мы сделали совместно с linkmeup.
Сегодняшний рассказ будет про несколько органических проблем современных сетевых технологий.
Boson — разработка СУБД «с нуля» (часть II)
2023-01-28 в 2:52, admin, рубрики: c++, Алгоритмы, базы данных, двусвязный список, записи в базе, системное программирование, хобби, хранение данных, хранилище1. Введение
В первой части статьи мы обсуждали разработку самого нижнего слоя СУБД Boson - CachedFileIOЧитать полностью »
Величайшие программисты XXI века. Марк Руссинович и его 65 системных утилит
2023-01-16 в 9:00, admin, рубрики: ruvds_статьи, Блог компании RUVDS.com, взлом Windows, разработка под windows, системное администрирование, системное программирование, СофтИ здесь мы подходим к личности автора, талантливого и суперпродуктивного программиста Марка Руссиновича. Он показал, что один умный парень способен интеллектуально продавить мегакорпорацию. И той придётся заплатить ему огромные деньги, и даже взять на работу. Потому что повторить его программы она не сумела…
Читать полностью »
Контроллер CH579. Начинаем работу и избавляемся от закрытой сетевой библиотеки
2023-01-13 в 9:02, admin, рубрики: Ghidra, выравнивание данных, декомпилятор, Компьютерное железо, Контроллер CH579, программирование микроконтроллеров, сетевые библиотеки, системное программированиеСегодняшняя статья – не восклицание: «Смотрите, какой мне красивый проц попался». Это скорее просто упорядочивание накопленных сведений о конкретном процессоре CH579. Вдруг кому пригодится. Ну, и, если через годы мне потребуется, я сам буду восстанавливать знания по этой статье. Просто так получилось, что по проекту Заказчик велел освоить его… Это недорогой микроконтроллер на базе ядра Cortex M0. После освоения Заказчик же и сказал, что мы всё будем делать на китайском клоне STM32. Характеристики же самобытного CH579 он признал недостаточными.
Но с другой стороны… Сегодня эта микросхема стоит 120-150 рублей за штуку на Ali Express. А у неё имеется не только встроенный PHY для десятимегабитного Ethernet, но и всё для работы по BLE. По-моему, не самая плохая цена. Кажется, для Интернета вещей может пригодиться. Но это цены за микросхему. Макетки безобразно дороги.
Ещё на многих форумах народ возмущается, что сетевая библиотека для этого контроллера поставляется не в виде исходных кодов. Китайцы отвечают, что они не собираются ничего менять. Наш Заказчик тоже возмущался. Поэтому в статье я покажу, каким путём мы шли, чтобы сделать исходный код. Любой сможет повторить этот путь буквально за пару дней. Там скорее обидно, чем сложно.
В общем, сегодня мы пробежимся по работе с китайским контроллером CH579. Будет немного практических сведений и немного мемуаров, как пришлось вскрывать библиотеки.Читать полностью »