Установка Linux
Инструкция по установке 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
- Установите в Windows пакет tegra_froyo
- Подключите AC100 в режиме восстановления по USB (кабель USB-miniUSB, USB в комп, miniUSB в AC100, нажимаем и держим Ctrl и ESC, нажимаем и отпускаем кнопку питания, когда загорится светодиод включения, отпускаем Ctrl и ESC).
- Для обнаруженного устройства "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"
- Для удобства в каталог "C:\Program Files\NVIDIA Corporation\tegra_froyo_20101105\" перепишите образ ядра, например, zImage.2.6.38.3-c.bmw+.p12.img
- Из каталога "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, где не нужно ничего устанавливать. Распакуйте архив и действуйте по инструкции.
Ссылки
- Оригинал статьи
- Переразбивка Внутренней Памяти
- sosboot - установка ядра аварийного восстановления
- Коллекция статей про GNU/Linux для AC100