Кросс-компиляция и развертывание ядра Raspberry Pi Linux
Получите исходный код ядра и инструменты
Ссылка на источник:
Ссылка на инструмент:
Основная версия исходного кода на git — 4.9, вы можете скопировать ссылку git напрямую
Если вы хотите загрузить другие версии ядра, например версию ядра 5.1.y, используйте следующий метод
Инструментальные средства — это компилятор, используемый в некоторых кросс-компиляциях.
Чтобы загрузить исправление, загрузите исправление, которое соответствует версии ядра, которую вы скомпилируете.
Вышеуказанное предназначено для загрузки с помощью git, скорость загрузки в Китае относительно низкая. Если вы хотите скачивать на высокой скорости, вы можете использовать Thunder. Метод состоит в том, чтобы скопировать ссылку вверху браузера и скопировать ее в Thunder для поиска.
Затем я загрузил сжатую версию, и моя скорость загрузки в Xunlei достигла 3 м, что было неплохо.
После завершения загрузки разархивируйте все файлы.
Хит патч
Мы добавляем патчи в ядро Linux, это процесс исправления. Распакуйте сжатую версию патча, загруженного выше, в соответствующую папку ядра и выполните
Настроить среду кросс-компиляции
Для этого нужны инструменты, которые мы скачали. Папка, загруженная с помощью git, называется tools; папка, в которую загружается сжатая версия пакета, называется tool-master. Мы объясним с названием tools.
представление цифр системы ubuntu
Если в вашей системе ubuntu 32 бита, выполните
Если он 64-битный, выполните
В 64-битных системах также должна быть установлена поддержка 32-битного компилятора.
Войдите в каталог исходного кода Linux, чтобы настроить кросс-компиляцию
Компилировать
Войдите в каталог исходного кода Linux и выполните
Или ваш процессор имеет несколько потоков, вы можете использовать -jn для ускорения компиляции
Этот процесс должен занять десятки минут, в зависимости от скорости компьютера. Подождите чашку чая
Развернуть на SD-карту
Сначала вставьте устройство чтения карт памяти с системой и смонтируйте его в виртуальной машине.
Просмотрите имя раздела в / dev
sdc1 — это загрузочный раздел, а sdc2 — это раздел rootfs.
Далее монтируем его. Сначала создайте две папки в / mnt
Затем смонтируйте sdc1 и sdc2 на fat32 и ext4 соответственно
Сначала установите модуль ядра в / mnt / ext4, найдите папку с исходным кодом ядра и выполните
Следующие операции выполняются в загрузочном разделе / mnt / fat32.
Сделайте резервную копию исходного ядра. Эта отладка показала, что kernel7.img — это ядро, используемое Raspberry Pi, поэтому мы сделали резервную копию kernel7.img Raspberry Pi.
Переименуйте zImage в исходном коде ядра в kernel7.img (расположение: linux-rpi-4.9.y / arch / arm / boot)
Или используйте инструменты под инструментами для преобразования типов
Сгенерированное имя — kernel.img, переименуйте его в kernel7.img
Если есть ошибка компиляции python
/usr/bin/env python\r no such file or directory
Это связано с тем, что код Python, написанный под Windows, не соответствует спецификациям под Linux, используйте следующий метод для перекодирования
sudo apt-get install dos2unix
Скопируйте сгенерированное ядро в / mnt / fat32
Скопируйте файл .dts и файл README
Пока что обновление ядра Raspberry Pi завершено, вставьте его в Raspberry Pi и попробуйте
Источник
Кросс компиляция ядра linux
Дык это, натой чтобы закомпилить свой кернель под такую железяку. Благо их как грязи развелось таких, армовских и мипсовых. И недорогие. И мелкие. Вплот до штук со спичечный коробок размерами, и при том — полноценный комп с линухом по сути. Это ж прикольно, а? 🙂
>> А накой вам? > Дык это, натой чтобы закомпилить свой кернель под такую железяку. Благо их > как грязи развелось таких, армовских и мипсовых. И недорогие. И мелкие. > Вплот до штук со спичечный коробок размерами, и при том — > полноценный комп с линухом по сути. Это ж прикольно, а? 🙂
Я собственна о том, что покупая МИПС/АРМ уже надо знать шо таке кросс-компиляция
> А какие-нибудь performance тесты не проводили? Есть ли какой-нибудь реальный смысл во > всем этом?
Тесты не проводились, в интернете о подобных тестах ничего нет. Я раньше на Gentoo сидел, там можно было всю систему так откомпилировать, но там в репозитории пакеты нестабильные, и частенько что нибудь падало, и я пересел на дебиан, а теперь вот на ubuntu, но в этих дистрибах ничего подобного нет, с apt-build-ом у меня не сложилось, и судя по отзывам ни у кого он нормально не работает, а в заднице свербило, ведь в gcc можно указать отпции компиляции под процессор, а ubuntu и debian пакеты компиляются с опцией i386 или в лучшем случае i686. Теоретически при указании gcc компиляции кода под заданный проц. код должен получаться быстрее. Но никто тестами пока это не подтвердил, потому что непонятно что тестировать и как. Судя по всему прирост будет не во всех задачах. Я сижу на таком откомпиленном ядре, в принципе тачила мощная так что ей пофик на каком ядре работать. Но спросите любого гентушника — он вам ответит что gentoo работает процентов на 15 быстрее. Скорее всего эти проценты взяты с потолка, и гентушники в них свято верят, иначе если не верить в это, зачем же тогда компилять всю систему?
Думаю перекомпиляция ядра в производительности заметно не добавит. Вот пересборка glibc, GTK, QT думаю даст процентов 10-15. Не факт что при этом не добавится трудновоспроизводимых глюков.
> Не факт что при этом не добавится трудновоспроизводимых глюков.
Регулярно вижу криворуких уродов (с понятно какой системой), которые сперва как ввинтят флагов для «адской оптимизации» на целых два этажа, со всей дури, чтобы выжать еше 3% скорости vs -O2, а потом идут и со всей дури плакаются в багтрекеры: «в вашей программе баг!». Хотя на самом деле баг в 80% случаев сугубо в мозгах дятла который ввинтил свой трехэтажный малопротестированный набор фич оптимизации и резонно поимел неочевидные глюки. Связанные с тем что такую дикую этажерку флагов оптимизации никто до него вообще не тестировал и компилер оказывается изредка в такой ситуации генерит слегка глючный код, перемудрив с оптимизацией. Не, ну ладно б еще авторам гцц баги писали, если уж так принципиально чтобы эта этажерка все-таки полетела и не глючила именно с таким набором флагов, так ведь нет, за что-то мозг выносят ни в чем не виноватым авторам постороннего софта. Которые ни разу не виноваты в том что у очередного пионера жопа просила приключений, елки.
4.49 , Иван Иванович Иванов ( ? ), 21:05, 25/03/2011 [^] [^^] [^^^] [ответить]
+1 + / –
10-15% .
я вас жутко разочарую — в общем случае это будет 0-3%.
> Думаю перекомпиляция ядра в производительности заметно не добавит. Вот пересборка glibc, > GTK, QT думаю даст процентов 10-15. Не факт что при этом > не добавится трудновоспроизводимых глюков.
Гентушники тихо хохочут в сторонке. Грамотная пересборка всей системы даёт от 10% до 250% (двести пятьдесят, это не опечатка), в зависимости от приложения. Из багов, вызванных сборкой из исходников, за три года не нескольких разных системах поймал только один.
Задрачивание флагов компиляции, сборка монолита «без лишних модулей» и без initrd — на обычном десктопе это гентушно-юношеский максимализм. С возрастом проходит.
> Проводили, и не раз. Естественно, толку никакого. > Задрачивание флагов компиляции, сборка монолита «без лишних модулей» и без initrd — > на обычном десктопе это гентушно-юношеский максимализм. С возрастом проходит.
Я вполне себе юн и свеж, а под гентой уже более 5 лет, и так и думал, как и вы, про флаги компиляции. Но вот попался один бд-рип («baraka», не суть важно), и встроенная видяйка на базе geforce 8200 — не тянула, vdpau ругалось. Воткнул видимокарту на базе gt210 — помогло, но не полностью. Добавил в юсе флаги sse, sse2, реемергнул ффмпег, мплеер, влц — без изменений. Емергнул ворлд с этими новыми флагами (newuse) (потратилось сутки на мои 520 пакетов), о Чудо! Всё акей, никаких подёргиваний, красиво. Отрицательный момент — не могу сказать какой именно пакет сыграл свою роль.
>[оверквотинг удален] >> на обычном десктопе это гентушно-юношеский максимализм. С возрастом проходит. > Я вполне себе юн и свеж, а под гентой уже более 5 > лет, и так и думал, как и вы, про флаги компиляции. > Но вот попался один бд-рип («baraka», не суть важно), и встроенная > видяйка на базе geforce 8200 — не тянула, vdpau ругалось. Воткнул > видимокарту на базе gt210 — помогло, но не полностью. Добавил в > юсе флаги sse, sse2, реемергнул ффмпег, мплеер, влц — без изменений. > Емергнул ворлд с этими новыми флагами (newuse) (потратилось сутки на мои > 520 пакетов), о Чудо! Всё акей, никаких подёргиваний, красиво. Отрицательный момент > — не могу сказать какой именно пакет сыграл свою роль.
а ведь мог почеловечески перекодировать фильм в mpeg2
Кстати да. Правда на 720p, но и на более слабом проце. vdpau, как оказалось, не завелось. А я и не заметил. Хотя это более идеологический вопрос, пожалуй. Меня вот коробит, что у меня тут sse2, sse3, ну и вообще весь такой из себя проц. а собрано всё под generic amd64. ( Это если ось 64 битная. А так и под i386 вообще.
> А какие-нибудь performance тесты не проводили? Есть ли какой-нибудь реальный смысл во всем этом?
Когда я н лет назад развлекался пересборкой ядра, то не стряпал в дцатый раз посты, как собрать ядро под линукс, а как раз тесты и проводил. Вроде разница была заметна на глаз. +/- 20-30 секунд при 3х минутной распаковке архива. Хотя было давно и уже толком не помню.
Наверное, топики про пересборку ядра, взломом вайфай . (что там еще?) никогда не умрут.%(
если при компиляции ядра посмотреть на те опции которые используютя при компиляции(ps af | grep cc1), то там почему-то нету тех опций которые заданы через export CFLAGS=». »
> если при компиляции ядра посмотреть на те опции которые используютя при компиляции(ps > af | grep cc1), то там почему-то нету тех опций которые > заданы через export CFLAGS=». «
то есть как вы можете наблюдать опции -march=i686 -mtune=core2 проставлены. У меня процессор core 2 duo, и эти опции компилятор автоматически поставил вместо -march=native видимо лучше жёстко проставить -march=core2 для более лучшей оптимизации, ибо как извесно опции -march=i686 -mtune=core2 выдают код который будет работать на процессорах от pentiumpro(i686) и выше, при жёстком указании -march=core2 будет выдавать код чисто для core2
> и эти опции компилятор автоматически поставил вместо -march=native
native This selects the CPU to tune for at compilation time by determining the processor type of the compiling machine. Using -mtune=native will produce code optimized for the local machine under the constraints of the selected instruction set. Using -march=native will enable all instruction subsets supported by the local machine (hence the result might not run on different machines).
> Не понял чо не так? > Поправьте если лучше знаете. > Насчёт -fno-omit-frame-pointer не в курсе, не специалист
Долго рассказывать. Хотите поменять флаги компиляции ядра?! Тогда меняйте их:
Глобальные, в основном Makefile (где-то в районе 230 строки) HOSTCFLAGS= HOSTCXXFLAGS=
Тут низя писать флаги оптимизации под конкретный процессор .
можно типа -06/-O99, -frecord-gcc-switches, -g0 -funroll-all-loops -ftree-vectorize -fno-inline-functions-called-once -fmerge-all-constants, ну и так далее. —
Для оптимизации под конкретный процессор надо менять в arch/x86/Makefile (под 32 бита в arch/x86/Makefile_32.cpu) там найти свой проц, после строки export BITS есть тройка ifeq-else-endif
Дописывать можно к последнему KBUILD_CFLAGS
Тут можно всё, кроме FPU/SSE/MMX/3DNOW, -mcmodel=kernel не менять.
> Глобальные, в основном Makefile (где-то в районе 230 строки) > HOSTCFLAGS= > HOSTCXXFLAGS= > Тут низя писать флаги оптимизации под конкретный процессор . > можно типа -06/-O99, -frecord-gcc-switches, -g0 -funroll-all-loops > -ftree-vectorize -fno-inline-functions-called-once > Для оптимизации под конкретный процессор надо менять в arch/x86/Makefile (под 32 бита > Тут можно всё, кроме FPU/SSE/MMX/3DNOW, -mcmodel=kernel не менять.
у меня -march выставляет только в зависимости от опции в конфиге «Processor family», а опции из CFLAGS не применяются. проверял с export CFLAGS=»-march=native -O3″, в итоге выходило -march=(то что я выбрал в конфиге, пробовал несколько вариантов k8 и x86-64, а native должен дать amdfam10) и -O2
> у меня -march выставляет только в зависимости от опции в конфиге «Processor > family», а опции из CFLAGS не применяются. проверял с export CFLAGS=»-march=native > -O3″, в итоге выходило -march=(то что я выбрал в конфиге, пробовал > несколько вариантов k8 и x86-64, а native должен дать amdfam10) и > -O2
Да не использует ядро переменную CFLAGS из окружения. Проверить легко — надо задать неправильные флаги:
export CFLAGS=»-mtune=shit -march=govno»
Хотите заменить, тогда задаёте
# export HOSTCFLAGS=»-O99 -mtune=native -funroll-all-loops» # export KBUILD_CFLAGS=»-O99 -mtune=native -funroll-all-loops» # make -e menuconfig # make -e
Целиком менять не надо, скопируйте старые HOSTCFLAGS и KBUILD_CFLAGS и добавьте или замените нужное. Так как make -e перепишет полностью эту переменную из Makefile вашими.