Запустить фондовый ядро на Intel Galileo

Запустить фондовый ядро на Intel Galileo

512

Я не сомневаюсь, что большая часть юзеров Intel Galileo спрашивает, когда, в конце концов , можно будет обновить ядро?

Не так давно Линус Торвальдс поставить метку на репозиторий ядра с текущей версией 4.0-rc2. Как он сам писал, версии ничего не означает, хотя это для нашего реального дела, это много означает, а конкретно, что с этого момента, счастливые владельцы плат на базе Intel Quark SoC можно испытать запустить новое ядро без каких-или доп патчей.
Давайте поглядим, как этого достигнуть. В качестве исходных критерий представить наличие Intel Galileo с вшитыми его по умолчанию в системе на базе Yocto и загрузчик grub.
Все деяния, описанные ниже, предполагается, что вы выполняете на рабочем столе ноутбука либо настольного.
Подготовка ядра
В первую очередь нам необходимо ядро, которое просто перебегает из репозитория (нам нужна определенная версия 4.0-rc2):
mkdir ~/devel
cd ~/devel
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git checkout v4.0-rc2
cd ~/devel/linux
Ведь мы помним, что процессор 32-бит, даже с способностями! Нужно внести несколько незначимых конфигураций в конфигурации по умолчанию, а конкретно в файле arch/x86/configs/i386_defconfig.
Так, он (удалить строчки из файла):
CONFIG_SMP=y
CONFIG_DRM_I915=y

Была добавлена строчка в файле):
# CONFIG_DRM_I915 не установлено
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_M586TSC=y
CONFIG_X86_INTEL_QUARK=y
CONFIG_X86_UP_IOAPIC=y
CONFIG_X86_EXTENDED_PLATFORM=y
CONFIG_EFI_STUB=y
CONFIG_EARLY_PRINTK_EFI=y
CONFIG_PM_RUNTIME=y
CONFIG_SERIAL_8250_PCI=y
Другие характеристики остались постоянными.
Собранные получил:
сделать i386_defconfig
make-j4

Итог будет в файле arch/x86/boot/bzImage.
Подготовка вида корневой системы
Чтоб сильно не заморачиваться, мы будем применять распределение в Buildroot.
Скачать его из репозитория, выберите последнюю версию (2015.02):
cd ~/devel
git clone git://git.buildroot.net/buildroot
git checkout 2015.02
cd-buildroot

Сделать минимальную конфигурацию для сборки, к примеру, в файле configs/galileo_defconfig:
# Архитектура
BR2_i386=y
BR2_x86_i586=y
# Различное
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y
BR2_TARGET_GENERIC_GETTY_PORT=»ttyS1″
# Root FS
# BR2_TARGET_ROOTFS_TAR не установлено
BR2_TARGET_ROOTFS_CPIO=y
BR2_TARGET_ROOTFS_CPIO_BZIP2=y
# Пакеты
BR2_PACKAGE_KEXEC=y
BR2_PACKAGE_KEXEC_ZLIB=y
BR2_PACKAGE_LRZSZ=y
BR2_PACKAGE_SCREEN=y
BR2_PACKAGE_PCIUTILS=y
BR2_PACKAGE_DMIDECODE=y
BR2_PACKAGE_BUSYBOX_WATCHDOG=y
Собрать initrd пары команд:
сделать galileo_defconfig
сделать

В итоге мы получим файл output/images/rootfs.cpio.bz2.
Обновления результатов на микро SD
Так, опосля прошлых шагов мы получили последующие файлы:
~/devel/linux/arch/x86/boot/bzImage
~/devel/buildroot/output/images/rootfs.cpio.bz2
Приготовить micro SD card 64 МБ либо наиболее (давайте представим, что вы уже сделали таблицу разделов):
mkfs.vfat /dev/sdc1
udisks —mount /dev/sdc1
Устанавливается /org/freedesktop/UDisks/devices/sdc1 /media/FB87-F683

И скопировать приобретенные ранее файлы:
cp ~/devel/linux/arch/x86/boot/bzImage /media/FB87-F683/vmlinuz.efi
cp ~/devel/buildroot/output/images/rootfs.cpio.bz2 /media/FB87-F683/initrd
mkdir-p /media/FB87-F683/boot/grub

Добавить опции для grub (/media/FB87-F683/boot/grub/grub.conf):
по умолчанию 0
тайм-аут 3
заглавие Linux на Intel Galileo
root (hd0,0)
kernel /vmlinuz.efi console=ttyS1,115200n8
initrd /initrd
Попытайтесь скачать. Аммония-карту и вставил ее в карты.
[ 15.806320] random: dd urandom читать с 4 бита энтропии доступен
изготовлено. Пуск сети… [ 15.862745] ip (887) употребляется greatest stack depth: 6304 байтов слева
[ 15.886757] ip (889) применять greatest stack depth: 5824 байтов слева
Начиная udhcpc… [ 15.739672] mdev (869), используемые greatest stack depth: 6904 байтов слева
Начиная watchdog… Инициализация генератора случайных чисел… Крайние сообщения на консоли… [ 14.632322] mount (853), используемые greatest stack depth: 6968 байтов слева
[ 14.668185] mkdir (856), используемые greatest stack depth: 6940 байтов слева
[ 14.694005] mount (858), используемые greatest stack depth: 6908 байтов слева
Начиная журнальчика: ОК
Начиная mdev…
Добро пожаловать в Buildroot
buildroot login: root
# uname-a
Linux buildroot 4.0.0-rc2+ #24 Thu Mar 5 12:58:36 EET 2015 i586 GNU/Linux

В качестве бонуса, перечень последующих характеристик в конфигурации ядра для поддержки разных аппаратных. Вуаля!
В комплекте SDHCI, девайс USB, ethernet, SCH GPIO, watchdog:
CONFIG_MMC=y
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_PCI=y
CONFIG_USB_GADGET=y
CONFIG_USB_EG20T=y
CONFIG_STMMAC_ETH=y
CONFIG_STMMAC_PCI=y
CONFIG_GPIOLIB=y
CONFIG_GPIO_SCH=y
CONFIG_IE6XX_WDT=y
Чтоб включить SPI пригодится патч:
CONFIG_SPI=y
CONFIG_SPI_PXA2XX_PCI=y
CONFIG_SPI_PXA2XX=y Скажем Y тут, раз у вас есть Quark система, основанная на таковых как Arduino

SPI включен чрезвычайно просто. — а/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -499,6 +499,7 @@ config X86_INTEL_QUARK
зависит от X86_IO_APIC
выберите IOSF_MBI
выберите INTEL_IMR
+ выберите COMMON_CLK
—help—
Выберите, чтоб включить поддержку Quark SoC X1000.
Для I2C и GPIO нужно приложить патч с водителем и корректирующие fix ниже:
— а/drivers/gpio/Kconfig
+++ б/drivers/gpio/Kconfig
@@ -148,8 +148, 7мм @@ config GPIO_GENERIC_PLATFORM

config GPIO_DWAPB
с 3-мя состояниями «Synopsys DesignWare APB GPIO драйвер»
— зависит от ARM
— зависит от того, OF_GPIO
+ зависит от ARM && OF_GPIO) || X86_INTEL_QUARK
выберите GPIO_GENERIC
выберите GENERIC_IRQ_CHIP
справка

Включены только несколько вариантов. CONFIG_GPIO_DWAPB=y
CONFIG_I2C_DESIGNWARE_PLATFORM=y
CONFIG_MFD_INTEL_QUARK_I2C_GPIO=y
CONFIG_DMI=y
Скачать обновленное ядро и наслаждаемся результатом:
Вывод lspci# lspci-НК
00:00.0 0600: 8086:0958
Подсистемы: 8086:095e
Kernel driver in use: iosf_mbi_pci
00:14.0 0805: 8086:08a7 (rev 10)
Подсистемы: 8086:08a7
Kernel driver in use: sdhci-pci
00:14.1 0700: 8086:0936 (rev 10)
Подсистемы: 8086:0936
Kernel driver in use: serial
00:14.2 0c03: 8086:0939 (rev 10)
Подсистемы: 8086:0939
Kernel driver in use: pch_udc
00:14.3 0c03: 8086:0939 (rev 10)
Подсистемы: 8086:0939
Kernel driver in use: ehci-pci
00:14.4 0c03: 8086:093a (rev 10)
Подсистемы: 8086:093a
Kernel driver in use: ohci-pci
00:14.5 0700: 8086:0936 (rev 10)
Подсистемы: 8086:0936
Kernel driver in use: serial
00:14.6 0200: 8086:0937 (rev 10)
Подсистемы: 8086:0937
Kernel driver in use: stmmaceth
00:14.7 0200: 8086:0937 (rev 10)
Подсистемы: 8086:0937
Kernel driver in use: stmmaceth
00:15.0 0c80: 8086:0935 (rev 10)
Подсистемы: 8086:0935
Kernel driver in use: pxa2xx_spi_pci
00:15.1 0c80: 8086:0935 (rev 10)
Подсистемы: 8086:0935
Kernel driver in use: pxa2xx_spi_pci
00:15.2 0c80: 8086:0934 (rev 10)
Подсистемы: 8086:0934
Kernel driver in use: intel_quark_mfd_i2c_gpio
00:17.0 0604: 8086:11c3
Kernel driver in use: pcieport
00:17.1 0604: 8086:11c4
Kernel driver in use: pcieport
00:1f.0 0601: 8086:095e
Подсистемы: 8086:095e
Kernel driver in use: lpc_sch

Содержимое /proc/interrupts# cat /proc/interrupts
CPU0
0: 113 IO-APIC-edge Таймер
8: 1 IO-APIC-edge rtc0
9: 0 IO-APIC-fasteoi acpi
16: 31 IO-APIC 16-fasteoi pxa2xx-spi.168, ohci_hcd:usb2, mmc0
17: 255 IO-APIC 17-fasteoi pxa2xx-spi.169, серийный
18: 0 IO-APIC 18-fasteoi i2c_designware, gpio-dwapb-МФД, pch_udc
19: 0 IO-APIC 19-fasteoi ehci_hcd:usb1
habrahabr.ru