Установка Linux

From Toshiba AC100 wiki
Jump to navigation Jump to search

Инструкция по установке GNU/Linux на Toshiba AC100

Статья написана для AC100-117, но вполне применима и для AC100-116 и AC100-118: у других моделей могут быть другие номера разделов внутреннего SSD, в остальном всё делается так же.

1. Введение. Варианты работы GNU/Linux на AC100

Первый, самый простой. Можно установить в загрузочный раздел ноута (их два) специальный загрузчик и запускать любой подходящий дистрибутив GNU/Linux с карточки SD. Недостаток один: флешка работает медленно, внутренний SSD гораздо быстрее. Зато преимущество несомненно: можно иметь несколько дистрибутивов на разных флешках. Второй, для продвинутых. Можно переписать файловую систему Linux на один из разделов внутреннего SSD устройства, проще всего - на пользовательский раздел (переформатировав его с fat32 в ext2 или ext4), а можно и переразбить SSD, объединив служебные разделы Android и пользовательский раздел FAT32 в один большой раздел и записать rootfs в него.

Сначала реализуем первый вариант (GNU/Linux на карте SD), тем более, что в дальнейшем можно будет скопировать содержимое карточки на один из разделов внутреннего SSD.

2. Подготовка

Утилиты

Для работы с SSD устройства нужна утилита nvflash фирмы Nvidia, а для удобства и скрипт ac100-toolkit. Всё можно взять на http://ac100.163.ru/ (FTP там тоже есть, но /pub в нём недоступен), либо на торрентах. У разработчика ac100-toolkit - Tactilofan - можно взять только сам скрипт, а ссылка на загрузку nvflash в нём битая.

Ошибки в ac100-toolkit-latest.

1. Из-за устаревшей ссылки не работает команда setup-nvflash, не пытайтесь запускать "./ac100-toolkit setup-nvflash"! 2. В тексте USAGE есть ошибки:

--- USAGE.orig    2010-10-19 21:04:06.000000000 +0600
+++ USAGE    2012-03-15 20:52:56.000000000 +0600
@@ -27,7 +27,6 @@

        nvf [options] : execute nvflash with the specified options.
     Ex : Instead of doing
-     $ sudo LD_LIBRARY_PATH=. ./nvflash -r get-partition-table --go
+     $ sudo LD_LIBRARY_PATH=. ./nvflash -r --getpartitiontable ac100-partition-table.txt
     You can do :
-     $ ./ac100-toolkit nvf -r get-partition-table --go
-
+     $ ./ac100-toolkit nvf -r --getpartitiontable ac100-partition-table.txt

3. В программе скрипта не учтены особенности разных shell'ов, в итоге в синтаксисе формируемых строк для командного процессора могут возникнуть ошибки, из-за которых sudo не выполняет команды. Кусок патча:

def execute_nvflash(params): nvflash_path = "./linux4tegra/nvflash/";
- os.system("sudo LD_LIBRARY_PATH="+nvflash_path+" "+nvflash_path+"nvflash "+params);
+ os.system("LD_LIBRARY_PATH="+nvflash_path+" "+nvflash_path+"nvflash "+params);
print "\n" #execute nvflash and return the stdout
def return_nvflash_stdout(params): nvflash_path = "./linux4tegra/nvflash/";
- return commands.getoutput("sudo LD_LIBRARY_PATH="+nvflash_path+" "+nvflash_path+"nvflash "+params);
+ return commands.getoutput("LD_LIBRARY_PATH="+nvflash_path+" "+nvflash_path+"nvflash "+params);

Соответственно, запускать ./ac100-toolkit load-bootloader нужно через sudo (или другим способом с правами суперпользователя). Другие операции нормально выполняются с правами простого пользователя.

Образы загрузчика и GNU/Linux

В Сети уже достаточно много выложено архивов с файловыми системами для AC100. Например, Ubuntu: ubuntu-natty-netbook-2.6.37-1-ac100-rootfs.tgz или несколько rootfs от Marcus, ядра и модули сборки c.bmw. Проще всего взять архив AC100linux-2-2.zip: в нём два варианта загрузчика Linux: AC100linux-2-2Two/img/kernel.37.2.img (загрузка с SD-флешки без таблицы разделов, в командной строке ядра указан root=/dev/mmcblk1) и AC100linux-2-2Two/img/kernel.37.img (загрузка с SD-флешки, на которой есть MBR с единственным разделом: root=/dev/mmcblk1p1). Если в (другой) образ записаны другие параметры ядра, достаточно в копии файла двоичным редактором (например, hedit) заменить "root=/dev/mmcbk0p12 " на "root=/dev/mmcblk1p1 " (лишние символы нужно заменить на пробелы). Эти загрузчики запускают ядро 2.6.37-6 и для работы с ними нужна файловая система с модулями ядра той же версии. Более сложный путь, но при этом получаем более функциональную систему - взять rootfs, например, Ubuntu, а ядро и модули взять самые последние,например, у C.BMW. (В ядре 2.6.38-3 от 9 октября 2011 года нормально работают и звук, и Wi-Fi.)

3. Замена прошивки

Во премя проведения перепрошивки используйте питание ноутбука от розетки: работа от батареи в процессе прошивки не гарантируется. Подключите разъём miniUSB ноутбука к USB-порту компьютера, нажмите на ноутбуке и держите нажатыми Ctrl-ESC, затем нажмите и отпустите кнопку включения — ноут запустится в режим восстановления (экран не включится, но светодиод «включен» — светится). Сначала нужно сделать резервные копии всех разделов на случай какого-либо сбоя, затем записать в шестой раздел загрузчик для запуска Linux с SD:

sudo ./ac100-toolkit load-bootloader
./ac100-toolkit backup-all
./ac100-toolkit restore 6 kernel.37.img

(Ядро обычной загрузки находится в шестом разделе в AC100-117 с оригинальной прошивкой, в другой модели и с другими прошивками раздел может отличаться!)

4. Создание рабочей файловой системы GNU/Linux

4.1. Распаковка rootfs

Нужно взять флешку, создать на ней один раздел ext2 и отформатировать в ext2. Использовать файловую систему ext3 можно только если вам не жалко флешку: журнал ext3 «убьёт» флешку очень быстро (при работе ext3 в журнал постоянно идёт запись, а ресурс флешки сильно ограничен). В файловой системе ext4 предусмотрен режим работы без журнала, если Вы понимаете, как отключить журнал, можете использовать ext4. Затем под Linux (чтобы сохранились права на файлы) смонтируйте флешку и распакуйте на неё скачанный тарбол файловой системы командой

sudo tar --numeric-owner -zxf файл.tgz -C /media/usbdrive

где /media/usbdrive - точка монтирования флешки (посмотрите в выводе команды mount или df).

4.2. Распаковка modules

Затем нужно распаковать туда же модули ядра, если их версия в распакованной файловой системе отличается от версии ядра в загрузчике. Версия модулей ядра в файловой системе указана в имени подкаталога с модулями: lib/modules, например, в архиве ubuntu-natty-netbook-2.6.37-1-ac100-rootfs.tgz есть подкаталог lib/modules/2.6.37-1-ac100 и для работы с ядром версии 2.6.38.3-c.bmw+ нужно распаковать на карточку архив, содержащий lib/modules/2.6.38.3-c.bmw+ (это файл modules.2.6.38.3-c.bmw+.38.tar.gz).

4.3. Редактирование файлов

Если Вы не знаете пароль рута в выбранной rootfs, нужно его изменить. С правами суперпользователя внесите изменение в файл etc/shadow: на примонтированной флешке выполните команду

sudo nano rootfs/etc/shadow

и в редакторе строку

root:$6$Xc7DG9kh$1ESzJ9js3z047cDUq.Xt4jG89r2Isfy9ykGJBKK8KypEjouaYXWgtxY6A4zkin2sW4oRKny3PoxhLZHHVTbMe.:14715:0:99999:7:::

замените на

root::14715:0:99999:7:::

Т.е. уберите набор символов между вторым и третьим двоеточиями. В результате пароль рута станет пустым. Другой вариант: если флешка смонтирована в /media/usb0, выполните команду

sudo chroot /media/usb0 passwd

и введите (дважды) новый пароль рута для Ubuntu.

5. Первая загрузка

Вставьте SD-карточку в Toshiba AC100 и включите его. Загрузится ядро и запустится программа настройки Ubuntu. Не нужно отвечать на вопросы, вместо этого нажмите Ctrl-Alt-F1. (Клавиша F1 у AC100 обозначена значком "перемотка влево", расположена справа от клавиши ESC.) Залогиньтесь пользователем root (пароль был установлен на прошлом этапе) и выполните команды обработки зависимостей модулей ядра и перезагрузки:

depmod -a
reboot

6. Настройка и работа

Теперь можно ответить на вопросы программы настройки Ubuntu и работать. После входа пользователем рекомендую запустить Synaptic и удалить ненужные пакеты, например, пакет Brasero (программа записи CD). После удаления ненужных пакетов всегда выполняйте (в окне терминала) команду удаления пакетов, автоматически установленных по зависимостям и более не требующихся:

apt-get autoremove

После того, как установлен какой-либо (новый) пакет, для экономии места удалите deb-архивы из кэша apt, для чего в окне терминала выполните команду:

apt-get clean

Также, для экономии ресурса флешки, имеет смысл монтировать файловую систему в режиме без обновления полей времени доступа к файлам. Один из способов: в /etc/init.d/ создайте файл remount-root-noatime:

#! /bin/sh /bin/mount `/usr/sbin/rdev` -o remount,noatime,nodiratime

и создайте в /etc/rcS.d симлинк на этот файл следующей командой:

sudo ln -s ../init.d/remount-root-noatime /etc/rcS.d/S10remount-root-noatime

Для автоматического исправления ошибок файловой системы при загрузке отредактируйте файл /etc/default/rcS (требуются права root). В этом файле измените значение переменной FSCKFIX с "no" на "yes":

FSCKFIX=yes

7. Обновление ядра

Когда выйдет новое ядро Linux, заменить ядро можно "изнутри" работающей GNU/Linux. Скачайте ядро и архив с модулями. Предположим, что скачанные файлы называются zImage.2.6.38.3-c.bmw+.sd.img (образ загрузочного раздела) и modules.2.6.38.3-c.bmw+.38.tar.gz (тарбол с модулями ядра). Убедитесь, что тарбол с модулями ядра содержит иерархию /lib/modules:

$ tar -zf modules.2.6.38.3-c.bmw+.38.tar.gz -t | grep /lib/modules | head -n1 ./lib/modules/

Переименуйте подкаталог с модулями ядра, чтобы не возникло коллизий, добавив в конце ".1":

mv /lib/modules/`uname -r` /lib/modules/`uname -r`.1

Для надёжности (это необязательно) подсчитайте размер образа ядра в двухкилобайтных блоках (размер сектора у SSD - 2048 байт):

$ echo `ls -l zImage.2.6.38.3-c.bmw+.sd.img | cut -f 5 -d " "` / 2048 | bc
1463

У меня получилось 1463 блока. Распакуйте тарбол с модулями ядра в корень файловой системы:

sudo tar --numeric-owner -zf modules.2.6.38.3-c.bmw+.38.tar.gz -x -C /

Запишите новое ядро в загрузочный раздел (в AC100-117 с Android 2.1 с оригинальной разбивкой SSD это том /dev/mmcblk0p4, у wapmorgan'а - /dev/mmcblk0p2), в параметра bs укажите размер блока 2048 байт и в параметре count - получившееся число секторов (в моём примере - 1463):

$ sudo dd if=zImage.2.6.38.3-c.bmw+.sd.img of=/dev/mmcblk0p4 bs=2048 count=1463

После загрузки не забудьте выполнить команду обновления списка зависимостей модулей ядра:

$ sudo depmod -a

и перезагрузите ноутбук.

8. Файловая система на внутренней SSD

Чтобы высвободить флешку, можно переписать её содержимое на внутреннюю SSD устройства и заменить ядро. В AC100-117 удобно использовать раздел "пользовательских данных" Андроида, в Linux он доступен как /dev/mmcblk0p12. Выполните команды с правами суперпользователя:

umount /dev/mmcblk0p12
mkfs.ext2 /dev/mmcblk0p12
mount -t ext2 -o noatime,nodiratime,rw /dev/mmcblk0p12 /mnt
cd /mnt dump -f- -0 / | restore -rf-
umount /dev/mmcblk0p12

Затем загрузите в загрузочный раздел SSD ядро, в параметрах которого указан root=/dev/mmcblk0p12, у C.BMW это файл с суффиксом ".p12.img": zImage.2.6.38.3-c.bmw+.p12.img, у образа загрузчика с ядром другого сборщика может понадобиться отредактировать файл в шестнадцатиричном редакторе.

Приложения.

I. Таблица разделов SSD у AC100-117

В linux есть программа "Gnome disk utility" (/usr/bin/palimpsest), которая показывает таблицу разделов SSD, впаянного в AC100, и позволяет переформатировать любой раздел. Изменять таблицу разделов в этой программе не нужно (и бесполезно, и опасно). В таблице - назначение этих разделов у AC100-117 и их соответствие разделам в процедуре repair:

Метка Раздел в linux Назначение Номер раздела для программы nvflash
BCT Boot Config Table 2
PT mmcblk0p1 Partitions table 3
EBT mmcblk0p2 Emergency boot (содержит загрузчик "Fastboot bootloader") 4
SOS mmcblk0p3 sosboot (выбор "1" в emergency boot) 5
LNX mmcblk0p4 обычный загрузчик (ядро и initrd) 6
MBR mmcblk0p5 MBR 7
APP mmcblk0p6 /system в android 8
CAC mmcblk0p7 /cache в android 9
MSC mmcblk0p8 /misc в android 10
EM1 mmcblk0p9 11
UDA mmcblk0p10 /data в android 12
EM2 mmcblk0p11 13
UDB mmcblk0p12 /storage в android

этот раздел в андроиде доступен компьютеру, к которому подключаешь AC100 кабелем miniUSB

14

II. Переразбивка SSD

В архиве содержатся альтернативная таблица разделов и bootstrap (BST) для неё, а также все скрипты, необходимые как для перепрошивки, так и для восстановления оригинальной прошивки. Не забудьте сделать резервную копию всех разделов SSD! Подробно процедура описана в статье «Переразбивка Внутренней Памяти»

III. Запись загрузчика из Windows

  1. Установите в Windows пакет tegra_froyo
  2. Подключите AC100 в режиме восстановления по USB (кабель USB-miniUSB, USB в комп, miniUSB в AC100, нажимаем и держим Ctrl и ESC, нажимаем и отпускаем кнопку питания, когда загорится светодиод включения, отпускаем Ctrl и ESC).
  3. Для обнаруженного устройства "APX" установите драйвер из каталога "C:\Program Files\NVIDIA Corporation\tegra_froyo_20101105\usbpcdriver\" (в Windows 64 - "c:\Program Files (x86)\NVIDIA Corporation\tegra_froyo_20101105\usbpcdriver\") - "NVIDIA USB Boot-recovery driver for Mobile devices"
  4. Для удобства в каталог "C:\Program Files\NVIDIA Corporation\tegra_froyo_20101105\" перепишите образ ядра, например, zImage.2.6.38.3-c.bmw+.p12.img
  5. Из каталога "C:\Program Files\NVIDIA Corporation\tegra_froyo_20101105\" выполните две команды: загрузку бутлодера и запись ядра в загрузочный раздел. Для этого запустите командный процессор CMD.EXE (нажмите сочетание клавиш "Windows" и "R", введите cmd, нажмите "OK") и в его окне выполните три команды:
cd "C:\Program Files\NVIDIA Corporation\tegra_froyo_20101105\"
nvflash --bl bootloader.bin --go
nvflash -r --download 6 "zImage.2.6.38.3-c.bmw+.p12.img --go"

Для ленивых я (grumbler_eburg) подготовил минимальный комплект под Windows, где не нужно ничего устанавливать. Распакуйте архив и действуйте по инструкции.

Ссылки