Здравствуйте! В этой статье я расскажу какие шаги нужно пройти для создания простого процессора и окружения для него.

Системное программирование *
Обеспечение работы прикладного ПО
Программирование с PyUSB 1.0
Это перевод руководства Programming with PyUSB 1.0
Данное руководство написано силами разработчиков PyUSB, однако быстро пробежавшись по коммитам я полагаю, что основной автор руководства — walac.
Позвольте мне представиться
PyUSB 1.0 — это библиотека Python обеспечивающая легкий доступ к USB. PyUSB предоставляет различные функции:
- На 100% написана на Python:
В отличии от версий 0.x, которые были написаны на C, версия 1.0 написанна на Python. Это позволяет программистам на Python без опыта работы на C лучше понять как работает PyUSB. - Нейтральность платформы:
Версия 1.0 включает в себя фронтенд-бэкенд схему. Она изолирует API от специфичных с точки зрения системы деталей реализации. Соединяет эти два слоя интерфейс IBackend. PyUSB идет вместе со встроенными бэкендами для libusb 0.1, libusb 1.0 и OpenUSB. Вы можете сами написать свой бэкенд, если хотите. - Портативность:
PyUSB должен запускаться на любой платформе с Python >= 2.4, ctypes и, по крайней мере, одним из поддерживаемых встроенных бэкендов. - Простота:
Взаимодействие с устройством USB никогда не было таким простым! USB — сложный протокол, а у PyUSB есть хорошие предустановки для наиболее распространенных конфигураций. - Поддержка изохронных передач:
PyUSB поддерживает изохронные передачи, если лежащий в основе бэкенд поддерживает их.
Несмотря на то, что PyUSB делает программирование USB менее болезненным, в этом туториале предполагается, что у Вас есть минимальные знания USB протокола. Если Вы ничего не знаете о USB, я рекомендую Вам прекрасную книгу Яна Аксельсона «Совершенный USB» (Jan Axelson «USB Complete»).
Прерывания от внешних устройств в системе x86. Часть 1. Эволюция контроллеров прерываний
- что такое PIC и для чего он нужен?
- что такое APIC и для чего он нужен? Для чего нужны LAPIC и I/O APIC?
- в чём отличия APIC, xAPIC и x2APIC?
- что такое MSI? В чём отличия MSI и MSI-X?
- как с этим связаны таблицы $PIR, MPtable, ACPI?
Если на какой-то из этих вопросов вам интересно получить ответ или вы просто хотите ознакомиться с эволюцией контроллеров прерываний в системе x86, добро пожаловать под кат.
Открытый вебинар «Инфраструктура как код»
Представляем вам открытый урок курса «DevOps практики и инструменты» на тему «Инфраструктура как код». Игорь Курочкин, преподаватель курса, на пример этой практики рассказывает как можно улучшить взаимодействие команд, ускорить процесс поставки ПО и снизить количество ошибок и показывает основные практики и инструменты для разработки инфраструктурного кода.
Если есть вопросы и комментарии можете оставить их тут или зайти на день открытых дверей и пообщаться с преподавателями курса там.
Запуск просмотрщика картинок из Windows XP на современных Windows

Скачать: shimgvw_xp32.7z (включает бинарник и исходный код лаунчера, плюс shimgvw.dll из англоязычной Windows XP SP3).
Введение в ptrace или инъекция кода в sshd ради веселья

Цель, которой я задался, была весьма проста: узнать введённый в sshd пароль, используя ptrace. Конечно, это несколько искусственная задача, так как есть множество других, более эффективных, способов достичь желаемого (и с гораздо меньшей вероятностью получить SEGV), однако, мне показалось клёвым сделать именно так.
10 неочевидных преимуществ использования Rust
Rust — это молодой и амбициозный язык для системного программирования. В нем реализовано автоматическое управление памятью без сборщика мусора и прочих накладных расходов времени исполнения. Кроме этого, в языке Rust используется семантика перемещения по умолчанию, имеются беспрецендентные правила обращения к изменяемым данным, а также учитываются времена жизни ссылок. Это позволяет ему гарантировать безопасность памяти и облегчает многопоточное программирование, ввиду отсутствия гонок данных.
Все это уже хорошо известно всем, кто хоть немного следит за развитием современных технологий программирования. Но что если вы не системный программист, да и многопоточного кода в ваших проектах не много, но вас все же привлекает производительность Rust'а. Получите ли вы какие-то дополнительные преимущества от его использования в прикладных задачах? Или все, что он вам даст дополнительно — это суровую борьбу с компилятором, который будет заставлять вас писать программу так, чтобы она неотступно следовала правилам языка по заимствованию и владению?
В данной статье собран десяток неочевидных и особо не рекламируемых преимуществ использования Rust, которые, я надеюсь, помогут вам определиться с выбором этого языка для ваших проектов.
Управление RGB светодиодами через блок UDB микроконтроллеров PSoC фирмы Cypress

Введение
Я давно хотел изучить методику программирования блоков UDB в контроллерах PSoC фирмы Cypress, но всё руки как-то не доходили. И вот, возникла задачка, на которой это можно было сделать. Разбираясь с материалами из сети, я понял, что практические рекомендации по работе с UDB ограничиваются теми или иными вариациями счётчиков и ШИМов. Все авторы почему-то делают свои вариации этих двух канонических примеров, поэтому описание чего-то иного вполне может быть интересно читателям.
Виртуальный мир Intel. Часть 2: SMP
Все дальнейшие действия будут проводится на PC со следующей конфигурацией:
CPU: Intel Core i7 5820K
Motherboard: Asus X99-PRO
Ram: 16GB
Гостевая ОС: Windows 7 x32 с отключенным PAE
UHCI, или самый первый USB

Доброго времени суток, дорогой читатель! Меня просили написать про UHCI — хорошо, пишу.
Возможно, вам пригодиться эта статья, если, к примеру, вы не имеете достаточных навыков написания драйверов и чтение документации к хардвейру. Простой пример: хотите написать свою ОС для мини-ПК, дабы какая-нибудь винда или очередной дистрибутив линукса не загружали железо, и вы использовали всю его мощь исключительно в своих целях.
Связь драйвера и устройства по _HID методу ACPI на примере GPIO контроллера Lynxpoint
Постановка задачи
В Linux есть стандартный интерфейс для работы с GPIO через sysfs. Документацию на него можно посмотреть тут.
Если кратко, то в папке "/sys/class/gpio" есть файлы «export» и «unexport». С помощью записи числа X в файл export можно открыть интерфейс в user space для управления GPIOX
# открыть интерфейс в user space для управления GPIO12
$ echo 12 > /sys/class/gpio/export
После открытия интерфейса появится папка /sys/class/gpio/gpioX/ в которой будут такие файлы как «value» или «direction», и путём записи «in» или «out» в файл «direction» и записи 1 или 0 в файл «value» можно управлять выводом GPIO напрямую через командную строку.
# настроить GPIO на вывод
$ echo "out" > /sys/class/gpio/gpio12/direction
# установить 1 на выводе GPIO
$ echo 1 > /sys/class/gpio/gpio12/value
Чтобы команда «echo X > /sys/class/gpio/export» приводила к созданию папки «gpioX», в ядре должен быть зарегистрирован драйвер контроллера GPIO, открывающий интерфейс к линиям GPIO.
Так получилось, что я работаю над портированием coreboot для кастомной платы на базе процессора Intel Haswell i7 [Для тех, кто не знает, coreboot это open source проект по созданию BIOS с открытым исходным кодом (https://www.coreboot.org/)]. В мой процессор встроен южный мост LynxpointLP в котором есть 94 линии GPIO. И я захотел открыть их в sysfs…
Новости Rust #2 (октябрь 2018)
Лучше с задержкой на неделю, чем никогда, так что предлагаю вашему вниманию субъективную подборку ржавых новостей за октябрь.
В этой подборке: Rust 1.30, Rust 2018, конференция RustRush, Amethyst 0.9, сквотинг crates.io, сборщик мусора, споры про 2D графику, Non-lexical lifetimes, функциональный GUI.
Rust 1.30 и тестирование Rust2018
Вышел Rust 1.30 (обсуждение). Основные нововведения — частичная стабилизация процедурных макросов, импорт макросов через обычный use
, улучшение системы модулей, "сырые" идентификаторы и поддержка no_std
приложений (подробнее в хабропереводе).
Rust 1.31 будет первым выпуском редакции (edition) "Rust2018" (что за "редакции"?), в связи с чем всех желающих приглашают подключаться к тестированию бета версии 1.31 и cargo fix.
RustRush 2018: конференция 15-16 декабря в Москве
RustRush 2018 — конференция для разработчиков на Rust, посвящённая вебу, блокчейну, высокой производительности и системному программированию.
Обновился сайт (rustrush.ru) — опубликован почти полный список докладчиков и программа, начата продажа основной партии билетов.
Будут четыре участника проекта Rust Language: Стив Клабник, Эшли Уильямс, Паскаль Хертлиф, Катарина Фей. Из других звёзд локальных и не очень — Максим Лапшин с прошивкой IP-камеры, Костя Степанов и Пьер Кригер aka tomaka. Программа.
Джеффри Рихтер, Павел Йосифович, Грег Янг и все-все-все. Хардкор и архитектура на DotNext 2018 Moscow
Во-первых, есть часть докладчиков «без категории». Это те люди, которые сами по себе могли бы заполнить отдельную конференцию. Их имена вы знаете: Джеффри Рихтер, Павел Йосифович и Грег Янг.
Обычно в статьях на Хабре рядом со спикером мы сразу приводим его фотографию. В случае с Джеффри и Павлом случай особый — вы лучше вспомните этих людей по обложкам книг:

Ближайшие события
Портирование Quake3

В операционной системе Embox (разработчиком которой я являюсь) какое-то время назад появилась поддержка OpenGL, но толковой проверки работоспособности не было, только отрисовка сцен с несколькими графическими примитивами.
Я никогда особо не интересовался геймдевом, хотя, само собой, игры мне нравятся, и решил — вот хороший способ развлечься, а заодно проверить OpenGL и посмотреть, как игры взаимодействуют с ОС.
В этой статье я расскажу о том, как собирал и запускал Quake3 на Embox.
Загрузка ядра Linux. Часть 1
Если вы читали предыдущие статьи, то знаете о моём новом увлечении низкоуровневым программированием. Я написал несколько статей о программировании на ассемблере для
x86_64
Linux и в то же время начал погружаться в исходный код ядра Linux.Мне очень интересно разобраться, как работают низкоуровневые штуки: как программы запускаются на моём компьютере, как они расположены в памяти, как ядро управляет процессами и памятью, как работает сетевой стек на низком уровне и многое другое. Итак, я решил написать еще одну серию статей о ядре Linux для архитектуры x86_64.
Обратите внимание, что я не профессиональный разработчик ядра и не пишу код ядра на работе. Это всего лишь хобби. Мне просто нравятся низкоуровневые вещи и интересно в них копаться. Поэтому если заметите какую-то путаницу или появилятся вопросы/замечания, свяжитесь со мной в твиттере, по почте или просто создайте тикет. Буду благодарен.
Единое ядро Windows
Самый удивительный аспект состоит в том, что ядро Windows практически не меняется в зависимости от всех этих архитектур и SKU. Ядро динамически масштабируется в зависимости от архитектуры и процессора, на котором оно работает, так, чтобы пользоваться всеми возможностями оборудования. Конечно, в ядре присутствует определённое количество кода, связанного с конкретной архитектурой, однако его там минимальное количество, что позволяет Windows запускаться на разнообразных архитектурах.
В этой статье я расскажу об эволюции ключевых частей ядра Windows, которые позволяют ему прозрачно масштабироваться от чипа NVidia Tegra низкого потребления, работающего на Surface RT 2012 года, до гигантских монстров, работающих в дата-центрах Azure.
TrustZone: доверенная ОС и ее приложения
Подборка докладов по ядру Linux с Open Source Summit Europe 2018

На прошлой неделе в Эдинбурге (Шотландия) прошел европейский Open Source Summit 2018. Представляю вашему вниманию подборку интересных докладов по ядру Linux, на которых мне удалось поприсутствовать.
Известные проблемы, ошибки и исправления в обновлениях Windows 10 на октябрь 2018

Прошло почти две недели с момента выпуска компанией Microsoft обновлений для Windows 10 в рамках October 2018 Patch Tuesday – и это были долгие две недели. Этот набор патчей можно назвать худшим вторником патчей от Microsoft за очень долгое время, поскольку в нём обнаружилось множество ошибок, не только делающих ПК на Windows 10 непригодными к использованию, но и приводящих (в некоторых случаях) к потере файлов пользователями.
Всё было настолько печально, что Microsoft пришлось отозвать обновления для Windows 10 от октября 2018, чтобы как следует выяснить, что именно стало причиной проблем, исправить это, и потом проверить обновлённый набор при помощи Windows Insiders.
В этой статье мы рассмотрим наихудшие ошибки, связанные с этими обновлениями, и решения по их исправлению.
Выпуск Rust 1.30
Команда разработчиков Rust рада сообщить о выпуске новой версии Rust: 1.30.0. Rust — это системный язык программирования, нацеленный на безопасность, скорость и параллельное выполнение кода.
Если у вас установлена предыдущая версия Rust с помощью rustup
, то для обновления Rust до версии 1.30.0 вам достаточно выполнить:
$ rustup update stable
Если у вас еще не установлен rustup
, вы можете установить его с соответствующей страницы нашего веб-сайта. С подробными примечаниями к выпуску Rust 1.30.0 можно ознакомиться на GitHub.
Что вошло в стабильную версию 1.30.0
Rust 1.30 — выдающийся выпуск с рядом важных нововведений. Но уже в понедельник в официальном блоге будет опубликована просьба проверить бета-версию Rust 1.31, которая станет первым релизом "Rust 2018". Дополнительную информацию об этом вы найдете в нашей предыдущей публикации "What is Rust 2018".
Процедурные макросы
Еще в Rust 1.15 мы добавили возможность определять "пользовательские derive-макросы". Например, с помощью serde_derive
, вы можете объявить:
#[derive(Serialize, Deserialize, Debug)]
struct Pet {
name: String,
}
И конвертировать Pet
в JSON и обратно в структуру, используя serde_json
. Это возможно благодаря автоматическому выводу типажей Serialize
и Deserialize
с помощью процедурных макросов в serde_derive
.
Rust 1.30 расширяет функционал процедурных макросов, добавляя возможность определять еще два других типа макросов: "атрибутные процедурные макросы" и "функциональные процедурные макросы".