Hard-Soft News

Новости железа и софта

Разработка программ для микроконтроллеров ARM для работы на голом железе

Январь 16th, 2012

Поскольку в некоторых (правда не очень широких) кругах я считаюсь специалистом по процессором ARM и всем, что с ними связано, еще недавно мне часто задавали вопрос как установить Linux на ту или иную железку ARM. Сейчас после появления Android такие вопросы задают гораздо реже и это еще одна польза от Android (по крайней мере для меня). Главная проблема с установкой Linux ARM заключается в том, что не существует стандартный платформы ARM, подобной стандартный платформе PC. Современные системы ARM, это системы выполненные на одном кристалле, на котором помимо процессора расположены различные контроллеры. Проблема в том, что в разных моделях и архитектура контроллеры и адреса регистров, и даже значение, которые записываются в эти адреса, могут развиться даже в рамках одного модельного ряда. Это значит, что для установки Линукса на любое железо ARM необходим свой уникальный набор драйверов. Этот факт очень важно понять не только тем кто пытается поставить Линукс на ARM, но и тем, кто просто пишет программы для ARM-систем, например для микроконтроллеров. Далее мы рассмотрим три типа современных систем на основе ARM и пример программы, предназначенной для работы на голом железе микроконтроллера ARM.

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

Наконец-то

Январь 10th, 2012

Получил от издательства крупный вариант обложки моей книги.

Qt 4.7+ Практическое программирование на С++

Qt 4.7+ Практическое программирование на С++

 

The Classical Computer Science Papers Every Programmer Should Read

Декабрь 24th, 2011

Here is the list of papers on computing which I consider the Golden Hall of Classics of Computer Science.  We have already read most of these things in our textbooks and heard them on lectures. But I think it is still refreshing and broadening the mind to see the original publications that grounded many fields of CS. The text are not sorted in any way. The list is going to be updated and you are welcome to send the links to the texts you consider as important as those below.
A note about copyrights: while all these papers are freely available online (i.e. not pay-walled), I don’t store the files on my server. Following are only the links that point elsewhere.

Read more…

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

YAGF 0.8.9

Декабрь 18th, 2011

Очередной релиз. Основные новшества: функция автоматического исправления наклона страницы (deskew) и улучшенный пользовательский интерфейс.

Страница проекта:  http://symmetrica.net/cuneiform-linux/yagf-ru.html

YAGF 0.8.9

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

Безопасный запуск Linux на устройстве ARM (часть II)

Ноябрь 16th, 2011

Продолжаем обживаться в системе ARM Linux, установленной на флешку.

Первая часть

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

Безопасный запуск Linux на устройстве ARM

Ноябрь 7th, 2011

Речь пойдет о запуске полноценного дистрибутива Linux на устройствах, на которых уже установлен урезанный Linux. Проще говоря, на устройствах с Android и Angstrom.

Этот способ установки является на сегодняшний день самым безболезненным для девайса, что хорошо подходит тем, кто хочет по-прежнему пользоваться устройством по назначению, а не только как площадкой для тестирования Linux. При использовании этого способа файлы Linux вообще не будут устанавливаться на устройство с Андроидом. Вместо этого мы установим их на USB-флешку. Читать дальше…

Системные вызовы ARM Linux

Октябрь 31st, 2011

Номера и порядок передачи аргументов системных вызовов ARM Linux соответствуют таковым на платформе Intel, и это очень хорошо и правильно. Существует два режима системных вызовов – старый и новый (новый является частью стандарта EABI). Нынешние ядра ARM Linux поддерживают оба режима, но использовать режим EABI, разумеется, предпочтительнее. У двух режимов много общего: аргументы вызова передаются в регистрах r0-r6, а сам вызов выполняется с помощью инструкции SWI.
В старом режиме номер вызова является частью операнда инструкции SWI. Операнд инструкции выглядит так:

MOV r0, дескриптор_файла;
MOV r1, адрес_буфера;
MOV r2, длина_буфера;
SWI 0x900004;

В режиме EABI номер вызова передается в регистре r7, а операндом SWI всегда является значение 0×0. Еще одно отличие связано с передачей 64-битных аргументов. В обоих режимах их передают в паре 32-битных регистров, но в старом режиме это просто два следующих не занятых регистра, а в режиме EABI – следующая пара регистров, в которой первый регистр имеет четный номер. Тот же вызов _write() в режиме EABI будет выглядеть так:

MOV r0, дескриптор_файла;
MOV r1, адрес_буфера;
MOV r2, длина_буфера;
MOV r7, #4;
SWI 0x0;

Помимо прочего, между двумя режимами существует одно, не сразу заметное, различие: режим EABI может использовать как в режиме ARM MODE (32-битные инструкции), так и в более компактном THUMB MODE. Старый режим не может использоваться в THUMB MODE просто потому, что число 0×900000 не поместится в 16-битном операнде инструкции SWI режима THUMB.
Ну и напоследок, описания нескольких системных вызовов ARM Linux. Зная общий принцип, остальные описания легко «конвертировать» из описаний аналогичных вызовов для Intel.

Номер Обозначение Используемые регистры
1 sys_exit() r0
3 sys_read() r0, r1, r2
4 sys_write() r0, r1, r2
5 sys_open() r0, r1, r2
6 sys_close() r0

Самый компактный исполнимый файл для Linux

Октябрь 27th, 2011

Размер исполнимого файла обычной программы Hello World при сборке в моей системе (X86-64, Linux) после выполнения strip составляет  6208 байтов. Для ARM Linux (ARMv9) — 2720 байтов. Можно ли улучшить эти результаты? Читать дальше…

Qt и ActiveX

Октябрь 18th, 2011

Qt и ActiveX

Придумал сравнительно простой и удобный способ работать с интерфейсами COM в программе Qt в том случае, если dumpcpp не справляется с генерацией классов.

Алгоритм анализа связных компонент растра, реализованный с помощью Qt

Октябрь 8th, 2011

Написал алгоритм анализа связных компонент на Qt.

Демо-программа

Демо-программа