Category: интересные ссылки

Окт 02 2015

Драйвер для Linux: первый шаг

Продолжаю эксперименты с Altera Cyclone V. На этот раз объектом эксперимента стал драйвер для той прошивки FPGA, про которую я писал ранее. Сама прошивка простейшая: она просто мигает светодиодами с частотой, которую можно задавать программно. В прошлом посте на эту тему я сделал управление частотой мигания из обычной (user-space) программы, которая получает доступ к физической памяти через функции open(«/dev/mem») и mmap().
Однако такой путь считается «hacky and unsafe». Поэтому следующим логичным шагом должно стать написание драйвера.

Tux-linux-and-ARM-multiplatform-support

Я воспользовался готовым исходником драйвера (ссылка) за авторством Howard Mao (он на самом деле не Howard, а Zhe Hao Mao). Конечно, для того, чтобы разобраться в работе кода, почитал отдельные главы книги Linux Device Drivers (есть русский перевод).

Для компиляции пришлось вытаскивать архив Arrow SocKit 13.1 GSRD Linux отсюда: http://releases.rocketboards.org/release/2013.11/gsrd/src, файл linux-socfpga-gsrd-13.1-src.bsx. Объем архива около 1.1 Гб, но сервер очень медленный, качается несколько часов. Честно говоря, я впервые увидел файл с расширением bsx, оказалось, что это самораспаковывающийся архив. Просто запускаем его и он разворачивается в указанную папку. В ней в папке sources находится файл linux-socfpga.tgz. Его тоже нужно распаковать, естественно. Это и есть как таковое ядро системы, которое нужно указывать при компиляции драйвера.

Однако всё не так просто. После компиляции записываем скомпилированный драйвер blinker.ko на SD-карту, после загрузки Linux пишем insmod blinker.ko и получаем следующее: «blinker: version magic ‘3.9.0-00161-ged01b8c SMP mod_unload ARMv7 p2v8 ‘ should be ‘3.9.0 SMP mod_unload ARMv7 p2v8’«. Не совпали волшебные номерки. Причем версия одна и та же, просто зачем-то к ней приделан какой-то добавочный номер.

Решений может быть три: 1. Скомпилировать Linux именно из этого скачанного исходника (очень неохота) или 2. Подправить номер в исходниках ядра Linux. 3. Использовать команду modprobe с ключом -f, который заставляет систему игнорировать «волшебные цифры».  Однако этот способ почему-то не заработал.
Итак, способ номер 2, подправить номер в исходнике ядра. Данный номер записан в файле /include/generated/utsrelease.h. Исправляем то, что там было, на «3.9.0», и перекомпилируем драйвер. На всякий случай смотрим hex-редактором файл blinker.ko, чтобы убедиться, что волшебные циферки такие, как нужно. Снова записываем драйвер на SD-карту, запускаем insmod, всё прошло гладко. Теперь можно проверить работу драйвера, посылая ему числа от 1 до 15 для управления частотой миганий: echo 1 > blinker — мигает быстро, echo 15 > blinker — мигает медленно. Пока всё. Немного, но путь в тысячу ли начинается с одного шага.

Эксперименты продолжаются.

Июн 21 2015

Генерация файлов .mif и case-конструкций

Пусть в проекте FPGA необходимо ПЗУ, в которое записана определённая информация, имеющаяся у нас в виде бинарного файла. ПЗУ, как правило, реализуются на блоках BRAM, в которые при инициализации FPGA записывается требуемое содержимое.
Файлы инициализации памяти BRAM для FPGA, могут иметь формат MIF (Memory Initialization File) или формат HEX.

DSC_0522_EDIT

Нужный модуль памяти можно сгенерировать в Quartus II с помощью MegaWizard, в ISE — с помощью Xilinx Core Generator. Кроме этого, в QuartusII возможно использование специальной директивы:

reg [7:0] mem[0:2047] /* synthesis ram_init_file = "test.mif" */;

Эта директива позволяет создать RAM, инициированную значениями из файла .MIF. Использование RAM с предустановленными значениями, это очень плохая идея, но в качестве ROM такую память использовать вполне можно. Проблема в том, что эту директиву понимает только Quartus II, никакой кроссплатформенности.

Quartus II предоставляет редактор файлов памяти, и возможность загрузки файлов .mif и .hex, Xilinx Core Generator требует загрузки файла .coe, имеющего другой формат, нежели MIF. Однако хочется иметь кроссплатформенное решение, которое не зависело бы от платформы. Таким вариантом является генерация ROM в виде case-конструкции:

always@(posedge clk)
begin
  case(in)
  ...
  11'h00d: out = 8'h99;
  11'h00e: out = 8'h81;
  11'h00f: out = 8'h7e;
  11'h010: out = 8'h7e;
  11'h011: out = 8'hff;
  11'h012: out = 8'hdb;
  11'h013: out = 8'hff;
  11'h014: out = 8'hc3;
  11'h015: out = 8'he7;
  11'h016: out = 8'hff;
  ...
  endcase
end

Полезная ссылка: различные конструкции для генерации разных типов RAM, ROM и других модулей можно найти в руководстве Altera «Recommended HDL Coding Styles»: https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/hb/qts/qts_qii51007.pdf
Я написал две простые утилиты, которая преобразует бинарный файл в MIF и в тело конструкции case.

Read more »

Июн 17 2015

Ссылка от RS Components

Инженерный портал http://www.rs-online.com/designspark/electronics/nodes/view/type:tool/slug:product-data-library, цель которого – предоставить инженеру техническую информацию от разных производителей – в одном месте.

Июн 02 2015

Бесплатные САПР от RS Components

С сайта RS Components можно скачать две системы автоматизированного проектирования: одна предназначена для разработки принципиальных схем и печатных плат (DesignSpark PCB), вторая для 3D-моделирования (DesignSpark Mechanical). Обе системы полностью бесплатны, то есть это не урезанные демо-версии. Ссылка: http://www.rs-online.com/designspark/electronics/eng/page/mechanical

Я скачал обе и немного попробовал что-нибудь сделать. Сразу могу сказать, что я сравниваю возможности и удобство использования с теми программами, которыми пользуюсь сам: с Altium Designer и Solid Works.

pic1

Редактор схем.

pic2

 

Редактор 3D.

В общем, первое впечатление хорошее, есть большие библиотеки компонентов и для редактора схем/плат, и для 3D.

Библиотека условных графических обозначений большая, но не соответствует ГОСТ, поэтому на производстве её использовать не получится, только «для себя». Редактор PCB тоже есть, там есть разные возможности, поддержка DRC и другое.

Разобраться сходу не удалось, но времени на освоение у меня сейчас просто нет. Надо читать документацию.

Библиотека 3D большая и удобная, с поиском по каталогу, можно скачать какую-либо деталь и экспортировать её в формат STL. Экспортировать в Solid Works получилось, только без цвета, увы. Больше распространённых форматов 3D не предусмотрено, формата STEP нет, экспорт только через Solid Works или другой пакет 3D-моделирования.

Само по себе моделирование в 3D происходит совсем не так, как в Solid Works или Компас 3D. Если честно, совсем не так. Вероятно, нужно читать документацию и руководства, чтобы освоить эту программу, но я попробую это сделать в будущем. Если у вас есть задачи по разработке плат и 3D-моделей, можете попробовать скачать и разобраться.

Read more »

Фев 22 2015

Интересная ссылка: GNU Radio

GNU Radio под лицензией GPLv3.
Набор программ и библиотек для реализации различных радиосистем.
Содержит различные фильтры, модуляторы, демодуляторы, смесители, кодеки и другие блоки.
Домашняя страница http://gnuradio.org/redmine/
Пример использования.

Read more »

Дек 29 2014

Блог по печатным платам

Для разработчиков печатных плат — цикл статей «PCB Design Perfection Starts in the CAD Library», автор Tom Hausherr из Mentor Graphics Corp.
Ссылка на его блог на Mentor.com: http://blogs.mentor.com/tom-hausherr/blog/author/thausher/
В его блоге на Менторе почему-то нет первой части цикла. Полностью цикл статей, начиная с первой части, есть здесь: http://www.innofour.com/News/Literature/PCB-Design-Perfection-Starts-in-the-CAD-Library/PCB-Design-Perfection-Starts-in-the-CAD-Library—Part-1

Вот еще справочник по площадкам для разных корпусов: http://www.siongboon.com/projects/2005-09-07_home_pcb_fabrication/footprint/

Жаль, времени, чтобы это прочесть, совсем мало.

Ноя 11 2014

Всё, что вы хотели знать про Binutils, но стеснялись спросить

http://atgreen.github.io/ggx/

Сен 30 2014

Установка драйвера ATI760G под Debian

Танец с бубном описан здесь: https://wiki.debian.org/ATIProprietary#wheezy-legacy.

Сен 20 2014

Рекомендую к изучению

https://www.tcl.tk/man/tcl8.5/tutorial/ — руководство по языку tcl (без tk). Полезная вещь.

Сен 17 2014

Полезная ссылка

Ставим JRE на Debian: http://samonesoznanie.blogspot.ru/2013/11/debian-7-install-java-oracle-17-via-apt.html