Кого? Набор? electronics kit raspberry pi в поиске по магазину. Выбрать можно по вкусу. Светодиоды и резисторы есть практически в любом. Удобные коробочки может и не во всех есть, но там по фотографиям будет понятно. У меня конкретно этот, но я таки рекомендую повыбирать что-то самостоятельно.
Там обязателен проц BCM2837. Соответственно это должен быть точный клон определённой версии малинки. Что на али, что на амазоне — малинка стоит примерно $38 (около 2200 рублей). Не то, чтоб дорого с учётом бесплатной доставки. Лично я с амазона заказал. Дополнительные плюшки мне вдвое дороже вышли, лол.
Продолжая аналогию, цель курса не в умении работать лопатой ниже уровня моря, а в умении построить дом от подвала до верхнего этажа. И да, мы будем пользоваться лифтом.
Проще предоставить возможность скомпилировать это всё для страждущих, чем предоставить хотелки на каждый чих. Кроме того можно собственную модифицированную версию туда влепить. Скажем использовать штуки из стандартной библиотеки (из std::io например) там, где у нас не заработают другие части (например std::net). Мы можем просто скопировать код стандартной библиотеки и вырезать то, что работать не будет.
Собственно основное назначение стандартной библиотеки — взаимодействие с операционной системой.
Помимо стандартной библиотеки там есть чуть более мелкие библиотеки вроде core и прочих. Зачем нам может понадобиться их компилять? Мы можем использовать разные опции компилятора для наших нужд. Например нужно ли нам использовать SIMD (на арме это NEON) или нинужно. Или ещё что-то. На все комбинации всех опций бинарники не предоставишь (технически можно, но ненужно ибо их будет очень много).
Собственно это всё есть в готовом виде для самых самых распространённых платформ. Под платформой будет подразумеваться Target Triplet. Т.е. сочетание процессора/окружения/операционной системы/чего там ещё. В нашем конкретном случае это что-то вроде aarch64-none-elf или что-то похожее. Т.е. проц с архитектурой aarch64, отсутствие ОСи и немного сочного мяса эльфов.
отсутствие опыта работы с компилируемыми языками, за исключением ВУЗовской начальной программы по C.
И этого опыта должно быть в целом достаточно. Предполагается, что Rust изучается по ходу курса.
Отсутствие опыта работы с электроникой, схемами, понимания их устройства.
В рамках этого курса достаточно самых самых минимальных знаний. По железной части кроме светодиодиков чего-то особого не будет (как работает UART, будет объяснено). Если есть желание фундаментально углубиться в эту тему, то есть лютейшая годнота под названием The Art of Electronics. Раз нет проблем с изучением англоязычных материалов — берите третье издание на английском (на русском совершенно другая нумерация и 3, 4, 5 и т.д. будут относится ко второму изданию на самом деле).
Почти полное отсутствие представлений об устройстве операционной системы.
В рамках курса исправим. С точки зрения практики, а не теории. После некоторой практики в рамках курса теорию будет гораздо интереснее и понятнее изучать кстати. Из самого близкого к оригиналу есть лекции https://web.stanford.edu/~ouster/cgi-bin/cs140-spring14/lectures.php которые в свою очередь рекомендуют читать книжечку Operating Systems: Principles and Practice.
Загрузчик. Точнее их целых два. bootcode.bin и start.elf.
В следующей части мы свой загрузчик напишем. Наш загрузчик будет подгружать ядро по UART.
А кто подгружает наши загрузчики? Хороший вопрос. Этим занимается прошивка, до которой нам будет сложновато добраться (там закрыто и опечатано всё). По сути эта прошивка занимается примерно тем же, чем такая же штука в ардуинке — даёт нам возможность не использовать всякую тяжелую обвязку с программаторами и прочим.
Тут стоит немного упомянуть о том, что предоставляет нам процессор по части защиты одних частей от других.
Есть обычный мир и защищённый мир. В рамках курса мы будем воплощать наши хитрые планы в обычном мире.
Код, который мы выполняем по ходу курса будет выполняться на уровне Гипервизора. Чуть позже будет рассказано, как перемещаться с EL2 до EL1 и до EL0. И обратно. Понадобится нам это не раньше, чем будем работать с программами/потоками/процессами. Хотя может я напишу что-то про ассемблер и вот такое всё, применительно к этой архитектуре. Я не буду ограничиваться просто переводом оригинального курса. Иначе это было бы слишком скучно. (Тут стоит заметить, что я сам всё это потихоньку изучаю).
Целиком и полностью согласен с вами. После того, как кто-то придумал фортран, ничего более годного человечеством придумано не было. Лисп не в счёт, он для любителей смайликов.
Основную работу делает rustc. cargo и xargo — обёртки для управления зависимостями. Конкретно xargo — временный костыль для управления кросскомпиляцией стандартной библиотеки Rust. Вполне возможно, что всё, что делает xargo будет делать cargo. По крайней мере работы по этой части ведутся.
cargo и xargo читают свои конфигурационные файлы, строят древа зависимостей одних компонентов от других. Потом они вызывают rustc для каждого элемента этого древа в правильном порядке.
rustc в свою очередь берёт исходные файлы и преобразует их в тот вид, который его попросят. В нашем случае нам требуется статический файлик target/aarch64-elf/release/libblinky.a. В нём содержится бинарный код и некоторая информация о том, как его можно будет потом использовать.
А использовать мы его будем самым гнустным образом. При помощи линкёра мы стыкуем его с crt0.o (который получился из crt0.S) и получаем build/blinky.elf. Этого эльфа мы преобразуем в тот, формат, который будет потом читать загрузчик (по сути просто отрежем все заголовки elf-файла)
Я не всё детально расписал конечно, но самое основное.
Кое-кто произнёс "микроконтроллеры". Разве STM32 и AVR это не самое первое, что вспоминается на эту тему? Ну у меня так.
Чем он такой чудесатый, что нужно все бросать и на него переходить?
ТТХ либо сравнимо, либо сильно лучше при более низкой цене. Речь больше о том, что под AVR на Rust только при помощи костыльного https://github.com/avr-rust можно что-то делать. Могу ответить вам как фанбой фанбою: AVR ненужен ибо для прогания на оном при использовании Rust будет слишком много костылей. Вас устроит такой ответ? Лично для меня подобной проблемы вообще не существует. Ящитаю, что выбирать инструменты стоит из характера задач, а не по религиозным причинам.
Понятнее не стало. Проблема больше в том, что эти семпло-тапы не гуглятся от слова совсем. Какой-то профессиональный жаргон судя по всему. Я достаточно далёк от этой темы, потому и спрашиваю.
Что ещё очень плохо в малинке и во всех дешовых АРМ процах что они не могут перешагнуть планку в 2-4 операции за такт.
Не понимаю, в чём проблема. С одной стороны 2-4 операции за такт, а с другой стороны количество тактов в секунду. Кроме того ядро можно взять не одно, а 2 или 4. Тем более, что задача вроде как неплохо поддаётся распараллеливанию.
Если грубо: не вникая в сущность задачи, сколько она требует 32-битных операций с плавающей запятой в секунду? Актуальная малинка судя по всему может предоставить до 5*10^9 таких операций в секунду. Или (теоретически) до 25*10^9 при содействии QPU.
На самом деле можно заморочиться. Никто не запрещает пилить bare metal код на малинке. Есть neon. Если не хватит, то есть VideoCore. Не думаю, что сильно сложнее в сравнении с FPGA. Но смысла в этом мало на самом деле.
Для https://habrahabr.ru/post/349248/ тоже подойдёт. Проц должен быть целиком и полностью совместим.
Вася Ложкин
Кого? Набор?
electronics kit raspberry pi
в поиске по магазину. Выбрать можно по вкусу. Светодиоды и резисторы есть практически в любом. Удобные коробочки может и не во всех есть, но там по фотографиям будет понятно. У меня конкретно этот, но я таки рекомендую повыбирать что-то самостоятельно.Там обязателен проц BCM2837. Соответственно это должен быть точный клон определённой версии малинки. Что на али, что на амазоне — малинка стоит примерно $38 (около 2200 рублей). Не то, чтоб дорого с учётом бесплатной доставки. Лично я с амазона заказал. Дополнительные плюшки мне вдвое дороже вышли, лол.
Продолжая аналогию, цель курса не в умении работать лопатой ниже уровня моря, а в умении построить дом от подвала до верхнего этажа. И да, мы будем пользоваться лифтом.
Проще предоставить возможность скомпилировать это всё для страждущих, чем предоставить хотелки на каждый чих. Кроме того можно собственную модифицированную версию туда влепить. Скажем использовать штуки из стандартной библиотеки (из std::io например) там, где у нас не заработают другие части (например std::net). Мы можем просто скопировать код стандартной библиотеки и вырезать то, что работать не будет.
Собственно основное назначение стандартной библиотеки — взаимодействие с операционной системой.
Помимо стандартной библиотеки там есть чуть более мелкие библиотеки вроде core и прочих. Зачем нам может понадобиться их компилять? Мы можем использовать разные опции компилятора для наших нужд. Например нужно ли нам использовать SIMD (на арме это NEON) или нинужно. Или ещё что-то. На все комбинации всех опций бинарники не предоставишь (технически можно, но ненужно ибо их будет очень много).
Собственно это всё есть в готовом виде для самых самых распространённых платформ. Под платформой будет подразумеваться Target Triplet. Т.е. сочетание процессора/окружения/операционной системы/чего там ещё. В нашем конкретном случае это что-то вроде aarch64-none-elf или что-то похожее. Т.е. проц с архитектурой aarch64, отсутствие ОСи
и немного сочного мяса эльфов.И этого опыта должно быть в целом достаточно. Предполагается, что Rust изучается по ходу курса.
В рамках этого курса достаточно самых самых минимальных знаний. По железной части кроме светодиодиков чего-то особого не будет (как работает UART, будет объяснено). Если есть желание фундаментально углубиться в эту тему, то есть лютейшая годнота под названием The Art of Electronics. Раз нет проблем с изучением англоязычных материалов — берите третье издание на английском (на русском совершенно другая нумерация и 3, 4, 5 и т.д. будут относится ко второму изданию на самом деле).
В рамках курса исправим. С точки зрения практики, а не теории. После некоторой практики в рамках курса теорию будет гораздо интереснее и понятнее изучать кстати. Из самого близкого к оригиналу есть лекции https://web.stanford.edu/~ouster/cgi-bin/cs140-spring14/lectures.php которые в свою очередь рекомендуют читать книжечку Operating Systems: Principles and Practice.
Загрузчик. Точнее их целых два. bootcode.bin и start.elf.
В следующей части мы свой загрузчик напишем. Наш загрузчик будет подгружать ядро по UART.
А кто подгружает наши загрузчики? Хороший вопрос. Этим занимается прошивка, до которой нам будет сложновато добраться (там закрыто и опечатано всё). По сути эта прошивка занимается примерно тем же, чем такая же штука в ардуинке — даёт нам возможность не использовать всякую тяжелую обвязку с программаторами и прочим.
Тут стоит немного упомянуть о том, что предоставляет нам процессор по части защиты одних частей от других.
Взято отсюда
Есть обычный мир и защищённый мир. В рамках курса мы будем воплощать наши хитрые планы в обычном мире.
Код, который мы выполняем по ходу курса будет выполняться на уровне Гипервизора. Чуть позже будет рассказано, как перемещаться с EL2 до EL1 и до EL0. И обратно. Понадобится нам это не раньше, чем будем работать с программами/потоками/процессами. Хотя может я напишу что-то про ассемблер и вот такое всё, применительно к этой архитектуре. Я не буду ограничиваться просто переводом оригинального курса. Иначе это было бы слишком скучно. (Тут стоит заметить, что я сам всё это потихоньку изучаю).
Если касательно программирования, то начинать стоит с книжечки по Rust. На русском последняя версия всё ещё не опубликована, но можно потыкать прямо вот тут: https://github.com/ruRust/rust_book_2ed/tree/ru_version/second-edition/src
По линуксу и вообще командной стоке можно много чего почитать. https://ryanstutorials.net/linuxtutorial/ https://ru.hexlet.io/courses/bash в качестве первых попавшихся примеров. Даже списком https://proglib.io/p/10-linux-resources/ Гугл по запросу "linux туториал" выдаст достаточно интересного на любой вкус. В том числе и в виде видях на ютубчике.
А так — спрашивайте конкретные вопросы. Каждый подразумевает под нулевым уровнем что-то своё.
Целиком и полностью согласен с вами. После того, как кто-то придумал фортран, ничего более годного человечеством придумано не было. Лисп не в счёт, он для любителей смайликов.
Нам нужно компилировать стандартные библиотеки, а не использовать свои готовые. Их можно скомпилировать только ночной сборкой компилятора.
Это основная киллерфича Rust на мой взгляд. Лучше, чем во вполне оффициальной книге я рассказать врятли смогу. https://doc.rust-lang.org/book/second-edition/
Основную работу делает
rustc
.cargo
иxargo
— обёртки для управления зависимостями. Конкретноxargo
— временный костыль для управления кросскомпиляцией стандартной библиотеки Rust. Вполне возможно, что всё, что делаетxargo
будет делатьcargo
. По крайней мере работы по этой части ведутся.cargo
иxargo
читают свои конфигурационные файлы, строят древа зависимостей одних компонентов от других. Потом они вызываютrustc
для каждого элемента этого древа в правильном порядке.Можно заметить, что опции из
Cargo.toml
передаются ключами вrustc
.Немного о внутренностях
rustc
можно почитать например это https://rust-lang-nursery.github.io/rustc-guide/rustc
в свою очередь берёт исходные файлы и преобразует их в тот вид, который его попросят. В нашем случае нам требуется статический файликtarget/aarch64-elf/release/libblinky.a
. В нём содержится бинарный код и некоторая информация о том, как его можно будет потом использовать.А использовать мы его будем самым гнустным образом. При помощи линкёра мы стыкуем его с
crt0.o
(который получился изcrt0.S
) и получаемbuild/blinky.elf
. Этого эльфа мы преобразуем в тот, формат, который будет потом читать загрузчик (по сути просто отрежем все заголовки elf-файла)Я не всё детально расписал конечно, но самое основное.
Спрашивайте, что не понятно. Это как раз тот случай, когда "глупые" вопросы только приветствуются.
Кое-кто произнёс "микроконтроллеры". Разве STM32 и AVR это не самое первое, что вспоминается на эту тему? Ну у меня так.
ТТХ либо сравнимо, либо сильно лучше при более низкой цене. Речь больше о том, что под AVR на Rust только при помощи костыльного https://github.com/avr-rust можно что-то делать. Могу ответить вам как фанбой фанбою: AVR ненужен ибо для прогания на оном при использовании Rust будет слишком много костылей. Вас устроит такой ответ? Лично для меня подобной проблемы вообще не существует. Ящитаю, что выбирать инструменты стоит из характера задач, а не по религиозным причинам.
Можно и на Rust. Ладно, патч в ядро не примут, а с AVR лучше переходить на STM32 и компанию.
Понятнее не стало. Проблема больше в том, что эти семпло-тапы не гуглятся от слова совсем. Какой-то профессиональный жаргон судя по всему. Я достаточно далёк от этой темы, потому и спрашиваю.
Не понимаю, в чём проблема. С одной стороны 2-4 операции за такт, а с другой стороны количество тактов в секунду. Кроме того ядро можно взять не одно, а 2 или 4. Тем более, что задача вроде как неплохо поддаётся распараллеливанию.
Если грубо: не вникая в сущность задачи, сколько она требует 32-битных операций с плавающей запятой в секунду? Актуальная малинка судя по всему может предоставить до
5*10^9
таких операций в секунду. Или (теоретически) до25*10^9
при содействии QPU.На самом деле можно заморочиться. Никто не запрещает пилить bare metal код на малинке. Есть neon. Если не хватит, то есть VideoCore. Не думаю, что сильно сложнее в сравнении с FPGA. Но смысла в этом мало на самом деле.
А можно это расписать? Что за такты на семпло-тапы? Откуда константы
3*10^9
и2*10^8
?Но ведь кто-то это сделал? Даже в случае если ничего нового не делать, то всё равно кому-то надо поддерживать.