понедельник, 9 мая 2016 г.

Установка Linux на устройства на базе Intel Baytrail

Описание процесса установки Gentoo Linux на планшет-трансформер Aser Aspire Switch 10. Часть 1 - создание загрузочного носителя.

Описание особенностей железа

Планшет-ноутбук Acer Aspire switch 10E с аппаратной точки зрения обладает рядом интересных особенностей:
 - UEFI без CSM-режима, т.е. загрузка возможна только через UEFI-режим,
 - UEFI 32х разрядный, хотя процессор поддерживает режим x64,
 - Внутренний накопитель emmc, подключеный по SDIO (не традиционному sata) интерфейсу,
 - WiFi адаптер Realtek 8723BS, подключеный так же через SDIO,
 - Обмен между самим планшетом и док-станцией осуществляется, похоже, через USB3.0 - и уже в док-станции есть USB 2.0 хаб.



Всё это вместе приводит к тому, что для загрузки (и установки) Linux на этом железе нужен загрузочный носитель с 32х разрядным UEFI загрузчиком и относительно свежим ядром, собраным с опциями поддержки SDIO и USB 3.0.

Ближе всего к этим требованиям подошёл Ubuntu - с версией 15.x девайс загружается, есть даже работоспособный графический интерфейс, но не работают клавиатура и тачпад на док-станции.

Мне не удалось найти дистрибутив, который бы работал без серьёзных нареканий при загрузке с LiveUSB, и я решил создать свой.

Создание загрузочного носителя

Создавать свой собственный LiveUSB будем, опираясь на это руководство
Так как объём оперативной памяти на этом планшете - всего 2 Гб, будем использовать 32х-разрядный дистрибутив. 64-х битная версия тоже может работать, обязательно 32х разрядным должен быть только efi-загрузчик.

Получаем дистрибутивы и подготавливаем среду:

Отсюда скачиваем последний архив stage3-i686отсюда скачиваем portage-latest. А ещё скачиваем исходники ядра версии 4.4.3 отсюда. (не из дерева gentoo потому, что на момент написания статьи в дереве были относительно старые ядра, которые корректно не работали на этом железе)

Так же устанавливаем необходимые пакеты:
emerge squashfs-tools

Теперь приступаем собственно к созданию livecd.

Создадим рабочую директорию:

mkdir ~/livecd
mkdir ~/livecd/source

Переносим исходные файлы в рабочую директорию и распаковываем их:

mv ~/Downloads/stage3-i686* ~/livecd/source
mv ~/Downloads/portage-latest.tar. ~/livecd/source
cd ~/livecd/source/
tar -xvjpf ./stage3-*.tar.bz2
tar -xvJpf ./portage-latest.tar.xz -C ./usr

Распаковываем исходники ядра:

mv ~/Downloads/linux-4.4.3.tar.xz ~/livecd/source/
mkdir -p ./usr
mkdir -p ./usr/src
tar xvJpf ./linux-4.4.3.tar.xz -C ./usr/src/
cd ./usr/src/
ln -s ./linux-4.4.3/ ./linux
cd ../../

Далее входим в созданный enviroment:
Сначала - немного приготовлений

cp /etc/resolv.conf ./etc/resolv.conf
mkdir proc dev sys
mount --bind /proc proc
mount --bind /dev dev
mount --bind /sys sys

(если на основной машине у вас 64х разрядная система, добавьте linux32 перед командой chroot):


chroot . /bin/bash --login
env-update && source /etc/profile

С этого момента мы в новом окружении, начинаем конфигурировать систему под загрузку на baytrail.

emerge --sync

Подправим make.conf и выставим USE:
USE="bindist -X -doc livecd minimal userlocales"

emerge -av --update --deep --newuse system
emerge -av --update --deep --newuse world

Дальше собираем ядро:
Помещаем вот этот .config в /usr/src/linux/ (не забудьте переименовать его в .config), после чего запускаем сборку ядра:

emerge bc
emerge genkernel
cd /usr/src/linux
ln -s ./linux-4.4.3/ ./linux
cd ./linux
make && make modules && make modules_install && make install
cp /boot/vmlinuz-4.4.3 /boot/vmlinuz
cp /boot/System.map-4.4.3 /boot/System.map

Так же нам потребуется создать initrd:

genkernel initramfs

После этого устнавливаем вспомогательный софт:

emerge memtest86+ localepurge gentoolkit dmraid livecd-tools app-misc/mc
emerge scripts
emerge mingetty
emerge wpa_supplicant

Правим fstab:

nano /etc/fstab

/dev/loop0        /        squashfs    defaults    0 0
none            /proc        proc        defaults    0 0
none            /dev/shm    tmpfs        defaults    0 0


Небольшая очистка

rm /usr/portage/distfiles/*

exit

Создаём squashfs:

cd ..
mkdir -p target
mksquashfs ./source/ ./target/image.sqfs

Почти готово! Осталось записать это на флешку так, чтобы она распознавалась UEFI устройства. Сделаем это:

Монтируем флешку:

mount /dev/sda1 /mnt/flash/

Монтируем скачанный iso образ:

mount -o loop,ro ~/Downloads/install-x86-minimal-20160412.iso /mnt/storage

Копируем содержимое iso образа на флешку:

cp -r /mnt/storage/* /mnt/flash/

Копируем Initrd

cp ~/livecd/source/boot/initramfs-genkernel-x86-4.4.3 /mnt/flash/initrd


Создаём папки для загрузчика и размещаем сам загрузчик:

mkdir -p  /mnt/flash/efi/
mkdir -p  /mnt/flash/efi/boot/

Теперь нам нужен сам загрузчик. Качаем его отсюда, распаковываем, и кладём файл загрузчика bootia32 на флешку в /efi/boot.

bootia32 нужен потому, что UEFI в этих устройствах - 32х разрядный, хотя процессор может работать в 64х разрядном режиме. Если вдруг душа просит экспериментов, теоретически можно запустить и 64х-разрядный дистрибутив, 32х разрядным должен быть только файл загрузчика.

После этого копируем из нашего chroot-окружения, в котором строили livecd, скомпилированное ядро:

cp  ~/livecd/source/boot/vmlinuz /mnt/flash/
cp ~/livecd/source/boot/System.map /mnt/flash

Копируем squashfs

 cp ~/livecd/target/image.sqfs /mnt/flash/

Осталось совсем немного - нужно создать файл конфигурации загрузчика в efi/boot/grub.cfg. Сначала создадим директорию под него:

mkdir -p /mnt/flash/boot
mkdir -p /mnt/flash/boot/grub

А затем создадим в ней файл в вот таким содержимым:

menuentry "Gentoo" {
    set gfxpayload=keep
    linux    /vmlinuz  real_root=/dev/loop0 looptype=squashfs loop=/image.sqfs vga=791 udev nodevfs cdroot dodmraid
}

Теперь загрузочная UEFI-флешка, способная грузится на железе Intel Baytrail, готова.
Процесс установки системы я опишу в следующей заметке. Пока же, в общих словах - порядок загрузки с этой флешки такой:
1) Убедится, что secure boot включен. (На моём Aspire switch 10 отключение secure boot вело к тому, что ничего, кроме предустановленной ОС, не грузилось ни под каким предлогом).
2) Вставляем в выключеный девайс флешку, включаем, жмём F2 для входа в UEFI, идём в Security->Select an UEFI as trusted for executing , добавляем флешку в разрешённые загрузчики (исключения).
3) Настраиваем порядок загрузки
4) Загружаемся! (возможно, при загрузке у вас появится сообщение типа Invalid loop location, в таком случае нужно набрать следующие команды

mount /dev/sda1 /mnt/cdrom
exit

После этого загрузка продолжится.

1 комментарий:


  1. Acerium Project Ubuntu kernel and Live CD for Acer Aspire Switch 10 SW5-012 Z3537F

    http://acerium.ru/

    ОтветитьУдалить