Jump to content

    

Linux с голого железа

Добрый день!

 

Я новичок во встраиваемых системах с Linux, до этого работал с безосьными контроллерами. Мне в руки попала плата EV-iMX287-NANО. Стоит задача создать новую плату со своей распиновкой на базе камня i.MX287. Помогите, пожалуйста, разобраться с процессом создания устройства.

Как я понял, при уже готовой плате все начинается с написания своего загрузчика. Везде рекомендуют U-Boot. Производители платы также EV-iMX287-NANО используют его. Но у них весь проект с бутлоадером уже готов и для его сборки достаточно запустить bash скрипт. На выходе получаем файл .sb , который заливаем на плату. Все грузится.

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

Однако, такой подход не очень устраивает.

Во-первых, не до конца понятна структура проекта бутлоадера, нет навигации по библиотекам, header-файлам и т.д.

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

 

Сами фрискейлы пишут, что для сборки и навигации по проекту можно использовать настроенный специальным образом Eclipse. Но он с первого раза не заработал как надо, поэтому разбираюсь дальше. Плюс к тому в доках упоминается некий LTIB, ELF, консольная сборка перемежается с ide-шной. В общем, я порядком запутался.

 

Как резюме меня интересуют следующие вопросы:

- Есть ли у кого-нибудь опыт создания своих плат на линуксе?

- Есть ли у вас пояснения к процессу разработки данных устройств?

- Какой загрузчик вы использовали?

- Пользовались ли вы при этом IDE?

 

Буду рад любой информации.

Share this post


Link to post
Share on other sites
Как резюме меня интересуют следующие вопросы:

- Есть ли у кого-нибудь опыт создания своих плат на линуксе?

Да

 

- Есть ли у вас пояснения к процессу разработки данных устройств?

Ну например http://stackoverflow.com/questions/1796669...-embedded-linux

И книга Embedded Linux Primer: A Practical Real-World Approach

 

- Какой загрузчик вы использовали?

U-Boot. Если можно его использовать - то нужно его использовать.

 

- Пользовались ли вы при этом IDE?

Нет

 

Share this post


Link to post
Share on other sites
Сами фрискейлы пишут, что для сборки и навигации по проекту можно использовать настроенный специальным образом Eclipse. Но он с первого раза не заработал как надо, поэтому разбираюсь дальше. Плюс к тому в доках упоминается некий LTIB, ELF, консольная сборка перемежается с ide-шной.

Сборка всегда осуществляется с помощью makefie. Из IDE только вызывается make, это нужно настроить. Чисто IDE-шные проекты для кросс-компиляции использовать не получится.

LTIB устарел и давно не поддерживается фрискейлом. Теперь у них официальный Yocto. Но это аццкий монстр. Попробуйте buildroot,

 

Как резюме меня интересуют следующие вопросы:

- Есть ли у кого-нибудь опыт создания своих плат на линуксе?

Есть

- Есть ли у вас пояснения к процессу разработки данных устройств?

Берем рефдизайн и перепиливаем под свои нужды.

- Какой загрузчик вы использовали?

При отладке U-Boot, в продакшн самописный. Для imx28 уже есть готовый linux-prep, компактный загрузчик писать не нужно.

- Пользовались ли вы при этом IDE?

Eclipse. В одном workspace U-boot, kernel и юзерспейс тесты железа. Все индексировано, хитеры и прототипы функций показываются. Сборка через makefile.

 

Share this post


Link to post
Share on other sites
Можно, конечно, воспользоваться методом научного тыка,

В случае с линуксом по собственному опыту рекомендую отказаться от этого метода. Есть куча приличной документации.

 

- Есть ли у кого-нибудь опыт создания своих плат на линуксе?

Да.

- Есть ли у вас пояснения к процессу разработки данных устройств?

Берётся рефересная плата на которой линукс работает. По ней делается своя. Измения сводим к минимуму. Но заранее готовимся выделить время на правку драйверов и написание софта.

- Какой загрузчик вы использовали?

U-Boot.

- Пользовались ли вы при этом IDE?

vim + плагины.

Share this post


Link to post
Share on other sites

Спасибо всем за ответы!

 

При отладке U-Boot, в продакшн самописный. Для imx28 уже есть готовый linux-prep, компактный загрузчик писать не нужно.

 

Eclipse. В одном workspace U-boot, kernel и юзерспейс тесты железа. Все индексировано, хитеры и прототипы функций показываются. Сборка через makefile.

 

А не могли бы Вы поделиться некой пошаговой инструкцией по настройке Eclipse? Я понимаю, она одинаковая для всех поддерживаемых плат.

Еще вопрос с bootlets. Что это и с чем его едят? Доки говорят, что они настраивают питание проца. Но неясно, как они соотносятся с u-boot. С linux-prep тоже неясно, откуда брать, как работать. :wacko:

 

Вообще, было бы замечательно найти некий пример по полной настройке, начиная со скачивания сорцов и их модификацией с пояснениями до настройки источника загрузки(NAND/сеть/USB ...) и установки линукса. Я понимаю, это детский сад, но вдруг у кого-нибудь есть.

 

P.S. Нашел некие сорсы imx-bootlets. Внутри есть директория linux-prep. Это оно?

Share this post


Link to post
Share on other sites

Можете сразу грузить Linux после linux-prep без загрузчиков (если у вас не планируется в процессе работы обновления системные накатывать)

Share this post


Link to post
Share on other sites
Можете сразу грузить Linux после linux-prep без загрузчиков (если у вас не планируется в процессе работы обновления системные накатывать)

 

Можно попробовать, но хочется же все как у людей, с блэкджеком и обновлениями

Share this post


Link to post
Share on other sites
Можно попробовать, но хочется же все как у людей, с блэкджеком и обновлениями

Обновления можно накатывать и без u-boot причем несколькими способами.

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

* загрузка с sd карты.

* перезаписать загрузочный раздел из под штатного линукса с помощью kobs-ng. rootfs переписать сложнее но тоже можно

 

Так что скрипач u-boot не нужен. Только при разработке.

 

P.S. Нашел некие сорсы imx-bootlets. Внутри есть директория

Еще вопрос с bootlets. Что это и с чем его едят? Доки говорят, что они настраивают питание проца.

...

linux-prep. Это оно?

Оно

bootlets это маленькие программки (или плагины) которые ROM загрузчик (HAB loader) считывает с загрузочного источника и запускает на исполнение. Таких программок может быть много они вызываются последовательно одна за другой.

сначала запускается power prep и настраивает питание

потом еще что-то, уже не помню, возможно настройка памяти

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

Edited by _3m

Share this post


Link to post
Share on other sites

В общем, история такая:

Для навигации по файлам настроил Эклипс. Сборку в нем же настроить не получилось, но навигация есть, и то радует.

Слил сорцы отсюда: ftp://ftp.denx.de/pub/u-boot/

Скопипастил исходники самой похожей платы ( boards/denx/m28evk )

Добавил ее везде, где можно (где grep -rl m28evk нашел упоминание платы-донора)

Сделал конфиг make CROSS_COMPILE=arm-none-eabi- TESTimx287_defconfig

Запустил сборку. Убут 2016.01 выдал ошибку (нашел ее на форуме разрабов - вроде как баг, но черт с ним)

В Убут 2015.10 получилось чуть лучше, но тоже ошибка:

 

tools/mxsimage.c:18:25: fatal error: openssl/evp.h: No such file or directory

#include <openssl/evp.h>

^

compilation terminated.

make[1]: *** [tools/mxsimage.o] Error 1

make: *** [tools] Error 2

 

В чем тут дело? Нет сорцов для SSL? Может, SSL вообще выкинуть пока из конфига?

Share this post


Link to post
Share on other sites
В чем тут дело? Нет сорцов для SSL? Может, SSL вообще выкинуть пока из конфига?

SSL всегда и везде выеживается. Выкидывайте.

 

Share this post


Link to post
Share on other sites

если не нравятся бесплатные средства разработки (которые вытекают в применение u-boot, linux, и прочего бесплатного зоопарка), то всегда есть CodeWarrior Development Suite.

Share this post


Link to post
Share on other sites

UPD:

 

Поставил пакеты

apt-get install libssl-dev

Скомпилился .sb файлик.

 

Ок, распиновку поменяем, оперативку определим. Что дальше?

На плате есть NAND флешка. Очевидно, лучше, чтоб Линукс лучше устанавливать на нее. А обновлять с сети или USB. Где это настраивается? И еще вопрос про переменные среды. Объясните, пожалуйста на пальцах нубу, что это и зачем они нужны?

Edited by vgovseychuk

Share this post


Link to post
Share on other sites
UPD:

 

Поставил пакеты

apt-get install libssl-dev

Скомпилился .sb файлик.

 

Ок, распиновку поменяем, оперативку определим. Что дальше?

На плате есть NAND флешка. Очевидно, лучше, чтоб Линукс лучше устанавливать на нее. А обновлять с сети или USB. Где это настраивается? И еще вопрос про переменные среды. Объясните, пожалуйста на пальцах нубу, что это и зачем они нужны?

 

Вам придется научиться писать скрипты под Linux (переменные среды в т.ч. нужны для них). Эти скрипты будучи установлены на целевую систему будут вызываться по определенным событиям (типы событий выбираете на любой вкус исходя из возможностей ОС, установленных программ и задействованных интерфейсов) и выполнять определенные действия (в т.ч. и по вашим обновлениям).

Например, один из типовых сценариев автоматического обновления по USB:

- вставляется USB в устройство определенная флешка с определенного типа файлом;

- работающий на устройстве демон udev или mdev или .. определяет устройство и ,например, по совпадению Vendor ID запускает самописный скрипт

- скрипт монтирует USB и смотрит есть ли нужный файл

- если файл есть распаковывает его / либо расшифровывает / либо сличает КС

- запускает скрипт обновления

Либо все это делается руками из консоли на целевой машине

Edited by MikleV

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now