Автор Тема: как добавить новое ядро в uboot  (Прочитано 3971 раз)

pcmax

  • Гость
как добавить новое ядро в uboot
« : Февраль 05, 2018, 07:59:32 pm »
ну даже не знаю, видимо опять без ответа. ребята, это же форум arm? ну на других форумах мне не отвечают на такие вопросы, говорят, что для arm есть форум arm.  ну и здесь тоже молчат.  а если не тут, то где?

Оффлайн ua3nbw

Re: как добавить новое ядро в uboot
« Ответ #1 : Февраль 06, 2018, 02:55:49 pm »
ну даже не знаю, видимо опять без ответа. ребята, это же форум arm? ну на других форумах мне не отвечают на такие вопросы, говорят, что для arm есть форум arm.  ну и здесь тоже молчат.  а если не тут, то где?
зачем добавлять новое ядро в uboot ?
а новое ядро как добыли ?
версия uboot ?
multiboot ?
 

Оффлайн ua3nbw

Re: как добавить новое ядро в uboot
« Ответ #2 : Февраль 06, 2018, 06:38:49 pm »
вобщем планирую перенести систему на другой диск, оставив на cd карточке uboot.  после скачать stage Gentoo распаковать, и передать загрузчику это ядро Gentoo. но как это сделать я не знаю толком...
вообще ядро arm компелируется?

в 2015 году loboris накомпилировал: Debian, Ubuntu, Fedora 22, Kali Linux, Arch Linux, OpenSuse, Gentoo, Slackware
http://www.orangepi.org/orangepibbsen/forum.php?mod=viewthread&tid=342&extra=page%3D1

На сегодня актуальны ядра linux с патчами от armbian - debian(jessie, stretch), Ubuntu_xenial
практически за один клик можно собрать debian или ubuntu готовый имидж c uboot: https://docs.armbian.com/Developer-Guide_Build-Preparation/

Оффлайн ua3nbw

Re: как добавить новое ядро в uboot
« Ответ #3 : Февраль 06, 2018, 08:29:57 pm »
мне интересно другое ??? я хочу понять возможна ли на arm такая же сборка ядра, как на архитектуре x86

обе архитектуры поддерживают RISC-инструкции, а значит что на обеих архитектурах можно запускать одинаковые ОС

ищите тулчейн под конкретный процессор, но наличие в ядре поддержки нужного SoC не гарантирует работоспособность ядра на борде ибо борды с идентичными SoC'ами различную разводку управляющих сигналов GPIO, различные по ширине шины,таймингам,типу оперативки и флеш и еще сотни всего остального.
про arm-gentoo тут: https://wiki.gentoo.org/wiki/Project:ARM?part=1&chap=7#doc_chap3

Оффлайн Olej

Re: как добавить новое ядро в uboot
« Ответ #4 : Май 31, 2018, 10:28:30 am »
мне интересно другое ??? я хочу понять возможна ли на arm такая же сборка ядра, как на архитектуре x86
Действительно интересный и актуальный вопрос!
Правда, для его актуальности нужно пройти путь не только сборки ядра, но и компоновка его и всех требуемых компонент в образ .img - для их размещения на SD-карточку.

P.S. Безусловно, сборка Linux под любые процессорные платформы (x86, ARM, MIPS, PPC, ...) происходит единообразно ... но с некоторыми дополнительными особенностями, зависимыми от платформы.
Беда всех описаний сборки образов под Orange Pi в том, что а). сборщики городят это из-под Windows и вообще плохо знают Linux, а поэтому сами себе нагораживают дополнительные сложности и страхи + б). сборку делают методом проб и ошибок под одну какую-то конкретную железку, которая у них есть в руках: Orange Pi, Rasbery Pi, ... др.

P.P.S. Если у вас есть желание разобраться и достаточно много на то времени - давайте разбираться ... вместе. ;)

pcmax

  • Гость
Re: как добавить новое ядро в uboot
« Ответ #5 : Май 31, 2018, 02:13:41 pm »
давайте попробуем.
скачал ядро с kernel.org . самую последнюю и стабильную версию .  плата orange pi win+ .   в ядре нашел процесоор,  соответствующий процессору на плате, под которую собираю ядро.
скачал ядро в usr/src/ . распаковал.   чтобы не делать ошибок , чтобы ядро запустилось наверняка сделал : zcat /proc/config.xz > .config      , открыл .config nano и просмотрел, искал включение дерева устройств.

дальше сделал make olddefconfig  ну чтобы наверняка и процесс пошел.  дальше make -j4, дальше  make modules_install ...  нужно сказать что компилю прям на orange pi. усановлены bison , flex , build-essential,  kernek-package, bc.   компилится относительно быстро. до этого компилил на x86 процессоре скажу,что разница не очень ощутима. хотя говорили обратное.
дальше делаю make install.     тут нужно пояснить ,что когда компилил source -3.16.56  скаченный  с kernel.org то все установилось без проблем.  surce -4.16.13 не хотел.
но мне нужно было dtb. человек с иностранного сайта сказал мне что нужно искать в arch/arm64/boot/dtc/  . но вы этой папке не было dtb были лишь dts.  делал make, но цель не была обнаружена. поэтому скачал и установил device-tree-conpilers   и попытался скомпилеть dts руками.  там было 5 файлов из которых два с раширением .dtsi     некоторые выдавали ошибку при компиляции.   делал так     dtc -o  dtb-o  fileint.dtb   file.dts     
некоторые компилелись неткоторые выдавали ошибку.
   

pcmax

  • Гость
Re: как добавить новое ядро в uboot
« Ответ #6 : Май 31, 2018, 02:17:50 pm »
мне интересно другое ??? я хочу понять возможна ли на arm такая же сборка ядра, как на архитектуре x86
Действительно интересный и актуальный вопрос!
Правда, для его актуальности нужно пройти путь не только сборки ядра, но и компоновка его и всех требуемых компонент в образ .img - для их размещения на SD-карточку.

P.S. Безусловно, сборка Linux под любые процессорные платформы (x86, ARM, MIPS, PPC, ...) происходит единообразно ... но с некоторыми дополнительными особенностями, зависимыми от платформы.
Беда всех описаний сборки образов под Orange Pi в том, что а). сборщики городят это из-под Windows и вообще плохо знают Linux, а поэтому сами себе нагораживают дополнительные сложности и страхи + б). сборку делают методом проб и ошибок под одну какую-то конкретную железку, которая у них есть в руках: Orange Pi, Rasbery Pi, ... др.

P.P.S. Если у вас есть желание разобраться и достаточно много на то времени - давайте разбираться ... вместе. ;)

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

Оффлайн Olej

Re: как добавить новое ядро в uboot
« Ответ #7 : Май 31, 2018, 04:44:25 pm »
давайте попробуем.
Только давайте не так сильно спешить...
Давайте подробнее ответим на некоторые вопросы (из того, что вы делали, и из того, что будем делать далее)...

1. Собирать всё что угодно под Linux годится только под Linux - все остальные Windows-ы забываем как страшный сон >:(
(кто хочет это делать в Windows - делайте в виртуальной машине Linux под Windows ... только помалкивайте о том, чтобы народ не смешить)

скачал ядро с kernel.org . самую последнюю и стабильную версию .  плата orange pi win+ .   в ядре нашел процесоор,  соответствующий процессору на плате, под которую собираю ядро.
Чтобы только собрать ядро Linux совершенно необязательно искать, выбирать, скачивать...
Попробуйте использовать такой инструмент как BuildRoot.
Чтобы не повторяться и не пересказывать, подробно почитайте здесь пошаговую инструкцию.
Может это и даст вам весь конечный результат, который вы хотите получить?
(такую вашу сборку я готов параллельно повторять, проверять и комментировать)

скачал ядро в usr/src/ . распаковал.   чтобы не делать ошибок , чтобы ядро запустилось наверняка сделал : zcat /proc/config.xz > .config      , открыл .config nano и просмотрел, искал включение дерева устройств.
2. В какой ОС (дистрибутив, версия) и на каком оборудовании (носители и т.д.) это /usr/src находится? ;)
3. Дерево устройств - вовсе не критически необходимая вещь для сборки ядра Linux и модулей, в некоторых архитектурах (x86) оно почти не используется (используется для 1-2 проприетарных устройств модулей), в некоторых (PPC) используется в меру часто, 50/50 устройств ... в архитектуре ARM это общераспространённая практика, но не критически обязательная. Но это вопрос для разобраться, на будущее...
4. Брать .config из /proc - это не самый корректный/лучший способ, лучше из /boot/config-* ... если таковой есть.


дальше сделал make olddefconfig  ну чтобы наверняка и процесс пошел. 
5. Если используете существующий .config, то, наверное, make oldconfig?


дальше make -j4, дальше  make modules_install ...  нужно сказать что компилю прям на orange pi. усановлены bison , flex , build-essential,  kernek-package, bc.   компилится относительно быстро. до этого компилил на x86 процессоре скажу,что разница не очень ощутима. хотя говорили обратное.
Все недостающие пакеты (bisson, flex, ...) установить вам/нам ;) ошибки сборки подскажут, так что это вопрос не принципиальный, в зависимости от того, в каком дистрибутиве собираем - состав и названия пакетов могут отличаться...

6. На каком конкретно Orange Pi (модель) собиралось?
На каком носителе? (SD-карта? ... какой класс SD-карты?)
"относительно быстро" - это сколько в часах ;)?


дальше делаю make install.     тут нужно пояснить ,что когда компилил source -3.16.56  скаченный  с kernel.org то все установилось без проблем.  surce -4.16.13 не хотел.
Вот это место - подробнее, в деталях!
Как это происходило в 3.16, как, и что значит "без проблем"?
Как выглядело, что 4.16 "не хотел"?
зачем вам (по секрету ;)) 4.16 и чем не удовлетворяет 3.16 ... для такой мини-пукалки как Orange Pi? Что вы там хотели найти особо нового?


но мне нужно было dtb. человек с иностранного сайта сказал мне что нужно искать в arch/arm64/boot/dtc/  . но вы этой папке не было dtb были лишь dts.  делал make, но цель не была обнаружена. поэтому скачал и установил device-tree-conpilers   и попытался скомпилеть dts руками.  там было 5 файлов из которых два с раширением .dtsi     некоторые выдавали ошибку при компиляции.   делал так     dtc -o  dtb-o  fileint.dtb   file.dts     
Искать/смотреть .dts (да и любые другие вещи относительно ядра Linux) удобно в онлайн ресурсах, вот здесь (например, но таких ресурсов и других немало).
Файлы .dts дерево устройств представляют текстовые, символьные описание (в человеко-понятном виде).
Для использования ядром они должны компилироваться в файлы .dtb (и конечно это должно произойти без ошибок), достаточно подробное описание здесь: Device Tree Reference.
Одно из лучших описаний относительно дерева устройств, для одноплатных *Pi перделок, как мне кажется, здесь: Raspberry Pi:Настройка/Деревья устройств, оверлеи и параметры.
 
« Последнее редактирование: Май 31, 2018, 05:04:44 pm от Olej »

pcmax

  • Гость
Re: как добавить новое ядро в uboot
« Ответ #8 : Май 31, 2018, 06:51:38 pm »
ну видимо Вы меня не поняли.  какой виндовс?  на всех девайсах у меня Линукс. кроме ноута, но я им не пользуюсь практически.

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

версия ядра на orange pi win+ 3.10.107-pine64.

хочу собрать ядро дедовским способом, чтобы понять все тонкости. поэтому постараюсь обходить всякие инструменты .  все эти  BuildRoot уведут в сторону от сути.  пока будешь изучать из принцип работы упустишь главное  в самой сборке ядра.  вобщем в сторону эту всю философию. ближе к делу.
флешка sony 10 класс.  до 90мб/c как бы написанно.

запустил плату orange pi.  скачал все  что указал выше.  зашел в usr/src этой платы.  с помощью elinks cкачал source 3.2.101  .  попробую с самого низу начать.  я прислушался к Вам и не стал качать самое последнее ядро.

распокавал его в usr/src/    зашел в эту распакованную директорию. 
touch .config  -создам.   да , oldconfig должен создать его. но я пока так. не знаю правильно ли.  сat /boot/config-3.10.107-pine64 > .config      .  Вы правы, лучше config из boot/

пока больше написать ничего не могу. как получу какие-то ошибки или результаты-сразу напишу Вам на форум

Оффлайн Olej

Re: как добавить новое ядро в uboot
« Ответ #9 : Май 31, 2018, 07:14:15 pm »
ну видимо Вы меня не поняли.  какой виндовс?  на всех девайсах у меня Линукс. кроме ноута, но я им не пользуюсь практически.
Это не для вас и не про вас было сказано.
А потому что:
- большинство публикаций по сборке образов OPI, на которые показываются ссылки и здесь на форуме, описывают кросс-компиляцию и сборку именно из-под Windiws ("вырвать гланды через жопу" ;D)
- для всех тех заинтересованных читателей, кто может подключиться к обсуждению, "договоримся на берегу": забудем всё, что связано со словом Windows, как страшный сон.
 

Оффлайн Olej

Re: как добавить новое ядро в uboot
« Ответ #10 : Май 31, 2018, 07:16:59 pm »
хочу собрать ядро дедовским способом, чтобы понять все тонкости. поэтому постараюсь обходить всякие инструменты .  все эти  BuildRoot уведут в сторону от сути.  пока будешь изучать из принцип работы упустишь главное  в самой сборке ядра.
Ничего подобного. Именно с точностью до наоборот. BuildRoot не делает как-раз ни одного лишнего телодвижения, кроме сборки ядра.

pcmax

  • Гость
Re: как добавить новое ядро в uboot
« Ответ #11 : Май 31, 2018, 11:09:58 pm »
вобщем что-то не так идет.

скачал самое старенькое ядро на сайте kernel.org, как Вы говорили.  но там не оказалось даже поддержки 64бит. 
скачал тогда самое новое стабильное ядро.

скомпилировал по olddefconfig чтобы не было интерактива.  cat /boot/config-3.10.107-pine64 > .config

make olddefconfig должно было все новое что будет source установить по умолчанию опираясь на старый .config.
make -j4
make modules_install
все это прошло без проблем.
а вот и проблемы:  в директории arch/arm64/boot/dts нет файлов с расширением -dtb.
но я решил воспользоваться старым dtb ядра и просто новое ядро засунул в Image-3.10.107-pine64 так как уже все ссылки на это есть и дерево устройст подцеплино к нему.   cat vmlinuz-4.16.13 > Image-3.10.107-pine64

вобщем я не понимаю в чем причина

Оффлайн Olej

Re: как добавить новое ядро в uboot
« Ответ #12 : Июнь 01, 2018, 12:30:46 am »
скачал самое старенькое ядро на сайте kernel.org, как Вы говорили.  но там не оказалось даже поддержки 64бит. 
А почему вам так уж нужно 64-бит ... для такой перделки как OPI? ;D
Чтобы нерационально использовать его и так не дюже большую RAM?
(я не говорю определённо, что 32-бит будет лучше, но не нужно "в лоб" повторять то, что "все говорят")

Чем и хорош BuildRoot, что он делает в точности то, что вы пытаетесь делать руками, только он сам знает все ссылки + скачивает то и всё, что надо (по вашим указаниям), а вы только гадаете методом проб и ошибок что вам нужно скачать.

а вот и проблемы:  в директории arch/arm64/boot/dts нет файлов с расширением -dtb.
В arch/arm64/boot/dts и не может быть в принципе .dtb, там есть .dts - это текстовые файлы в человеческом формате. Они должны компилироваться в .dtb. Я вам там выше накидал ссылок, которые дают представление как это делается.

но я решил воспользоваться старым dtb ядра и просто новое ядро засунул в Image-3.10.107-pine64 так как уже все ссылки на это есть и дерево устройст подцеплино к нему.   cat vmlinuz-4.16.13 > Image-3.10.107-pine64

вобщем я не понимаю в чем причина
А тут я тоже ничего не понял...
В чём был смысл этого замысла?
И чем это закончилось?

вобщем что-то не так идет
И что идёт не так?
И как этот "не так" выглядит?

P.S. Я пока ничем не могу вам помочь со сборкой на нативном железе, потому как не могу подобрать к только пришедшему мне Orange Pi One грёбанного разъёма питания 1.7/4.0 ... сегодня обошёл несколько аксесуарных лавочек - ни у кого такой дряни нет :(

pcmax

  • Гость
Re: как добавить новое ядро в uboot
« Ответ #13 : Июнь 01, 2018, 12:48:00 am »
почему-то я решил, что dtb файл должен скомпелироваться вместе с ядром.  ну что ж видимо не так.

64 бита, потому что я использовал старый .config.   если  если source  скаченный мной не будет поддерживать 64 bit то  сами понимаете.


припояйте питание прям на гнездо. 

смысл в cat vmlinuz-4.16.13 > Image-3.10.107-pine64 был такой: не рушить все ссылки от дерева устройств к ядру. это как бы я новое ядро подсунул как старое, а под старое уже все было настроенно и значит меньше шансов допутсить ошибки.


можно отказаться от дерева устройств?

Оффлайн Olej

Re: как добавить новое ядро в uboot
« Ответ #14 : Июнь 01, 2018, 02:14:52 am »
можно отказаться от дерева устройств?
.dts & .dtb файл соответствует 1-му устойству (или, может быть, иногда небольшой группе сходных устройств). Нужны они для упрощения написания кода драйвера (модуля ядра) ... это легко увидеть, если кто заглядывал в код модулей.
Драйвер (модуль ядра) может быть написан и так и так, и с использованием .dtb и без него (Device Tree - это достаточно поздняя выдумка в ядре Linux, что-то около 2006 года, и до этого времени >15 лет драйверы писались без использования этой техники).
Но если драйвер уже написан, и написан с использованием API Device Tree, то для него должен быть соответствующий .dtb.

У меня есть под рукой SD-карточка записанная с .img вчера-позавчера, но для Rasbery Pi, но смонтированная в стационарном Linux (Fedora 25):
[olej@dell olej]$ ls boot/*.dtb
boot/bcm2708-rpi-b.dtb  boot/bcm2708-rpi-b-plus.dtb  boot/bcm2708-rpi-cm.dtb  boot/bcm2709-rpi-2-b.dtb  boot/bcm2710-rpi-3-b.dtb
[olej@dell olej]$ ls boot/overlays/*.dtb | wc -l
60
Как вы видите, там 65 файлов *.dtb