Обновить
158.19

Системное программирование *

Обеспечение работы прикладного ПО

Сначала показывать
Порог рейтинга
Уровень сложности

Разработка HID-драйвера: шаг за шагом

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров7.2K


Предлагаем погрузиться в мир Human Interface Device (HID) в контексте операционной системы реального времени «Нейтрино». В статье мы расскажем про архитектуру HID и коснемся практических аспектов создания драйверов для устройств ввода.


Кроме того, затронем вопросы системной разработки и изучения драйверного API для встраиваемых систем реального времени. Расскажем, почему создание драйверов для взаимодействия с HID-устройствами является достаточно важным, но, при этом, достаточно простым процессом.

Читать дальше →

Загрузка драйверов в ядре Linux

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров11K

Почти все знают, как написать простой драйвер под Linux. На эту тему много материалов в сети. Очень мало информации о том, что находится "под капотом" у процедуры загрузки драйверов.

Читать далее

Какие бывают Cortex-M7 ARM-ы, периферия, шины, память, … DMA

Уровень сложностиСложный
Время на прочтение11 мин
Количество просмотров8.9K

На рисунке приведена структурная схема современного, одного из самых навороченных (я подозреваю) 32-битного ARM процессора или микроконтроллера-microcontroller, в документации используются оба термина: high-performance Flash microcontroller (MCU) based on the 32-bit ARM Cortex-M7 RISC (х.хх CoreMark/MHz) processor.

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

Все это богатство убирается в микросхеме, которая по объему заметно меньше спичечного коробка. Вы легко можете найти достаточно подробное техническое описание (datasheet) узлов, систем, настроек, спецификаций по этой-такой схеме. Давайте попробуем коротко пройтись по одному из таких описанию, ссылки в конце статьи.

Читать далее

Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI?

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров16K
image


Зачастую в процессе разработки собственных устройств или моддинга уже существующих, встаёт задача выполнения стороннего кода: будь то ваши собственные программы с SD-флэшек, или программы, написанные другими пользователями с помощью SDK для вашего устройства. Тема компиляторов и кодогенерации достаточно сложная: чтобы просто загрузить ELF или EXE (PE) программу, вам нужно досконально разбираться в особенностях вашей архитектуры: что такое ABI, релокации, GOT, отличие -fPIE от -fPIC, как писать скрипты для ld и т. п. Недавно я копал SDK для первых версий Symbian и основываясь на решениях из этой ОС понял, каким образом можно сделать крайне «дешевую» загрузку любого нативного кода практически на любом микроконтроллере, совершенно не вникая в особенности кодогенерации под неё! Сегодня мы с вами: узнаем, что происходит в процессе загрузки программы ядром Linux, рассмотрим концепцию, предложенную Symbian Foundation и реализуем её на практике для относительно малоизвестной архитектуры — XTensa (хотя она используется в ESP32, детали её реализации «под капотом» для многих остаются загадкой). Интересно? Тогда добро пожаловать под кат!
Читать дальше →

Эльфы и пингвины: что такое ELF и как он работает в Linux?

Уровень сложностиПростой
Время на прочтение37 мин
Количество просмотров34K

image


Всем привет! С вами как всегда я, Аргентум. Сегодня я расскажу и поведаю вам древние тайны, которые хранят горные старцы-сисадмины — тайны об эльфах, и как они взаимодействуют с древним народцем пингвинов. Дамы и господа, встречайте — статья о работе ELF и двоичных файлов в Linux!


Что такое ELF? Чем он отличается от PE в Windows? И многие другие ответы на ваши вопросы.


Перед тем как погрузиться в технические детали, будет нелишним объяснить, почему понимание формата ELF полезно. Это позволяет изучить внутреннюю работу операционной системы. Когда что-то пошло не так, эти знания помогут лучше понять, что именно случилось, и по какой причине. Также возможность изучения ELF-файлов может быть ценна для поиска дыр в безопасности и обнаружения подозрительных файлов. И наконец, для лучшего понимания процесса разработки. Даже если вы программируете на высокоуровневом языке типа Go или Rust, вы всё равно будет лучше знать, что происходит за сценой.


Итак, зачем изучать ELF?


  • Для общего понимания работы операционной системы
  • Для разработки ПО
  • Цифровая криминалистика и реагирование на инциденты (DFIR)
  • Исследование вредоносных программ (анализ бинарных файлов)
Читать дальше →

Rust 1.75.0: API адресной арифметики, async fn и impl Trait в трейтах, уcкорение rustc

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров4.2K

Команда Rust рада сообщить о новой версии языка — 1.75.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.


Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.75.0 вам достаточно выполнить команду:


rustup update stable

Если у вас ещё не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.


Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать канал beta (rustup default beta) или nightly (rustup default nightly). Пожалуйста, сообщайте обо всех встреченных вами ошибках.

Читать дальше →

Выделение памяти для DMA в Linux

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров4.9K

Это перевод Поста Allocating Memory for DMA in Linux

В этом посте мы рассмотрим распределение памяти в Linux с использованием очень больших страниц с тем, чтобы совместно использовать эту память с устройствами PCIe, использующими DMA.

Читать далее

Анализ виртуальной машины на примере VMProtect. Часть 1

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров7.1K

В этой статье мы рассмотрим, как может выглядеть работа виртуальной машины VMProtect, а также посмотрим, что можно сделать для понимания защищенного функционала (в зависимости от того, как далеко вы готовы зайти в этом не всегда благодарном деле).

Ожидается, что данный материал поможет тем, кто в ходе реагирования на компьютерный инцидент или исследования какой-либо вредоносной активности столкнулся с защитой в виде виртуальной машины.

Анализировать!

Тайны пингвина: как работают исключения и прерывания в Linux?

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров23K

image


Привет, хабр! Моя прошлая статья о работе памяти в Linux вам понравилась. Сегодня мы разберем работу исключений и прерываний.


Что это, как они работают в ОС и Linux? Давайте разберемся вместе!

Читать дальше →

GNU Shepherd — что это за альтернатива systemD?

Время на прочтение10 мин
Количество просмотров10K

Привет, хабр! На связи Аргентум. Сегодня мы поговорим о системах инициализации в Linux, а точнее - об малоизвестной GNU Shepherd.

Мы изучим самые популярные известные системы инициализации - и попытаемся изучить GNU Shepherd.

Ну, друзья, да благословит нас Столлман!

Вперёд!

Turbo Pascal спустя 42 года

Время на прочтение26 мин
Количество просмотров8.1K

Сегодня 2025 год. Но вернемся на 42 года позже - прямиком в 1983 год. Именно тогда Borland выпустила Turbo Pascal.

Turbo Pascal - интегрированная среда разработки программного обеспечения для платформ DOS и Windows 3.x и язык программирования в этой среде, диалект языка Паскаль от фирмы Borland. 

Turbo Pascal стал знаковым продуктом для отрасли, он положил начало компании Borland и стал первой популярной интегрированной средой разработки или IDE. Для того времени это был отличный и очень успешный продукт.

Но как это было?

p.s. статья была в черновиках, решил опубликовать.

Читать далее

Что такое операционная система и зачем она нужна?

Уровень сложностиСредний
Время на прочтение25 мин
Количество просмотров26K

 

Всем привет!

Добро пожаловать в наше увлекательное путешествие в мир операционных систем. В этом уроке мы глубже погрузимся в суть понятия "операционная система" и рассмотрим, почему она является неотъемлемой частью каждого компьютера, ноутбука или смартфона.

Приятного чтения!

Читать далее

Перенос вашего проекта под Embox на новую плату STM32

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров3.6K

Всем привет

В этой статье я хочу показать, насколько в Embox легко перенести существующий проект на новую платформу. За основу возьмем уже описанный ранее демонстрационный проект с ModBus и расскажем, как портировать наш проект на новую плату на примере STM32 NUCLEO-F2207ZG.

В статье про ModBus уже было показано, как важны для уменьшения “времени выхода на рынок” (time-to-market), переносимость ПО и удобство разработки и отладки. А теперь предположим, что мы хотим сделать новую версию нашего устройства на новой аппаратной платформе, более дешевой, менее энергопотребляющей или просто доступной на рынке.

Читать далее

Ближайшие события

Rust 1.74.0: конфигурация проверки в Cargo, авторизация для приватных реестров, проекции возвращаемых типов

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров2.5K

Команда Rust рада сообщить о новой версии языка — 1.74.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.


Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.74.0 вам достаточно выполнить команду:


rustup update stable

Если у вас ещё не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.


Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать beta (rustup default beta) или nightly (rustup default nightly) канал. Пожалуйста, сообщайте обо всех встреченных вами ошибках.

Читать дальше →

Диспетчер Задач для Микроконтроллера

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров13K

В программировании микроконтроллеров часто нужно написать простые тестировочные прошивки. При этом надо некоторые функции вызывать чаще, а некоторые реже. Для этого, конечно, можно запустить FreeRTOS, однако тогда этот код не будет переносим на другие RTOS например Zephyr RTOS или TI-RTOS. Поэтому надо держать наготове какой-нибудь простенький NoRTOS планировщик.

В этот тексте я представил основные идеи алгоритма такого кооперативного планировщика.

Читать далее

Запуск ОСРВ Embox на Banana Pi M1

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров3.7K

Об этой операционной системе я узнал на данном ресурсе, из многочисленных публикаций её разработчиков. Для тех кто не в курсе - это отечественная операционная система реального времени для встраиваемых устройств с открытым исходным кодом. Её официальный репозиторий расположен тут. Возникло желание опробовать этот проект в деле. Благодаря документации к проекту на виртуальной машине qemu удалось запустить конфигурации для разных платформ. Однако, виртуальная машина - это не для настоящих джедаев).

Тщательно изучив список поддерживаемых одноплатников, остановил свой выбор на Banana Pi M1 с ARM-процессором Allwinner A20. Плата была заказана на Aliexpress, и когда она прибыла, настало время экспериментов. Но всё, как и ожидалось, оказалось не так просто...

Читать далее

Книга «BPF: профессиональная оценка производительности»

Время на прочтение19 мин
Количество просмотров3.3K
image Привет, Хаброжители!

Инструменты оценки производительности на основе BPF дают беспрецедентную возможность анализа систем и приложений. Вы сможете улучшить производительность, устранить проблемы в коде, повысить безопасность и сократить расходы. Книга «BPF: профессиональная оценка производительности» — ваш незаменимый гайд по применению этих инструментов.

Брендан Грегг — эксперт и пионер проекта BPF — представляет более 150 готовых инструментов анализа и отладки, рекомендации по их применению, а также пошаговые инструкции по разработке ваших собственных инструментов. Вы узнаете, как анализировать процессоры, память, дисковый ввод/вывод, файловую систему, сети, языки программирования, приложения, контейнеры, гипервизоры, безопасность и ядро. Вы сможете выработать глубокое понимание того, как улучшить буквально любую Linux-систему или приложение.
Читать дальше →

Cotea: программный контроль исполнения Ansible

Время на прочтение11 мин
Количество просмотров6.5K

Привет!

Я Давид Бадалян, работаю в Исследовательском центре доверенного искуственного интеллекта ИСП РАН. В статье я хочу поговорить об Ansible – одной из самых популярных систем по автоматизации развёртывания. 

Стоит запустить Ansible программно, и он становится черным ящиком – нет никакого контроля над его выполнением, нет информации о тасках. Эту проблему мы обнаружили, разрабатывая оркестратор Michman для сервисов уровня PaaS. В результате мы создали cotea и gocotea: инструменты для программного исполнения Ansible-плейбуков из языков Python и Go.

Про cotea, её архитектуру и кейсы применения я расскажу подробно под катом. Если вы DevOps-инженер и хотите узнать, как можно гибко использовать Ansible – статья точно для вас.

Читать далее

Мнение три года спустя: стоил ли того переход с JavaScript на Rust?

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров39K

Несколько лет назад я отказался от всего и полностью сосредоточился на WebAssembly. В то время Rust имел наилучшую поддержку компиляции в WebAssembly, а самые полнофункциональные среды исполнения WebAssembly были основаны на Rust. Rust был лучшим из вариантов. С места в карьер я нетерпеливо начал разбираться, чем же вызван такой ажиотаж.

С тех пор мы с потрясающими разработчиками создали Wick, — фреймворк приложений и среду исполнения, использующие в качестве системы основного модуля WebAssembly.

Спустя три года, выполнив несколько развёртываний в продакшен, написав электронную книгу и выпустив примерно сто пакетов на crates.io, я решил, что настало время поделиться своими мыслями о Rust.

Читать далее

Как Rust меняет мышление разработчика

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров51K
Я страшно ненавижу C++. Обычно я люблю программирование, но каждый проект, с которым я имел дело на C++, ощущался как монотонная рутина. В январе 2023 года я пошёл по пути изучения Rust, поэтому теперь могу сказать, что знаю язык системного программирования, который действительно люблю использовать.

Первый стабильный релиз Rust появился в 2015 году, и каждый год, начиная с 2016, он признаётся в Stack Overflow’s Annual Developer Survey самым любимым языком (в 2023 году эта категория называется «обожаемый»). Почему же разработчики, ощутившие вкус Rust, не могут отказаться от его использования? Похоже, в мире прогремевших наследников C/C++ репутация растёт только у Rust. Как же этот язык, появившийся на сцене меньше десятка лет назад, стал настолько популярным?

Ржавый красный краб Феррис по версии Midjourney

Кривая обучения оказалась крутой. Я нашёл многое, что мне нравится в Rust, но постоянно попадал в его ловушки. Однако в конечном счёте именно препятствия и проблемы, с которыми столкнулся, я научился любить больше всего.

Я начну историю с разговора о том, что легко полюбить — со среды Rust, управления пакетами и документации. Затем я расскажу о системе типов и типажах (trait). Далее я поведаю о тех возможностях тестирования и test driven development, которые становятся возможными благодаря Rust. Наконец, мы обсудим самую запутанную и сбивающую с толку часть — одержимость Rust тем, кто какой переменной владеет.
Читать дальше →

Вклад авторов