?

Log in

No account? Create an account

frost_11

Apr. 30th, 2012

01:26 pm - Изготовление книги в домашних условиях

Почему бывает важно самому сделать бумажную копию книги в век электронных читалок?

Во-первых, электронная читалка показывает всего лишь жалкий огрызок одной странички, разворот бумажной книги больше в четыре, а то и восемь раз.
Во-вторых, разрешение бумаги равно разрешению принтера и нет проблем напечатать сложную картинку в 600 dpi, а у читалки хорошо, если в десять раз меньше.
В-третьих, бумажную книгу можно дополнить неформатными вкладками.
В-четвёртых, иногда надо работать сразу с несколькими источниками, и держать перед глазами три-четыре издания гораздо проще, если они на бумаге.
В-пятых, такую книгу можно взять туда, куда электронику брать страшно - в гараж, в поход, дальнюю поездку, где могут быть проблекы с поиском батареек...
В-шестых, на бумаге можно оформить высокохудожественное издание. Как насчёт иллюстраций от руки? Рукописный шрифт?

Да и мало ли для чего. Каждый решает сам.

Для работы понадобится

1. Бумага для лазерного принтера, желательно высокого качества, категории А, плотностью 80-90 г/м2. Она долговечна, хорошо держит печать, не желтеет, не обтрёпывается.
2. Ножницы.
3. Суровые капроновые нитки.
4. Толстая игла.
5. Жидкий клей ПВА.
6. Кисть для клея.
7. Линейка.
8. Карандаш.
9. Шило.
10. Две досочки размером не менее 210 мм на 50 мм и толщиной не менее 10 мм.
11. Две струбцины.
12. Лазерный принтер.
Опционально, для особо прочного переплёта - кусок прочной натуральной нетянущейся ткани.
Опционально, для упрощения склеивания - пищевая фольга.

Подготовка электронного макета

Сначала необходимо подготовить электронный макет для распечатки. Печать должна быть выполнена не лист за листом, как обычно это бывает, а буклетами. То есть на одном листе формата А4 надо распечатать четыре страницы с двух оборотов. С этой задачей неплохо справляется DjView - в пункте печать есть закладка "Буклет", которая и позволяет добиться искомого. Надо помнить, что для этого каждая страница должна быть представлена отдельно.

Перегнать содержимое в формат djvu, а также скорректировать изображение и разбить по страницам поможет Scan Tailor - ещё одна свободная программа.

Если изначально книга представлена в формате doc, то с помощью OpenOffice его можно сконвертировать в pdf, далее применить конвертер pdf to djvu, а потом открыть в DjView и распечатать буклетами.

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

Предпочтительно сначала распечатать первый буклет, чтобы убедиться в правильности настроек, а потом уже делать всю книгу целиком, так как могут проявиться ошибки. Проверить правильность ориентации, порядка следования страниц, расположения печатной области на страницах. Обязательно смотреть на просвет.

Оптимальный размер буклета от 20 до 36 страниц.
papers








































Изготовление вкладок
В книге можно сделать вкладки, которых не было в оригинальном издании или увеличить существующие иллюстрации. Для этого нужно сделать распечатку на отдельном листе, который вшивается в буклет. Размер вкладки в сложенном состоянии не должен превышать, а желательно быть даже несколько меньше размера основной страницы.

Изготовление буклетов
Полученные распечатки проверяем на наличие брака, и в случае обнаружения оного делаем исправленные буклеты. Качественные распечатки сгибаем по обозначенным линиям и получаем такие тетрадки.

booklets
Теперь разворачиваем тетрадки и на сгибе наносим разметку под прошивку. Достаточно стежка через 1 см. По разметке аккуратно прокалываем отверстия шилом.
На фотографии ниже - тетрадка со вкладкой.



Далее суровой ниткой прошиваем тетрадки (для особой прочности можно пришивать их к материи, вплотную друг к другу) и теперь всё готово для окончательной сборки книги.

Сборка книги

Вырезаем из бумаги полоски длиной 21 см и шириной 2 см (при условии, что распечатывали листы на формате А4) и аккуратно складываем их вдоль.

Намазываем их клеем ПВА и проклеиваем соседние буклеты. Намазывать надо аккуратно, иначе потом страницы склеятся и книга будет испорчена. Для надёжности можно проложить склеиваемые страницы пищевой фольгой.

Склеив буклеты, сразу же до высыхания клея надо их выровнять и зажать между струбцинами. Это тоже важно сделать аккуратно - насколько ровно удалось собрать книгу, настолько ровной она и останется. Корешок книги обильно смазать клеем ПВА и наклеить на неё полоску бумаги оставляя с краёв примерно по 1 см.

После высыхания клея, снимаем струбцины и промазываем края оставшейся полоски бумаги, загибаем и приклеиваем ёё на крайние страницы.

Обложка

Обложку можно сделать мягкой или твёрдой.

Для мягкой обложки понадобится кусок ватмана или картона небольшой плотности. Вырезаем прямоугольник из расчёта размера листа 210 мм на 300 мм, добавляем толщину корешка и запас на толщину самого картона. Размечаем, складываем. Намазываем клеем ПВА корешок книги и приклеиваем будущую обложку. После высыхания намазываем клеем крайние страницы и приклеиваем их к внутренней стороне обложки. Книга готова.

Mar. 6th, 2012

11:40 pm - Ложь Акунина и "Лиги избирателей" про массовую подмену протоколов. ЭТО ВАЖНО!

Оригинал взят у politrash в Ложь Акунина и "Лиги избирателей" про массовую подмену протоколов. ЭТО ВАЖНО!

Продолжаем разоблачать фальсификации кровавого режима. Так как в рамках онлайн-трансляции с избирательных участков, удалось выявить всего лишь меньше десятка вбросов на все 95 тысяч участков по всей стране, разоблачение избирательных зверств режима перетекло в иное поле. А именно в обсуждение "каруселей по дополнительным спискам" и срывание покровов с подмены итоговых протоколов.

Что касается каруселей и доп. списков - крайне рекомендую прочитать вот этот пост, где подобная "карусель", никакой каруселью в итоге не оказавшаяся, была разоблачена до своего логического конца - а именно до стройки, откуда и привезли несчастных рабочих, которые, к тому же, отдали свои голоса далеко не только Путину.

А вот о подмене итоговых протоколов УИКов мы сейчас с вами как раз поговорим. Для затравки:



ПРОЧИТАЙТЕ. ЭТО ВАЖНО!Collapse )


В общем, дорогие мои друзья, завтра в 11:30 представители "Лиги избирателей" должны будут публично признать легитимность и необычайную честность (как минимум с 1995 года) выборов, состоявшихся 4 марта. По крайней мере, именно об этом говорят данные, представленные в их собственной системе. 

А если они заявят обратное, знайте - они лжецы и провокаторы. Все. Включая Пархоменко, Быкова, Парфенова, Акунина, Лазареву, Улицкую, Шевчука и прочих. Именно так. Лжецы и провокаторы.

P.S. Администраторы "Сводного протокола" экстренно удаляют указанные в этом посте протоколы со своего сайта, потому что они, как я уже и сказал, лжецы и провокаторы. Но даже и без них вы можете убедиться во всем лично - статистика по протоколам и нарушениям ни чуть не изменилась. Да и удаленные с сайта протоколы, кэш гугла помнит.

P.P.S. У меня огромная просьба к вам, дорогие читатели, максимально распространить этот пост до начала завтрашней пресс-конференции вышеобозначенных персонажей. А если у кого будет возможность задать им прямой вопрос непосредственно на конференции - задать его. Давайте заставим их говорить правду.


Oct. 24th, 2009

07:14 pm - Хак ради хака

Аппаратная начинка

Устройство WRV54G в целом очень напоминает изученный ранее NSLU2. 8Мб flash, 32Мб Ram, процессор XScale ixp425, работающий на частоте 266 МГц. Самое главное - на плате распаян слот miniPCI, и есть второй, разведённый, но не распаяный. Это позволяет подключить два произвольных miniPCI устройства, что делает возможности модернизации очень широкими. Хотя данный стандарт уже уходит, но пока ещё можно купить самые разнообразные устройства этого типа.

Программная начинка

Программное обеспечение маршрутизатора выполнено на базе пропиетарной платформы OpenRG. (Интересно, что здесь open?) Подробнее о ней можно почитать здесь. К сожалению, она не предоставляет каких-либо возможностей расширения и модернизации. Начальный загрузчик rgloader является закрытой разработкой и частному лицу найти документацию по его конфигурированию затруднительно. Формат официального firmware экзотический, и требует дополнительного изучения в случае его использования. Разбиение файловой системы в штатном варианте крайне неудачно - squashfs гораздо предпочтительнее.

Существующие недостатки приводят к выводу, что проще будет заменить её целиком. Описанные способы достучаться до консоли разнятся между собой, и, к сожалению, ни один из них не оказался действенным. Возможно, причиной этого стало отсутствие такой возможности в последних версиях прошивки, одна из которых была на моём маршрутизаторе, но старых версий обнаружить не удалось. Поэтому был выбран радикальный метод - JTAG.

Материалы по теме

Перед началом работ стоит ознакомится с имеющимися материалами, благо их в сети немало.

Сайт проекта openwrt. Базовая информация, содержит ошибки (!). Содержит ссылку на модернизированный вариант сборки RedBoot подключёнными модулями сетевых интерфейсов, который позволяет осуществить настройку через telnet.

Описание хакнутого устройства. Попытка создать тематический проект, который позже влился в openwrt, но полностью готового к употреблению решения не создал. Содержит ошибки (!)

Ещё одно подробное описание хакнутого устройства.

Материалы по семейству XScale ixp4xx

Материалы по установке  linux на аналогичное устройство NSLU2. Содержит множество полезных how-to, подходящих и для wrv54g. Навигация оставляет желать лучшего, и некоторые материалы доступны только при поиске. Например, как прошить начальный загрузчик при помощи JTAG.

Ещё один проект. Пример использования загрузчика RedBoot.

Доработки

Корпус крепится на саморезах, замаскированных под резиновыми ножками, и процесс разборки не представляет из себя ребуса.  Вид платы после снятия крышки представлен ниже. Фотография сделана post factum.
linksys wrv54g

Плата закреплена на пластиковых клапанах (1). Иных креплений не обнаружено. Особенностью данного роутера является наличие слота miniPCI, в котором установлен wifi адаптер на 54Мбит. Логичным желанием было бы его заменить на что-то более подходящее. Адаптер припаян к слоту в точках (2). Освободить его оттуда при помощи паяльника и оловоотсоса не представляет труда, но надо помнить, что после этого из-за оставшегося слоя олова слот не будет защёлкиваться при надавливании платы miniPCI, и металлические клапана надо отжимать, иначе есть риск сломать слот. Адаптер подключается к антенному проводу не через разъём, а просто припаян (5). В корпусе есть штатное место для установки второй антенны (7). Есть возможность напаять ещё один слот на плату (6), но это требует определённого навыка и хорошего оборудования. Для перепрошивки потребуется распаять разъём JTAG (3), для доступа к консоли - разъём последовательного порта (4).

Так выглядит плата после доработок.
linksys wrv54g

Больше никаких особенных возможностей для доработок плата не предоставляет. Даже найти слот miniPCI оказалось нереально сложно. Пожалуй, есть резон распаять и задействовать дополнительный светодиод, но у меня пока не дошли до этого руки.

Распайка разъёма JTAG

На плате под обозначением J2 находится разводка под стандартный 20-pin разъём JTAG. Схема разводки указана на фотографии ниже.
20pin JTAG

Схема разводки детально

c[] LED5+3.3V -- 1o o2 -- ncnTRST -- 3o o4 -- GNDTDI -- 5o o6 -- GNDTMS -- 7o o8 -- GNDTCK -- 9o o10 - GNDGND - 11o o12 - GNDTDO - 13o o14 - GNDnRESET - 15o o16 - GNDnc - 17o o18 - GNDnc - 19o o20 - GND
При распайке разъёма следует учесть, что отверстия выполнены с металлизацией, а толщина медных проводников на этой плате значительная и работает неплохим радиатором. То есть при попытке раплавить припой, тепло быстро отводится на всю поверхность платы. Чтобы очистить отверстия от припоя быстро, советую запастить паяльником помощнее - 40 Ватт как минимум. И оловоотсос как само собой разумеющееся.

Изготовление JTAG кабеля

Среди разработчиков JTAG кабель не является экзотикой, и в специализированных магазинах всегда можно купить готовый. Но обычно они стоят достаточно дорого, и для работы раз от разу эта покупка была бы нерациональной.

Чаще всего для подобных действий используется хакерский мод кабеля DLC5, также известного под названием Xilinx, Xilinx III, Parallel cable III. Но большая часть хакерских утилит, умеющая работать с ним, предназначена только для роутера wrt54g и мне не подходит. Универсальные утилиты лучше поддерживают другой тип кабеля - WIGGLER, который я модифицировал в том же ключе. Он так же подключается к LPT порту компьютера. Cхему привожу ниже.

wiggler hack mod

Этот мод, как и DLC5,  будет особенно чувствителен к качеству сборки и длине проводов, так как у него тоже отсутствует микросхема буфера. В качестве проводников я использовал обрезок ethernet кабеля длиной около 30 сантиметров. Его разноцветная изоляция помогает не запутаться во время пайки. Длины оказалось достаточно, а кабель работал безупречно.

Такой вид имеет готовый кабель
wiggler

На этом паяльник можно отложить.

Загрузчик

Наиболее очевидным является выбор загрузчика RedBoot. Это открытый программный продукт, хорошо документированный и распространяющийся по лицензии GPL, материалы по которому можно найти на официальном сайте. Аналогичное устройство NSLU2 также использует загрузчик RedBoot. Intel официально рекомендует его к использованию и предлагает исходный код и готовые сборки.

Предполагается, что штатным образом конфигурирование загрузчика осуществляется через терминал, но это делает обязательным распайку на плате устройства разъёма последовательного порта и создания устройства сопряжения. Однако существует самосборный вариант RedBoot с подключёнными модулями сетевых интерфейсов, который позволяет осуществить настройку через telnet. У некоторых готовых сборок от Intel тоже заявляется возможность работы через сеть, но я это не проверял. Кстати, сборка от Intel, и вышеуказанная самодельная сборка имеют одинаковую версию - 2.04.

Иногда в качестве загрузчика применяется u-boot, но материалов по нему (применительно к данному устройству) гораздо меньше и принципиальных преимуществ от такого выбора не видно.

Лирическое отступление

Потенциально есть возможность значительно упростить процесс формирования прошивки. Так как аппаратно WRV54g в известной степени совместим с NSLU2, то, используя загрузчик от прошивки NSLU2, при помощи кнопки Reset можно войти в инженерный режим, и далее, используя утилиту upslug2, обновить прошивку целиком. Этот процесс описан в моей предыдущей заметке.

По слухам, таким загрузчиком обладает прошивка Unslung версии 5.5. В более поздних версиях эта возможность заблокирована.

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

$ dd if=Unslung-5.5-beta.bin of=redboot.bin ibs=1 count=262144 conv=swab

Таким образом будет создан файл redboot.bin с загрузчиком.

Но на данном пути возникают следующие трудности. Во-первых, нет гарантии, что данный режим действительно работает на WRV54g. Во-вторых, для инициализации данного режима требуется очень точно выдержать паузу при нажатой кнопке Reset. У NSLU2 при этом начинал моргать светодиод, но для WRV54g может потребоваться аппаратная модификация. Поэтому я пошел по каноническому пути.Установка загрузчика
Для прошивки с помощью JTAG существует множество утилит. Одна из наиболее подходящих - UrJtag. Скачать её можно здесь. Пользоваться ей очень просто - она предоставляет консольный интерфейс с подробной справкой. Кроме того есть хороший справочник, который находится здесь. Особенно следует обратить внимание на третью главу, где описываются способы использования.

Запускаем приложение, попадаем в консоль. (Программируемое устройство в данный момент должно быть включено, а кабель подключён.)

jtag>

Самые важные команды. Список доступных команд

jtag> help

Справка по использованию команды

jtag> help <имя команды>

Можем приступать к работе. Сначала нужно инициализировать кабель.

jtag> cable WIGGLER parallel 0x378

Здесь WIGGLER - тип используемого кабеля.

parallel - тип используемого подключения.

0x378 - адрес порта. Нужно указать настоящий адрес порта. По молчанию он 0x378, но может быть и другим.


Теперь надо определить устройство.

jtag> detect

Появится сообщение с указанием типа процессора - ixp425. Отсутствие оного говорит об ошибках в конфигурации, или возможных проблемах с кабелем или устройством.

Инициализация шины. Делается для очистки совести, так как по умолчанию она уже инициализирована.

jtag> initbus ixp425

Инициализация flash памяти. Указывается начальный адрес с которого будет модифицироваться содержимое. Адрес flash начинается с 0x050000000 (пятёрка и семь нулей).

jtag> detectflash 0x050000000

Переход в режим bigEndian. Процессор ixp425 может работать и в bigEndian и в littleEndian режимах, но закрытые сетевые драйверы Intel поставляет только в bigEndian формате.

jtag> endian big

Создаём резервную копию образа. Запись данных из flash в файл на диске. Ещё раз напомню - скорость работы с самопальным кабелем составляет всего 86 байт в секунду. То есть 8Мб будут считываться 27 часов 5 минут.

jtag> readmem 0x050000000 0x0800000 backup.bin

Здесь 0x050000000 - начальный адрес;
0x0800000 - общее количество считанных байт в hex формате. (8Мб в данном случае)
backup.bin - имя файла, куда будет происходить сохранение.

Желательно записать данные в файл несколько раз, а потом сравнить полученные результаты. Если кабель работает хорошо, то результаты отличаться не будут. Различия указывают на недостаточную мощность LPT-порта или большие потери в кабеле. Впору задуматься о полноценном варианте кабеля.

Очистка flash. Тоже выполняется на всякий случай - при записи блоки предварительно очищаются.

jtag> eraseflash 0x050000000 8

Здесь 0x050000000 - начальных адрес, с которого выполняется очистка.
8 - размер очищаемой области в блоках. В моём случае каждый блок - 64Кб.

Запись образа во flash.

jtag> flashmem 0x050000000 redboot-ROM.bin

Здесь 0x050000000 - начальный адрес.
redboot-ROM.bin - имя записываемого образа

После записи программа проверяет записанное.  На этом устройство можно выключить и отключить кабель JTAG.

Подготовка образов

В данном случае выбор OpenWRT будет практически безальтернативным. Во-первых, он поддерживает устройства на чипе ixp425. Во-вторых, это полнофункциональный дистрибутив linux, содержащий необходимую мне функциональность. И самое главное - в процессе сборки создаются образы, предназначенные для заливки в flash.

Для работы понадобится собрать openwrt-gtwx5715-zImage и openwrt-ixp4xx-squashfs.img из исходников, которые можно взять здесь. На момент написания статьи была доступна версия 8.09.2, но со временем она может обновиться. Собранный по умолчанию openwrt-ixp4xx-zImage брать не стоит, так как он не содержит модуля, поддерживающего сетевой интерфейс.

Данная версия содержит необходимые патчи для моего роутера, но почему-то они находятся в дезактивированном состоянии. Найдём упоминания о поддерживаемых устройствах.

> grep -R nslu2 *

Интересующий файл находится по адресу

./scrips/arm-magic.sh

В нём нужно описать "boadname machtypeid". Зная, что плата роутера именуется как gwtx5715, отправим соответствующий запрос в поиск. Обнаруживается, что MachTypeId соответствует 641. Внесём эту правку в файл.

for board in "gtwx5715 641" "avila 526"....

Теперь необходимо настроить сборку образа

> make menuconfig

В этом меню выбираем

Target System -> Intel IXP4xx[2.6]
Target Images -> jffs2,squashfs
Kernel-modules -> Network devices -> kmod-ixp4xx-npe
Kernel-modules -> Other modules-> kmod-spi-ks8995

Теперь сборка

> make -j2

Если всё было правильно, то мы получим образы openwrt-gtwx5715-zImage и openwrt-ixp4xx-squashfs.img

Главное достоинство подключения по сети - возможность быстрой заливки образов и сохранения резервных копий. Для этого требуется поднять tftp или http сервер. Для моего OpenSuSe он есть в составе дистрибутива. Для Windows наиболее известен tftpd32, который можно взять здесь.

Размещаем скачанные образы openwrt-gtwx5715-zImage и openwrt-ixp4xx-squashfs.img в корневой папке сервера. Для моего OpenSuSe это будет /tftpboot.

Прошивка

Если всё было сделано согласно данной инструкции, и была прошита сборка RedBoot, поддерживающая сеть, то дальше можно работать через telnet. Для указанной сборки после загрузки будет активирован интерфейс eth0, ip адрес - 192.168.1.1, маска подсети 255.255.255.0, порт - 9000. (Если использовать сборку не поддерживающую сеть, то подключиться к терминалу можно через последовательный порт, но для этого необходимо изготовить или купить преобразователь, что не всегда охота. С другой стороны, без него прийдётся настраивать устройство вслепую, что зачастую неудобно).

Подключаем сетевой кабель к порту WAN. Где-то через три минуты после включения, устройство будет готово к работе. Пингуем порт

> ping 192.168.1.1

Подключаемся по telnet

> telnet 192.168.1.1 9000

После этого должна появится командная строка RedBoot.

RedBoot>

Инициализируем Flash Image System (FIS) и всю flash память, за исключением первых блоков, где находится сам загрузчик.

RedBoot> fis init -f

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

RedBoot> fis list
Name              FLASH addr  Mem addr    Length      Entry pointRedBoot           0x50000000  0x50000000  0x00080000  0x00000000FIS directory     0x507E0000  0x507E0000  0x0001F000  0x00000000RedBoot Config    0x507FF000  0x507FF000  0x00001000  0x00000000
Сам загрузчик занял раздел размером в 0x080000 байт (512 кБайт). Это многовато по меркам RedBoot и при меньшем объёма ROM может стать критическим недостатком, но это плата за возможность не делать преобразователь для подключения по последовательному порту.

Ещё одно отступление

Если в процессе настройки прошивка придёт в неработоспособное состояние, то для возвращение в исходное состояние достаточно стереть блоки с конфигурацией используя JTAG. Опуская описания промежуточных действий, это выглядит так.

jtag> cable WIGGLER parallel 0x378
...
jtag> detect
...
jtag> initbus ixp425
...
jtag> detectflash 0x050000000
...
jtag> eraseflash 0x0507D0000 3

После этого консоль RedBoot снова станет доступна. (Загрузка образов, разумеется, не произойдёт). Заливка образа по сети выполняется следующей командой

RedBoot> load -r -b %{FREEMEMLO} -h 192.168.1.20 openwrt-gtwx5715-zImage

Здесь FREEMEMLO - переменная, которая установилась после выполнения команды fis init, адрес сервера tftp - 192.168.1.20, имя файла с образом ядра - openwrt-gtwx5715-zImage.

Несмотря на правильность настроек, с высокой степенью вероятности на эту команду получим следующее.

Using default protocol (TFTP)
Can't load ''openwrt-gtwx5715-zImage': invalid parameter

Причина такого поведения непонятна. Однако после перезагрузки и переустановки связи больше не проявляется.
RedBoot> reset

На этом связь естественно теряется. Переустанавливаем соединение.

> ping 192.168.1.1
...
> telnet 192.168.1.1 9000
...
RedBoot> fis init

Теперь загрузка образа должна пройти без проблем

RedBoot> load -r -b %{FREEMEMLO} -h 192.168.1.20 openwrt-gtwx5715-zImage

Создаём раздел в flash. Дополнительные параметры вводить не обязательно - образ будет создан по значениям, полученным в процессе загрузки.

RedBoot> fis create kernel

Следующий шаг - загрузка и создание образа корневой файловой системы. Так как она будет использоваться ещё и для установки дополнительных пакетов, разумно зарезервировать для неё всё оставшееся место.

Смотрим текущее состояние флеш

RedBoot> fis list
Name              FLASH addr  Mem addr    Length      Entry point
RedBoot 0x50000000 0x50000000 0x00080000 0x00000000
kernel 0x50080000 0x00024C00 0x00100000 0x00024C00
FIS directory 0x507E0000 0x507E0000 0x0001F000 0x00000000
RedBoot Config 0x507FF000 0x507FF000 0x00001000 0x00000000Таким образом осталось 0x507E0000 - (0x50080000 + 0x00100000) = 0x0660000 байт (6528 кБайт).

Расчистим память, чтобы не забивать флеш мусором

RedBoot> mfill -b %{FREEMEMLO} -l 0x0660000 -p 0

Затем загружаем образ файловой системы squashfs

RedBoot> load -r -b %{FREEMEMLO} -h 192.168.1.20 openwrt-ixp4xx-squashfs.img

Точно так же создаём раздел

RedBoot> fis create -b %{FREEMEMLO} -l 0x0660000 rootfs

После чего файловая система принимает следующий вид.

RedBoot> fis list
Name              FLASH addr  Mem addr    Length      Entry point
RedBoot 0x50000000 0x50000000 0x00080000 0x00000000
zImage 0x50080000 0x00024C00 0x00100000 0x00024C00
rootfs 0x50180000 0x00024C00 0x00660000 0x00024C00
FIS directory 0x507E0000 0x507E0000 0x0001F000 0x00000000
RedBoot Config 0x507FF000 0x507FF000 0x00001000 0x00000000Осталось только ввести правильные настройки.

Настройка загрузчика

1F9C400

May. 30th, 2009

11:12 pm - Настройка Linksys NSLU2 для домашних нужд. Домашний сервер из тостера. How-to

Как-то попался мне в руки данный девайс, и решил я его приспособить для дела. Так как история приручения улитки (часто его именуют SLUG из-за созвучия) оказалась похожей на квест, то выложу свой путь к победе. Вдруг кому-то пригодится.

Устройство обладает довольно солидной начинкой - 32Мб оперативки, 8Мб ПЗУ, 133МГц XScale процессор, 2 порта USB2, 1 порт Ethernet. И при этом поддаётся следующим модернизациям.

  1. Процессор работает на заниженной вдвое частоте, и очень легко переводится в штатный режим (об этом чуть позже).
  2. На плате разведены, но не распаяны ещё 3 порта USB2. Фактически надо только подпаять разъёмы, и поменять источник питания на более мощный - каждое подключённое устройство может потреблять до 0.5А.
  3. Разведён COM порт. Тоже - только разъём подпаять. Правда кому теперь он нужен?
Остальные манипуляции (коих немало) требуют существенного вмешательства и на мой взгляд совершенно не оправданы - проще купить более мощное устройство. Подробнее о хаках здесь.

Комплект поставки - сильно БУ, причём побывал в руках безвестных умельцев, благодаря чему утратил часть навыков, данных ему от рождения. Если точнее - была произведена попытка кастомизации штатной прошивки из-за чего некоторые сервисы не работали. Доступа по терминалу (ни telnet, ни ssh) не было, так как устройство стабильно крешилось при попытках коннекта. Перепрошивка штатными средствами тоже не работала, выдавая неведомый Error. Было принято решение привести его в чувство кардинальными методами.

Аппаратные доработки

Тратить своё время на глубокое копание в железе я посчитал непрактичным, поэтому ограничился косметическим вмешательством. которое, тем не менее, дало значительный прирост производительности.

Проблема первая. Вскрытие корпуса

На эту тему даже написана специальная хаутушка (есть по ссылке выше).
Linksys NSLU2 open case


Итак. Половинки корпуса крепятся на пластиковых клапанах (2), которые входят в пазы (1). Но крышка содержит рёбра жесткости (3), поэтому просто сжатие не приводит к открытию корпуса. Надо прицельно сжимать корпус в месте клапанов (1-2), и отжимать их чем-нибудь подходящим. Я для этого применил небольшую отвёртку с плоским шлицом. Но это ещё не всё - низ корпуса снабжён направляющими (4), и открывать корпус надо сдвигая крышку по ним вверх, как показано на рисунке. Наловчившись, я уже достаточно легко его открывал.
 
Увеличение частоты процессора

Плата ничем особым, типа неожиданными маркировками элементов, или большим количеством нераспаяных элементов, не отличалась.  Отмечу только три посадочных места под светодиоды с левого края платы (D2, D3, D6). Настоящий интерес представляло лишь увеличение частоты процессора вдвое, которое достигалось отпаиванием резистора R83. На картинке он внизу и подсвечен красным.
Linksys NSLU2 board

Это же место, более крупным планом, резистор обведён. Для пытливых сообщаю - номинал всех четырёх резисторов 10КОм.
Linksys MSLU2 overclock

Отпаялся резистор легко, и больше в плате я не копался по причинам озвученным выше.

Прошивка

Существуют средства ковыряния штатной прошивки, но мне это было неинтересно, так как она обладает весьма куцыми возможностями, да ещё отгрызает существенную объём диска для собственных нужд. И в наше время терабайтных дисков не столько места жалко, сколько не охота иметь проблем с их подключениями - без переформатирования сторонний диск виден не будет.

В качестве основы был выбран специализированный дистрибутив OpenWRT. Есть любители установки десктопных дистрибутивов на подобные устройства, но на мой взгляд это извращение. Образ был взят отсюда. Версия 8.09. (Именно этот, так как находящийся рядом 16Мбайтный подходит только для модифицированного устройства, с расширенным ПЗУ. Если вы попытаетесь прошить его в обычное устройство, то оно станет неработоспособно и восстановить его вы не сможете). Кроме самого образа, к дистрибутиву прилагается неплохая подборка пакетов. Они находятся здесь.Как уже говорилось, штатные средства не работали, поэтому пришлось всё делать через инженерный режим.

Во-первых, понадобилась специальная утилита upslug2. Во многих дистрибутивах Linux она доступна через репозиторий. Для своего OpenSuSe, я выполнил запрос software.opensuse.org/search. Для остальных описание находится здесь.

Во-вторых, для неё нужно узнать Mac-адрес. Это можно сделать последовательностью команд. Сначала

# ping 192.168.1.77

192.168.1.77 - ip адрес устройства. Потом

# arp

Эта команда покажет hardware address, который нам и нужен.

В-третьих, надо входить в инженерный режим. Для этого выключаем устройство. На задней панели находим отверстие, под которым прячется кнопка Reset и нажимаем на неё. Не отпуская её, включаем питание. Удерживаем секунд десять - индикатор Ethernet должен загореться красным. Это нормально. Как только он загорелся - сразу отпускаем кнопку Reset. Теперь индикатор Ethernet будет мигать попеременно красным и зелёным. Что сигнализирует об успешном входе в нужный нам режим. Если это не удалось - выключите устройство и попробуйте снова. Это безопасно.

Теперь запускаем нашу утилиту (target указывает mac адрес)

# upslug2 --target="xx:xx:xx:xx:xx:xx" --image="openwrt-nslu2-squashfs.bin"


И прошивка началась. Мне пришлось подождать несколько минут, прежде чем она завершилась. По завершению устройство перезагрузилось.

Настройка

После перепрошивки устройству по умолчанию был назначен новый ip адрес 192.168.1.1 (в более старых версиях 192.168.0.1). Он был определён как статический, поэтому команды DHCP на него не действовали. Нужно иметь это в виду, чтобы не получить проблемы с одинаковыми адресами в сети. По этому адресу можно получить доступ к веб-интерфейсу (логин/пароль admin/openWRT) и по ssh - пароль ореnWRT (Внимание! Регистр учитывается). Доступ в консольном режиме по ssh делается так

# ssh 192.168.1.1

Теперь у нас спросят пароль и мы уже на девайсе.

Сама прошивка устроена очень разумно. Оригинальная от linksys находится в запакованном состоянии. При загрузке устройства часть оперативной памяти выделяется под RAM диск, куда происходит распаковка и последующий запуск (а при возможности отъедается ещё и часть подключенного hdd диска).

OpenWRT определяет запакованный образ как упакованную файловую систему squashfs, и монтирует её напрямую, экономя таким образом оперативную память (и не требуя отдельных разделов на подключаемых hdd). И образ столь мал, что на нужды пользователя остаётся ещё 4,88Мб флеша, для записи в которые уже не требуется никаких ухищрений с утилитами и режимами.

А теперь сюрприз - в настройках по-умолчанию USB не поддерживается, доступна только внутренняя сеть, и wget не работает. Причина очевидна - базовая конфигурация была рассчитана на WiFi роутер, но от этого не легче.

Проблема вторая. Установка пакетов и настройка

Как установить нужные пакеты? Я скачал их с сайта OpenWRT (ссылка была выше) на домашний комп и использовал netcat для пересылки на устройство. На домашнем компе выполнял команду вида

# cat nano.ipk | netcat -lp 8080

И в то же время в консоли устройства (в директории /jffs/home)

# nc 192.168.1.3 8080 > nano.ipk


Смысл этого действа таков. На десктопе утилита netcat получает на вход файл nano.ipk, и находится в режиме ожидания (ключ l), слушая порт 8080 (ключ p). На устройстве утилита nc (тот же netcat, но переименованный) обращается к десктопу (по адресу 192.168.1.3) и из порта 8080 получает поток, который записывает в файл nano.ipk. Таким незамысловатым образом я быстро перегнал нужные мне пакеты.
 
Установка их производится по команде

# opkg install nano.ipk

Здесь и выше nano.ipk - имя пакета. Я установил следующие. Для поддержки внешних USB накопителей с файловой системой ext3.

kmod-fs-ext3_2.6.26.6-ixp4xx-1_armeb.ipk
kmod-scsi-core_2.6.26.6-ixp4xx-1_armeb.ipk
kmod-usb2_2.6.26.6-ixp4xx-1_armeb.ipk
kmod-usb-core_2.6.26.6-ixp4xx-1_armeb.ipk
kmod-usb-ohci_2.6.26.6-ixp4xx-1_armeb.ipk
kmod-usb-storage_2.6.26.6-ixp4xx-1_armeb.ipk


Проблема третья. Монтирование внешнего накопителя

В этом месте может всплыть ещё один подводный камень, который проявляется следующим забавным образом - если во время старта устройства внешний диск был выключен, то потом, при включении, он подхватится. А если включён - то нет. Разгадка этого странного поведения находится в системном логе.

May 20 21:04:44 OpenWrt user.info : mount: mounting /dev/sda1 on /home failed: No such file or directory
May 20 21:04:45 OpenWrt user.notice root: usb device is mass storage
...
May 20 21:04:49 OpenWrt user.notice root: waiting on usb drive 4 ...
May 20 21:04:49 OpenWrt user.notice kernel: scsi 0:0:0:0: Direct-Access WDC WD10 EADS-65L5B1 1A01 PQ: 0 ANSI: 2 CCS
May 20 21:04:49 OpenWrt user.notice kernel: sd 0:0:0:0: [sda] 1953525168 512-byte hardware sectors (1000205 MB)


Попытка монтирования осуществляется раньше, чем загрузятся нужные модули ядра. Это происходит потому, что устройства USB монтируются наравне с корневой файловой системой, что неправильно. Решить проблему несложно. Достаточно написать отдельный командный файл, в котором явно вызвать команду монтирования диска и дать задержку. Например, его содержание может быть таким (как создать файл, поместить его в директорию /etc/init.d и назначить права на исполнение, надеюсь, и так всем понятно).

start () {
   sleep 10

   mount /dev/sda1 /mnt/usbdrive
}
stop () {
   umount /mnt/usbdrive
}


Далее ссылку на него следует указать в директории /etc/rc.d

# cd /etc/rc.d
# ln -s /etc/init.d/startusb S70startusb

В моём случае этот файл не потребовался, так как появилась утилита hotplug, которая сама монтировала диск после загрузки.
 
 
Для редактирования конфигурационных файлов (ну не переношу я vi).
 
libncurses_5.6-1_armeb.ipk
nano_2.0.7-1_armeb.ipk

Проблема четвёртая. Работа сети
 
Теперь, загрузив подходящий редактор, можно окончательно решить проблему сети. Способ решения очень прост. Надо найти файл /etc/sysctl.conf, и заменить в нём параметр net.ipv4.tcp_ecn=1 на net.ipv4.tcp_ecn=0. Смысл этого таков. У протокола TCP есть такая фича - Explicit Congestion Notification. Сиречь - уведомление о перегрузке. Когда два устройства, обменивающиеся данными по сети, практически полностью забивают канал, они обмениваются этими сообщениями и несколько снижают скорость передачи данных. Когда устройство находится в локальной домашней сети за маршрутизатором (за NAT), то оно пытается обменяться этими сигналами с маршрутизатором. Если домашний маршрутизатор не поддерживает эту фичу, то и на устройстве её стоит отключить и не мучить бедную железяку. В противном случае сеть за маршрутизатором будет недоступна. Другие варианты решения - подключить устройство через порт DMZ, или использовать маршрутизатор, который это умеет. В обычных домашних условиях эта функция бесполезна, так как узким местом является канал интернет где-то у провайдера.

Дополнительно стоит выполнить команду.

# opkg update

С помощью неё загружается информация об имеющихся в репозитории пакетах. Дальнейшая установка и настройка станут проще.
 
Для поддержки NFS

libwrap_7.6-1_armeb.ipk
portmap_6.0-2_armeb.ipk
unfs3_0.9.20-1_armeb.ipk


По умолчанию NFS расшаривает директорию /mnt в режиме только чтение. Это описано в файле /etc/exports.

Проблема пятая. Настройка демона NFS

После установки надо на устройстве в директории /etc/rc.d создать линк на portmap, иначе NFS не работает и при загрузке выдаёт ошибку - "Cannot register service: RPC: Unable to receive; errno = Connection refused unable to register (NFS3_PROGRAM, NFS_V3, udp)". Это делается так

# cd /etc/rc.d
# ln -s /etc/init.d/portmap S50portmap

 
Happy end

Всё. С этого момента устройство заработало как надо. Скорость передачи данных по сети составила чуть больше 4Мб в секунду. Её можно немного увеличить, подобрав подходяще параметры NFS (специфичные для каждой отдельной сети). Возможны и дальнейшие настройки и усовершенствования, но основные трудности уже преодолены.