...

суббота, 28 марта 2015 г.

Запускаем свежайшее ядро Linux на Intel Edison

Ко всемирному дню #ArduinoD15 я подготовил материал по конфигурации и запуску свежайшего ядра Linux на плате Intel Edison (Arduino Edition).



Ранее я уже писал про то, как обеспечить загрузку ванильного ядра на плате Intel Galileo, сейчас же настал черёд для Intel Edison.


На текущий день в ванильных ядрах отсутствует драйвер последовательного порта, что практически делает работу с платой невозможной. Сегодня Greg KH, мейнтенер подсистемы tty, утвердил изменения, которые приносят поддержку Intel Edison High Speed UART в ядро. Реально же в основной ветке изменения появятся только в версии v4.1-rc1.


Итак, приступим. Хочу сразу обратить внимание, что я не буду повторно описывать некоторые действия, приведенные в статье Запускаем ванильное ядро на Intel Galileo. Также предполагаю, что у вас используется стоковая прошивка на базе Yocto.


Подготовка ядра и файловой системы




Прежде всего нам нужно ядро, которое с лёгкостью достаётся из репозитория подсистемы tty (нам нужна будет ветка tty-testing):

mkdir ~/devel
cd ~/devel
git clone git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git
cd ~/devel/linux
git checkout tty-testing


Необходимо внести несколько минимальных правок в конфигурацию по умолчанию, а именно в файл arch/x86/configs/i386_defconfig. Если по каким-то причинам не хочется трогать этот файл, мы его легко можем скопировать с помощью команды cp arch/x86/configs/{i386,eds}_defconfig, и в таком случае использовать eds_defconfig там, где в статье упоминается i386_defconfig.


Итак, было (удаляем строки из файла):



CONFIG_DRM_I915=y





Стало (добавляем строки в файл):


# CONFIG_DRM_I915 is not set

CONFIG_BACKLIGHT_LCD_SUPPORT=y

CONFIG_USB_XHCI_HCD=y

CONFIG_USB_DWC3=y

CONFIG_USB_DWC3_GADGET=y

CONFIG_GPIOLIB=y

CONFIG_GPIO_INTEL_MID=y

CONFIG_INTEL_MID_WATCHDOG=y

CONFIG_X86_EXTENDED_PLATFORM=y

CONFIG_X86_INTEL_MID=y

CONFIG_EFI_STUB=y

CONFIG_EARLY_PRINTK_EFI=y

CONFIG_HSU_DMA=y

CONFIG_HSU_DMA_PCI=y

CONFIG_SERIAL_8250_DMA=y

CONFIG_SERIAL_8250_PCI=y





Данная конфигурация сразу же включит драйверы USB, watchdog, GPIO, HSU.

Собираем полученное:



make i386_defconfig
make -j4




Результатом будет файл arch/x86/boot/bzImage.

Процесс подготовки образа фаловой системы ничем не отличается от описанного ранее за исключением устройства вывода, которое для Intel Edison будет /dev/ttyS2, и соответственно в параметрах конфигурации Buildroot надо указать именно его:



BR2_TARGET_GENERIC_GETTY_PORT=«ttyS2»





В итоге сборки мы получим файл output/images/rootfs.cpio.bz2.

Копируем результаты на eMMC


Полученные в процессе сборки файлы ~/devel/linux/arch/x86/boot/bzImage и

~/devel/buildroot/output/images/rootfs.cpio.bz2 необходимо скопировать на нашу плату под именами vmlinuz.efi и initrd соответственно.


Запускаем плату на стоковой прошивке предварительно переключив её в режим устройства по USB и подключившись кабелем к компьютеру, на котором мы производили сборку. После запуска платы компьютер найдёт устройство USB диска. Оно-то нам и нужно. Копируем наши файлы прямо в корень подключенного диска.


Конфигурируем загрузчик U-Boot


Самая интересная часть рассказа заключается в магических строках, которые нам необходимо записать в конфигурацию U-Boot. Вот, что нам необходимо сделать.



  1. Загрузить плату в командную строку U-Boot нажатием любой клавиши.

  2. Добавить несколько переменных окружения так, чтобы получилось нижеследующее:

    boot_edsboot=zboot 0x100000 0 0x800000 0x800000
    bootargs_edsboot=console=tty1 console=ttyS2,115200n8 root=/dev/ram0 rw initrd=0x800000,8M
    bootcmd_edsboot=setenv bootargs ${bootargs_edsboot}; run load_edsboot; run boot_edsboot
    load_edsboot=load mmc 0:9 0x100000 vmlinuz.efi; load mmc 0:9 0x800000 initrd




    Делается с помощью команды setenv (подробные примеры можно найти здесь).

  3. Сохранить наши изменения не испортив существующие:

    setenv bootcmd_orig ${bootcmd}
    setenv bootcmd ${bootcmd_edsboot}
    saveenv





Теперь можно загрузить плату, например, вот такой командой:

run bootcmd




или нажав кнопку сброса.

Соответственно возвратится к изначальной конфигурации всегда можно запустив:



run bootcmd_orig


И на этом всё!


Посмотреть, что получилось
Welcome to Buildroot

buildroot login: root

# uname -a

Linux buildroot 4.0.0-rc5+ #1 SMP Fri Mar 27 15:15:28 EET 2015 i686 GNU/Linux

# lspci -kn

00:00.0 0600: 8086:1170 (rev 01)

00:01.0 0805: 8086:1190 (rev 01)

00:01.2 0805: 8086:1190 (rev 01)

00:01.3 0805: 8086:1190 (rev 01)

00:02.0 0380: 8086:1182 (rev 01)

00:04.0 0700: 8086:1191 (rev 01)

00:04.1 0700: 8086:1191 (rev 01)

Kernel driver in use: serial

00:04.2 0700: 8086:1191 (rev 01)

Kernel driver in use: serial

00:04.3 0700: 8086:1191 (rev 01)

Kernel driver in use: serial

00:05.0 0700: 8086:1192 (rev 01)

Kernel driver in use: hsu_dma_pci

00:06.0 0880: 8086:1193 (rev 01)

00:06.1 0880: 8086:1193 (rev 01)

00:07.0 0880: 8086:1194 (rev 01)

00:07.1 0880: 8086:1194 (rev 01)

00:07.2 0880: 8086:1194 (rev 01)

00:08.0 0780: 8086:1195 (rev 01)

00:08.1 0780: 8086:1195 (rev 01)

00:08.2 0780: 8086:1195 (rev 01)

00:08.3 0780: 8086:1195 (rev 01)

00:09.0 0780: 8086:1196 (rev 01)

00:09.1 0780: 8086:1196 (rev 01)

00:09.2 0780: 8086:1196 (rev 01)

00:0a.0 0780: 8086:1197 (rev 01)

00:0b.0 1080: 8086:1198 (rev 01)

00:0c.0 0880: 8086:1199 (rev 01)

Kernel driver in use: intel_mid_gpio

00:0d.0 0401: 8086:119a (rev 01)

00:0e.0 0880: 8086:119b (rev 01)

00:11.0 0c03: 8086:119e (rev 01)

Kernel driver in use: dwc3-pci

00:12.0 1180: 8086:119f (rev 01)

00:13.0 0b40: 8086:11a0 (rev 01)

Kernel driver in use: intel_scu_ipc

00:14.0 0b40: 8086:11a1 (rev 01)

00:15.0 0880: 8086:11a2 (rev 01)

00:16.0 0b40: 8086:11a3 (rev 01)

00:16.1 0b40: 8086:11a4 (rev 01)

00:17.0 0880: 8086:11a5 (rev 01)

00:18.0 0380: 8086:11a6 (rev 01)


# cat /proc/interrupts

CPU0 CPU1

15: 0 0 IO-APIC 15-fasteoi watchdog

31: 3 1 IO-APIC 31-fasteoi hsu_dma_pci

34: 50 49 IO-APIC 34-fasteoi xhci-hcd:usb1

48: 0 0 IO-APIC 48-fasteoi intel_scu_ipc

54: 61 65 IO-APIC 54-fasteoi serial





This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий