Глава 4. SDK Линукс - Linux SDK
4.4. Компиляция ядра Linux (Compile the Linux kernel)
1) Запустите скрипт build.sh, не забудьте добавить sudo permissions
test@test:~/orangepi-build$ sudo ./build.sh
2) Выберите пакет ядра, затем нажмите Enter.
3) Затем выберите модель макетной платы
4) Затем появится интерфейс конфигурации ядра, открытый через make menuconfig.
В это время вы можете напрямую изменить конфигурацию ядра. Если вам не нужно изменять конфигурацию ядра,
просто выйдите напрямую. После выхода исходный код ядра будет скомпилирован
a) Если вам не нужно изменять параметры конфигурации ядра, при запуске скрипта build.sh
передайте KERNEL_CONFIGURE = no, чтобы временно заблокировать всплывающий интерфейс конфигурации ядра.
test@test:~/orangepi-build$ sudo ./build.sh KERNEL_CONFIGURE=no
b) Вы также можете установить KERNEL_CONFIGURE = no в файле конфигурации
orangepi-build/userpatches/config-default.conf, чтобы отключить эту функцию навсегда
c) Если при компиляции ядра появляется следующая ошибка (display is too small), это связано с тем,
что интерфейс терминала ПК с Ubuntu слишком мал и интерфейс make menuconfig не отображается.
Настройте терминал ПК с Ubuntu на максимум, а затем повторно запустите скрипт build.sh
5) При компиляции исходного кода ядра будет запрошена следующая информация
a) Версия исходного кода ядра
[ o.k. ] Compiling legacy kernel [ 4.9.170 ]
b) Версия инструмента кросс-компиляции
[ o.k. ] Compiler version [ aarch64-none-linux-gnu-gcc 9.2.1 ]
c) Файл конфигурации по умолчанию, используемый ядром, и путь его хранения
[ o.k. ] Using kernel config file [ config/kernel/linux-sun50iw9-legacy.config ]
d) Если KERNEL_CONFIGURE = yes, последний файл конфигурации .config, используемый ядром,
будет скопирован в output/config. Если конфигурация ядра не изменяется, окончательный файл конфигурации согласуется с файлом
конфигурации по умолчанию.
[ o.k. ] Exporting new kernel config [ output/config/linux-sun50iw9-legacy.config ]
e) Путь к пакету deb, относящемуся к скомпилированному ядру [o.k. ] Целевой каталог [output / debs /]
[ o.k. ] Target directory [ output/debs/ ]
f) Имя пакета скомпилированного образа ядра deb-пакета
[ o.k. ] File name [ linux-image-legacy-sun50iw9_2.0.8_arm64.deb ]
g) Время компиляции
[ o.k. ] Runtime [ 5 min ]
h) В конце концов, он отобразит команду компиляции для перекомпиляции ядра, выбранного в прошлый раз.
Используйте следующую команду без выбора через графический интерфейс, вы можете напрямую
начать компиляцию исходного кода ядра
[ o.k. ] Repeat Build Options [ sudo ./build.sh BOARD=orangepizero2
BRANCH=legacy BUILD_OPT=kernel KERNEL_CONFIGURE=yes ]
6) Просмотрите пакет .deb, связанный с ядром, созданным при компиляции.
a) linux-dtb-legacy-sun50iw9_2.0.8_arm64.deb еще не используется, не волнуйтесь об этом
b) linux-headers-legacy-sun50iw9_2.0.8_arm64.deb содержит файлы заголовков ядра
c) linux-image-legacy-sun50iw9_2.0.8_arm64.deb содержит образ ядра и модуль ядра
test@test: ~/orangepi-build$ ls output/debs/linux-*
output/debs/linux-dtb-legacy-sun50iw9_2.0.8_arm64.deb
output/debs/linux-headers-legacy-sun50iw9_2.0.8_arm64.deb
output/debs/linux-image-legacy-sun50iw9_2.0.8_arm64.deb
7) В созданном deb-пакете linux-image содержатся файлы:
Используйте следующие команды, чтобы распаковать пакет deb
test@test:~/orangepi-build$ cd output/debs
test@test: ~/orangepi_build/output/debs$ mkdir test
test@test: ~/orangepi_build/output/debs$ cp \
linux-image-legacy-sun50iw9_2.0.8_arm64.deb test/
test@test: ~/orangepi_build/output/debs$ cd test
test@test: ~/orangepi_build/output/debs/test$ dpkg -x \
linux-image-legacy-sun50iw9_2.0.8_arm64.deb .
test@test: ~/orangepi_build/output/debs/test$ ls
boot etc lib linux-image-legacy-sun50iw9_2.0.8_arm64.deb usr
Распакованные файлы выглядят следующим образом (8 каталогов, 4 файла) :
test@test: ~/orangepi_build/output/debs/test$ tree -L 2
.
boot
config-4.9.170-sun50iw9
System.map-4.9.170-sun50iw9
vmlinuz-4.9.170-sun50iw9
etc
kernel
lib
modules
linux-image-legacy-sun50iw9_2.0.8_arm64.deb
usr
lib
share
8) Когда ОС сборки orangepi-bulid компилирует исходный код ядра Linux, она сначала
синхронизирует исходный код ядра Linux с исходным кодом ядра Linux на сервере github,
поэтому, если вы хотите изменить исходный код ядра Linux, вы сначала необходимо
отключить функцию обновления исходного кода в противном случае внесенные изменения будут восстановлены.
Вам необходимо завершить компиляцию один раз. Эту функцию можно отключить только после
исходного кода ядра Linux, в противном случае будет предложено,
что исходный код ядра Linux не может быть найден.
Установите для переменной IGNORE_UPDATES в userpatches/config-default.conf значение «no»
test@test:~/orangepi-build$ vim userpatches/config-default.conf
IGNORE_UPDATES="no"
9) Если вы модифицируете ядро, вы можете использовать следующие методы для обновления
ядра и модулей ядра ОС Linux на плате разработки.
a) Загрузите скомпилированный пакет linux deb в ОС linux платы разработки
test@test: ~/orangepi-build$ cd output/debs
test@test: ~/orangepi-build/output/debs$ scp \
linux-image-legacy-sun50iw9_2.0.8_arm64.deb root@192.168.1.207:/root
b) Затем войдите на доску разработки, удалите установленный пакет deb u-boot
root@orangepi: ~# apt purge -y linux-image-legacy-sun50iw9
c) Установите только что загруженный новый пакет u-boot deb
root@orangepi: ~# dpkg -i linux-image-legacy-sun50iw9_2.0.8_arm64.deb
d) Затем перезапустите плату разработки и проверьте, вступили ли в силу изменения, связанные с ядром.