воскресенье, 4 января 2009 г.

Свой linux на EEE PC 901

Отгремели новогодние салюты, улицы опустели, народ начал отдыхать от праздников. Я решил тоже посвоему отдохнуть, достав месяц лежавший новенький небук ASUS EEE PC 901 с чемто нечто неюзабельным под названием Xandros.
Идея была изначально прикрутить к нему Debian так как в рамках проекта DebianEeePC идет активная работа, однако лень взяла свое и чисто из академического интереса я начал пробовать на нем Gentoo, решив для начала потестировать на нем linux-2.6.28.
Дабы не утруждать себя занудными процессами компиляции на Intel Atom, скачал stage3-i686-20081224.tar.bz2, распаковал его на домашнем компе, "зачрутился" туда, добавил в make.conf оптимизации компилятора(march=prescott и -fomit-frame-pointer), подкрутил USE-флаги, размаскировал linux-headers-2.6.28-r1 и gentoo-sources-2.6.28 и отправил в недолгий путь emerge -vuND @system.
Теперь самое время подумать о загрузке всего этого пробного добра на малыше EEE PC. RSinc'акть rootfs после каждого чиха на него как-то не сруки, поэтому ставим на домашний комп net-misc/dhcp, net-ftp/tftp-hpa и net-fs/nfs-utils-1.1.4 что позволит экспортировать rootfs по сети через NFSv3, а также грузить ядро по сети через PXE.
Теперь собираем ядро 2.6.28 в подоспевшем chroot'е для EEE PC 901. Ключевые моменты конфига ядра таковы: --->
  1. Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/older Xeon)
  2. Symmetric multi-processing support и SMT (Hyperthreading) scheduler support (для BIOS'ов с поддержкой Hyperthreading)
  3. Не включаем в ACPI ASUS/Medion Laptop Extras
  4. PCI Express support и модулем PCI Express Hotplug driver
  5. Networking support--->Networking options--->IP: kernel level autoconfiguration--->IP: DHCP support
  6. Все протоколы для bluetooth и драйвер HCI USB driver тамже
  7. Для wifi Generic IEEE 802.11 Networking Stack (mac80211) и сопутствующие опции
  8. RF switch subsystem support и Input layer to RF switch connector
  9. В Device Drivers: Misc devices--->Eee PC Hotkey Driver (данная опция появится после включения некоторых нежеследующих пунктов), Intel ESB, ICH, PIIX3, PIIX4 PATA/SATA support, Atheros L1E Gigabit Ethernet support, Wireless LAN (IEEE 802.11), модулем Ralink driver support на всякий случай,
  10. Input device support---> Mice---> PS/2 mouse---> Elantech PS/2 protocol extension
  11. I2C support --->Intel 82801 (ICH)
  12. Hardware Monitoring support модулем
  13. Video For Linux--->Enable Video For Linux API 1 compatible Layer модулем, и тутже V4L USB devices--->USB Video Class (UVC)--->UVC input events device support
  14. Direct Rendering Manager--->i915 driver
  15. Backlight & LCD device support--->Lowlevel LCD controls и Lowlevel Backlight controls
  16. Framebuffer Console support и Support for frame buffer devices--->Intel 830M/845G/852GM/855GM/865G/915G/945G/945GM/965G/965GM support
  17. Модулями ALSA и Intel HD Audio (пока не понтно о полной поддержке этой версией, например по части микрофонов)
  18. Generic HID support и USB Human Interface Device
  19. USB модулем, EHCI, UHCI, USB selective suspend/resume and wakeup, The shared table of common (or usual) storage devices(и запомнить об этом на будущее когда тестировать кардридер)
  20. LED Support, Real Time Clock--->PC-style 'CMOS'
  21. В ядро NFS client support--->NFS client support for NFS version 3 и Root file system on NFS, отключить обязательно Register local RPC services via rpcbind v4 дабы не словить проблему на 2.6.28.
Вот общий конфиг ядра, который будет грузиться на нетбуке. Полный рабочий конфиг, как и некоторые другие лежат по ссылке в архиве абзацем ниже. Также там есть патч для ядра, который решает проблему невозможности включения bluetooth.
Теперь самое время настроить удаленную загрузку по сети. Настраиваем DHCP, чтобы тот отавал IP из диапазона(у меня привязки к MAC нет, так по dhcp получает IP только netbook) и отадвал опции root-path на nfs с нашим chroot'ом и параметр filename на загрузчик pxelinux.0. Теперь настраивает tftp-server, я в конфиге указал корень на /var/tftp, положил туда ядро скомпиленное нами, pxelinux.0 и pxelinux.cfg с единым конфигом для всех. Самым вредным оказался nfsd, точнее баг в 2.6.28 ядре: необходимо чтобы опция Register local RPC services via rpcbind v4 была отключена (как впрочем на всякий случай и все остальны касательно ACL, NFSv4 и авторизации). Все, теперь экспортируем наш chroot под видом например таким: /mnt/hd1 192.168.2.20(sync,rw,no_root_squash,no_all_squash). Все сетевая загрузка готова. Архив с конфигами для тех кто плавает в этом вопросе тут.
Тут возникает проблема: baselaout не приспособлен для корня на nfs, поправить это не так сложно, но всетаки проще поставить baselayout2, отказаться от паралельной загрузки сервисов(что по умолчанию) и сразу ядру при загрузке по сети передавать что корень доступен на rw.
В результате получаем рабочую систему для тестирования железа и обкатки скриптов, wifi итд с консоли EEEPC(или по ssh), а также chroot на рабочем компе, в котором можно находится паралельно и ставить всеь необходимый софт без оглядки на ущербность проца.
Теперь потестируем работоспособность железа. Дрова на беспроводную карту(в моем случае это не atheros) за отсутствием их в ядре берем из оверлея arcon - net-wireless/ralink-rt2860. Прописываем в /etc/conf.d/modules автоматическую загрузку модуля pciehp, в /etc/modprobe.d/pciehp пишем options pciehp pciehp_force=1 и делаем update-modules. Устанавливаем sys-power/acpid. Все, перезагружаемся. Наблюдаем очередной сюприз в baselayout, как uevets думает некоторое время и в ключает без особой просьбы bluetooth и wifi. Убеждаемся что модуль ядра pciehp и eeepc_laptop подгружены. Если нет, то надо думать где ошиблись. Ставим sys-apps/pciutils и sys-apps/usbutils.
Теперь, чтобы включать/выключать wifi и bluetooth, смотрим в /sys/class/rfkill/rfkillX/name кто есть кто и посылаем туда 1 или 0 соотвественно(echo 0 > /sys/class/rfkill/rfkill0/state). С камерой маленько по другому но суть таже: echo 1 > /sys/devices/platform/eeepc/camera. После этих манипуляция можно при помощи нехитрых команд lspci, lsusb, dmesg, lsmod убедиться что устройства появляются-пропадают. Убедится в работоспособности звука легко, пока только особо не разбирался почему микшер не показывает регулировки для микровофона. До кардридера пока руки не дошли.
Следующим шагом будет приведение к 2.6.28- и gentoo-особеностям скриптов из серии eeepc-acpi-scripts а также тестирования нового драйвера x11-drivers/xf86-video-intel с mesa из свежего снапшота на предмет выявления какого-либо значимого ускорения от GEM. Также интересно выглядит перспектива потестить новый xf86-input-synaptics-0.99.3 на предмет поддержки каких либо особенностей родного драйвера для тачпада. На соновании чего можно будет сделать вывод - стоит ли писать скрипт для генерации из gentoo-chroot образа без всяких dev-штучек для EEEPC со всякими "извращенно-эффективными" файловыми системами/разделами или же затраты на его создание перекроют затраты сил
на перетаксивание и адаптацию и устаканивание в debian lenny свежих X.org, быстрый parallel-init, свежее ядро, что в перспективе дальнейше работы со всем этим не кажется столь радужным.

7 комментариев:

jetxee комментирует...

О! За конфиг ядра спасибо. Меньше экспериментировать теперь.

sergicus комментирует...

спасибо

Unknown комментирует...

за rfkill спасибо - не знал

falrus комментирует...

Пожалуйста, укажи, что это для 32 битной архитектуры

http://en.gentoo-wiki.com/wiki/Intel_D945CGLF2
Там Atom N330

Макс комментирует...

Автор, а Вы подняли FrameBuffer на 901-м??

NiTr0 комментирует...

А зачем поднимать фреймбуффер, если лучше поднять драйвер с поддержкой DRI?

Анонимный комментирует...

Чтобы была красивая графическая загрузка. :)