Сборка Gentoo Linux для Asus Eee PC 1001 PX

Подробно останавливаться на базовой установке Gentoo  я не буду, для этих целей есть рукокнига в которой все расписано от и до. Скачиваем атуальные по дате архивы stage3 и  portage, монтируем заранее подготовленный для этого раздел в /mnt/gentoo и копируем туда наш stage3. Переходим в /mnt/gentoo и распаковываем stage3 командой sudo tar -xvjpf stage3-‘date’.tar.bz2. После распаковки stage нам нужно скопировать архив с portage в /mnt/gentoo/usr и перейдя в эту директорию распаковать его аналогичной командой. Будущая система распакована, зайдем в нее:

sudo mount -t proc none /mnt/gentoo/proc
sudo mount -o bind /dev/ /mnt/gentoo/dev
sudo chroot /mnt/gentoo /bin/bash

Если при выполнении последней команды вы получаете ошибки, стоит убедиться, что система из которой вы делаете chroot — 64 битная.
Выполняем

env-update

и

source /etc/profile

Открываем /etc/make.conf в котором пропишем флаги компилятора и другие опции системы portage по вкусу. Путем проб и ошибок были выбраны такие $CFLAGS

CFLAGS="-march=atom -O2 -mssse3 -mcx16 -msahf -g0 --param l1-cache-size=24 
--param l1-cache-line-size=64 --param l2-cache-size=512 -pipe"

Update:
Так как какой либо производительности от Atom’a ждать не приходится, то можно попробовать собирать систему с оптимизацией по размеру. И выходной бинарник получается на 10 — 20% меньше по размеру и довольно часто все эти оптимизации лишь делают код более тормознутым на слабых машинах. К тому же тратится гораздо меньше времени на сборку. Вобщем на данный момент я собираю всю систему GCC 4.6.2 с такими флагами:

CFLAGS="-march=atom -mtune=atom -Os-g0 --param l1-cache-size=24 
--param l1-cache-line-size=64 --param l2-cache-size=512 -pipe"

Замечу что если при сборке в chroot у вас не собираются какие либо пакеты, то стоит добавить флаг -mno-movbe и в дальнейшем когда система уже будет на целевой машине его можно будет убрать. Так же хочу заметить, что для сборки под архитектуру atom вам потребуется >=GCC-4.5. Если вам не хочется пока использовать компилятор не переведенный в стабильную ветку, то для сборки вместо atom нужно указать -march=core2. Теперь выберем профайл который мы будем использовать на нетбуке. Для получения списка доступных выполняем:

eselect profile list   
  [1]   default/linux/amd64/10.0
  [2]   default/linux/amd64/10.0/desktop
  [3]   default/linux/amd64/10.0/desktop/gnome
  [4]   default/linux/amd64/10.0/desktop/kde
  [5]   default/linux/amd64/10.0/developer
  [6]   default/linux/amd64/10.0/no-multilib *
  [7]   default/linux/amd64/10.0/server
  [8]   hardened/linux/amd64
  [9]   hardened/linux/amd64/no-multilib
  [10]  selinux/2007.0/amd64
  [11]  selinux/2007.0/amd64/hardened
  [12]  selinux/v2refpolicy/amd64
  [13]  selinux/v2refpolicy/amd64/desktop
  [14]  selinux/v2refpolicy/amd64/developer
  [15]  selinux/v2refpolicy/amd64/hardened
  [16]  selinux/v2refpolicy/amd64/server

Как вы видите доступно 16 различных профилей. Часть из них selinux*, часть hardened*, но на нетбуке все это нам явно без надобности. Выбираем что нибудь в диапазоне от 1 до 6, в зависимости от того какое графическое окружение, KDE или GNOME вы предполагаете использовать. Я ипользую профиль no-multilib, который дает возможность собрать pure 64bit систему, другими словами без наличия 32 битных библиотек и возможности исполнения 32 битного кода. Наличие 32 битных библиотек требуется разве что WINE и Skype, ни тем ни другим я не пользуюсь поэтому no-multilib.

Теперь перейдем к настройке ядра, пожалуй самая важная часть. Правильно собранное ядро без лишнего, ненужного на конкретном железе кода, собранное под нужный процессор сказывается на скорость работы системы. Ниже я выложу три конфига ядра. Один из них минимальный из которого выброшен Wi — Fi, веб камера. Второй полный где включен весь функционал. Модули DRI, AGP и другие которые как ни крути всегда подгружаются лучше вкомпилить прямо в ядро, а не модулями. Третий аналогичен минимальному, но с Wi-Fi. Четвертый конфиг чисто для энтузиастов. В конфиге убран весь дебаг с помощью expert mode. Этот конфиг с которым я собираю ядро для себя из разряда на «каждый день». Данное ядро собирается под atom, так что если =>GCC — 4.5, следует собирать под core2/Xeon. Также можно добавить при сборке оптимизацию по размеру. (Optimize for size)

Внимание! Во всех конфигах выключена поддержка исполнения 32 битного кода! Для включения включите IA-32 в меню Executable file format
Если Вам требуется SWAP, то его также необходимо включить перед сборкой ядра в General Setup —> Swap

Теперь функциональные клавиши (Fn+F1,F2…)

Так как в ядре есть модуль eeepc_laptop, то с клавишами особых проблем нет. Но надо добавить в строку параметров передаваемых загрузчиком ядру опции

acpi_osi=Linux и acpi_backlight=vendor

Утилитой xev можно посмотреть какие функциональные клавиши нормально определяются и какое имя им присваивается. У меня заработали все, кроме Fn+F7 которая должна отключать дисплей. Для того чтобы заработали все — установим acpid, запустим acpi_listen и нажмем нужную комбинацию. Приведу пример как сделать так чтобы при закрытии крышки нетбука он впадал в спячку (suspend to RAM). Запускаем acpi_listen и закрываем крышку, после открытия смотрим как определяется это событие. У меня закрытие крышки определилось как button/lid LID close.

Теперь создаем файл /etс/acpi/sleep с таким содержанием:

event=button/lid LID close action=/etc/acpi/sleep.sh

Сохраняем этот файл и пишем скрипт /etc/acpi/sleep.sh c таким содержанием:

#!/bin/bash
sudo sh -c 'echo mem > /sys/power/state'

Сохраняем его, делаем исполняемым с помощью

sudo chmod +x  /etc/acpi/sleep.sh

и теперь при закрытии крышки нетбука он будет уходить в спячку.

Не забываем, что для того чтобы демон acpid загружался при запуске нужно добавить его в автозапуск на уровень boot.

sudo rc-config add acpid boot

Следующий момент касается HDD, точнее частоты парковки головок. Головки паркуются слишком часто, за 5 дней использования судя по показаниям SMART это произошло более 15 тысяч раз. Я понимаю что скорее всего разработчиками предусмотренно такое поведение HDD и гарантированный срок работы он продержится, но лучше свести частоту парковок головок к минимуму или вообще отключить. 

Делается это все с помощью hdparm и уже известной нам acpid. Пишем скрипт который будет при каждой загрузке отключать APM и выставлять нужный AAM. В Gentoo это скрипт /etc/conf.d/local.start. Откроем этот скрипт и пропишем следующее:

#!/bin/bash
hdparm -B 255 /dev/sda
hdparm -M 254 /dev/sda

acpid нам потребуется для того чтобы после выхода из спящего режима настройки которые мы записали выше применялись вновь.

Создаем и открываем для редактирования файл /etc/acpi/events/restore, прописываем

event=button/lid LID open
action=/etc/acpi/restore.sh

закрываем, сохраняем

Создаем скрипт /etc/acpi/restore.sh с таким содержимым:

#!/bin/sh
hdparm -B 255 /dev/sda
hdparm -M 254 /dev/sda

На этом пока все, в дальнейшем статья будет постепенно пополняться

Оцените статью