Как стать автором
Обновить

Nokia N900. Продолжаем разбираться или «Hack your Nokia N900»

Время на прочтение 27 мин
Количество просмотров 22K
Добрый день уважаемый читатель. Продолжаю свой цикл статей о Nokia N900. Вот, вот и вот — предыдущие мои публикации.
Сегодня продолжим изучение аппарата, и сегодняшняя тема — это хак. Мы будем лезть в разные штуки и менять разные вещи, которые не предусмотрены для изменения разработчиками. Это делается очень легко и подвластно даже обычному пользователю, если у него будет желание. Я не буду рассказывать как пропатчить ядро или увести аппарат в высокопроизводительный режим, просто покажу несколько полезный улучшений, которые могут пригодиться каждому.
Предупреждение: автор не несет ответственности за причиненные повреждения вашему аппарату в процессе следования данным инструкциям. Вы все делаете на свой страх и риск.
Надеюсь не очень напугал? Могу сказать, что убить аппарат до такого состояния, что Вы не сможете его восстановить — практически нереально(но возможно!!! я знаю один случай). Но даже если у Вас получиться, то 99% сервисный центр Вам поможет. Но главное правило — будьте осторожны и читайте сначала, а потом делайте, и делайте аккуратно и обращайте пристальное внимание на последовательность действий, а главное на то, что выделено красным цветом (не зря же я это выделял).
image



Разбираем и собираем N900.


На заглавной страничке отображен процесс разобранного N900. Есть официальный сервисное руководство. Но на публичном доступе оно не доступно. Раздается сервисным центрам, на сколько я знаю. Но в сети валяются экземпляры и вы можете их найти при желании: ключевые слова Nokia, Service Manual RX-51. Выложить я не имею права это — противоречит копирайту:
Reproduction, transfer, distribution or storage of part or all of the contents in this document in
any form without the prior written permission of Nokia is prohibited.

Переводится приблизительно так: копирование, передача, распространение и хранение частей или всего содержимого этого документа в любой форме без предварительного согласия компании Nokia ЗАПРЕЩЕНО.
Картинку я взял не с этого документа, а вот отсюда, достаточно популярный и распространенный ресурс, и лично от них я получил разрешение на перепубликацию (они уверяют, что обладают правами публикации этого изображения и имеют право разрешить перепубликовать). Но при первом же обращении с указанием на неправомерность распространение данной информации от представителей компании Nokia я уберу эту картинку.
Ну так вот в этом документе все описано с картинками и от разборки других аппаратов особенно не отличается.
Прошу свои извинения за то что не могу выложить документ, а собственную инструкцию сделать не могу, уж очень свой аппарат жалко для этого разбирать :-).

Перепрошивка N900.


В предыдущих публикациях я описывал много интересных приложений и многие из них находятся в репозиториях extra-testing и даже extra-devel. Это значит что эти приложения не только не гарантируют, что работать будут стабильно, они еще не гарантируют что они не поломают Вам телефон :-) Плюс к этому некоторые инструкции их этой публикации могут сделать из вашего N900 кирпич. Поэтому я сначала решил показать как восстановить аппарат в таком случае.
В качестве дополнительного материала на русском языке можете посмотреть перевод Maemo.org Wiki на Fruct.
Nokia в этом плане молодцы и перепрошить N900 можно на любой ОС (имею ввиду большую тройку Linux/MacOS/Windows, а не действительно все ОС :-) ).
Что нам нужно:
1. Инструмент для прошивки — flasher.
качаем тут.
вот такие файлики нас там интересуют (версии могут отличаться, так как могут появиться следующие версии, но названия должны остаться теми-же либо похожими):
maemo_flasher-3.5_2.5.2.2.exe — версия для Windows 7, XP, Vista.
maemo_flasher-3.5_2.5.2.2.tar.gz — версия для Линукса.
maemo_flasher-3.5_2.5.2.2_i386.deb — версия для Debian семейств линуксов.
maemo_flasher-3.5_2.5.2.2_i386.dmg — версия для Intel Mac OS.
maemo_flasher-3.5_2.5.2.2_ppc.dmg — версия для PPC Mac OS.
2. Качаем отсюда образ образ корневой системы и, если нужно, образ eMMC(это та память, которая 32 ГБ).
<a href=«href=»tablets-dev.nokia.com/nokia_N900.php">Качаем по этой ссылке.
Там нужно ввести IMEI.
image
Он находится под батарейкой или в «Параметры»->«О продукте». Там в всплывающем окне последняя строчка.
image
Также можно его разобыть, если ввести на клавиатуре телефона *#06#.
Потом принимаем лицензионное соглашение, нажав кнопку «I accept».
Нас интересует вот этот файл: RX-51_2009SE_3.2010.02-8_PR_COMBINED_MR0_ARM.bin или более поздний, если будет (выбирайте регион «Европа», так как Африка и Штаты не подходят, за исключением случаев, если телефон у вас был куплен именно там).
И вот этот RX-51_2009SE_1.2009.41-1.VANILLA_PR_EMMC_MR0_ARM.bin, если вы надумали перепрошить eMMC.
Еще, на продаваемом аппарате предзалиты карты того региона в котором он продается, а в этом образе никаких карт нет, но это не страшно, можно восмользоваться Map Loader'ом, для устранения этой неприятности. Зачем это может понадобиться я расскажу ниже, но если вы не знаете, нужно ли вам это, то значит не нужно.

Замечания по установке flasher на Linux.

Если у вас 64-разрядный Debian линукс и вы ставите из deb файла, то нужно выполнить вот такую команду в директории, куда вы сохранили пакет
sudo dpkg -i --force-architecture ./maemo_flasher-3.5_2.5.2.2_i386.deb


Замечания по установке flasher на Mac OS.

Тут ничего делать не нужно, единственное, что нужно знать, так это то, что flasher можно найти в /usr/bin.

Замечания по установке flasher на Windows.

Пакет по умолчанию поставиться в %Program Files%/maemo/.
В Windows 7 необходимо отключить проверку подписи драйверов. Сделать это просто.
Заходим в меню «Пуск» и выбираем программу cmd. По ней правой клавишей и «Запустить от Администратора».
image
В окне интерпретатора вводим такие вот команды:
bcdedit.exe -set loadoptions DDISABLE_INTEGRITY_CHECKS
bcdedit.exe -set TESTSIGNING ON

В результате должно появиться что-то типа такого:
image

Немного про прошивку eMMC. Это флэш образ, в дереве каталогов он находится в /home/user/MyDocs. Перепрошивка может потребоваться только в том случае, если вы хотите получить девственно чистый аппарат или у вас девелоперская версия телефона. Если нужно просто перепрошить кирпич, то не нужно прошивать eMMC!!!

Все делается с консоли и абсолютно одинаково работает на всех вышеуказанных ОС. Единственная проблема может возникнуть с Windows 7. Но я об этом напишу чуть ниже.
Предупреждение: Зарядите телефон полностью, будет очень плохо, если батарея сядет во время прошивки. Во время прошивки аппарат не заряжается по USB!!!
Итак, мы все скачали, установили утилиту flasher. Запускаем консоль (под виндой — командный интерпретатор cmd, но я его все равно буду называть консолью :-)).
И в консоли пишем такие вот слова:
Windows:
cd "%ProgramFiles%\maemo\flasher-3.5"
flasher-3.5.exe -F RX-51_2009SE_3.2010.02-8_PR_COMBINED_MR0_ARM.bin -f -R

Linux:
sudo flasher-3.5 -F RX-51_2009SE_3.2010.02-8_PR_COMBINED_MR0_ARM.bin -f -R

MacOS:
sudo /usr/bin/flasher-3.5 -F RX-51_2009SE_3.2010.02-8_PR_COMBINED_MR0_ARM.bin -f -R


В результате получим вот такую надпись:

Suitable USB device not found, waiting


0. Если Вы собираетесь перепрошить eMMC, то заблаговременно отсоедините заднюю крышку и подденьте чем-нибудь батарейку (только не переусердствуйте, чтоб она не выпала во время перепрошивки ).
1.Если устройство подключено по USB, то отключите его.
2. Выключите его (при выключении с подключенным USB аппарат полностью не выключается, так что следуйте шагу номер 1).
3. Зажимаем кнопку «u» на клавиатуре и подключите USB шнур.
4. Должен появиться логотип Nokia (иногда на очень блеклом фоне, с очень слабой подсветкой, реже на ярком белом фоне) и в правом углу верхнем значек USB.

Если Вы все сделали правильно то пойдут бежать надписи, сообщающие о различных этапах прошивки.
Устройство уйдет в перезагружку. На это перепрошивка закончена. Просто все, не правда ли?

Если вы собираетесь прошивать eMMC, то в этот момент нужно выдернуть батарейку, предотвратив загрузку ОС.
Прошивать eMMC можно только после прошивки rootfs и НИ В КОЕМ СЛУЧАЕ НЕЛЬЗЯ ПЕРЕГРУЖАТЬСЯ МЕЖДУ ПРОШИВКОЙ ROOTFS И EMMC ОБРАЗА !!!!
.

Теперь для желающих прошить eMMC.
и выполняем те-же команды, что и выше, только шьем уже другой образ:
Windows:
cd "%ProgramFiles%\maemo\flasher-3.5"
flasher-3.5.exe -F RX-51_2009SE_1.2009.41-1.VANILLA_PR_EMMC_MR0_ARM.bin -f -R

Linux:
sudo flasher-3.5 -F RX-51_2009SE_1.2009.41-1.VANILLA_PR_EMMC_MR0_ARM.bin -f -R

MacOS:
sudo /usr/bin/flasher-3.5 -F RX-51_2009SE_1.2009.41-1.VANILLA_PR_EMMC_MR0_ARM.bin -f -R


Появиться опять надпись об отсутсвующем устройстве:
flasher v2.5.2 (Oct 21 2009)

Image 'mmc', size 241163 kB
Version RX-51_2009SE_1.2009.41-1.VANILLA
Suitable USB device not found, waiting.


Вставляем USB кабель в устройство и ждем пока пройдет процесс.
Вставляем назад батарейку и просто подключаем USB без кнопки «u».
Выглядеть он будет вот таким образом:
USB device found found at bus 001, device address 006.
Found device RX-51, hardware revision 2101
NOLO version 1.4.13
Version of 'sw-release': RX-51_2009SE_1.2009.42-11.002_PR_002
Booting device into flash mode.
Suitable USB device not found, waiting.
USB device found found at bus 001, device address 007.
Raw data transfer EP found at EP2.
[writing 74 % 179200 / 241163 kB 13180 kB/s]
Image(s) flashed successfully in 26.848 s (8982 kB/s)!

У меня процесс занял чуть меньше минуты. После этого устройство уйдет в перезагрузку. Все готово.

Проблемы и пути их решения.

Если у вас сообщение на *nix'ах «Permission denied» (если вы взяли flasher из tar.gz), тогда сделайте так
chmod +x ./flasher-3.5


Если в *nix'ах у вас появилось сообщение «Error claiming USB interface: Device or resource busy», тогда выполните команду
sudo modprobe -r cdc_phonet


Flasher не может найти устройство, тогда проделайте следующее:
  • выключите N900
  • выньте батарейку
  • запустите flasher
  • подключите USB шнурок
  • вставьте батарейку


В общем с прошивкой разобрались, процесс легкий и безгеморойный (по крайней мере я не встретил трудностей под MacOS 10.6, Linux Ubuntu 9.10 и Windows XP).

Тюним раскладку клавиатуры.


Зачем это может понадобиться?
1. Если вам не нравиться текущая раскладка (например вы пишете на Python'e на устройстве и Вас раздражает отсутствие "=" на клавиатуре, приходится каждый раз вызывать таблицу дополнительных символов) или хотите добавить пару символов.
2. Если у вас «серый» телефон и «синенькие» символы не совпадают с символами в русской раскладке, плюс в буржуйских версиях 4 стрелочки, а в русской 2. Из-за этого начинается конфуз. Я купил серый аппарат именно по той причине, что английские буквы больше гравированных русских и это очень и очень удобно. Но столкнулся с проблемой несоответствия дополнительных символов. Начиная от точки с запятой и заканчивая знаком доллара и скобок.
Вот так выглядит русская клавиатура:
image
А вот так выглядит гравированная буржуйская:
image
Как видите не совпадает.

Ну решение оказалось копеешным.
Все что нужно, это поменять раскладку. В N900 применяется стандартное X-расширение xkb. Файл с настройкой раскладок можно найти: /usr/share/X11/xkb/symbols/nokia_vndr/rx-51
Подробно о формате файла и настройках xkb можно посмотреть тут, тут и тут.

Там очень много букв, так что опишу тут не очень подробно, но достаточно, чтоб можно было менять на свое усмотрение.
Итак, если открыть этот файл, то он большой, чтоб его перепечатывать. Расскажу об основных частях.
За основу любой раскладки взята английская — базовая, вот так выглядит эта секция:
  1. partial hidden alphanumeric_keys
  2. xkb_symbols "english_base" {
  3.  
  4.   // 1. row
  5.   key <AD01>  { [  q,    Q,    1,    1    ] };
  6.   key <AD02>  { [  w,    W,    2,    2    ] };
  7.   key <AD03>  { [  e,    E,    3,    3    ] };
  8.   key <AD04>  { [  r,    R,    4,    4    ] };
  9.   key <AD05>  { [  t,    T,    5,    5    ] };
  10.   key <AD06>  { [  y,    Y,    6,    6    ] };
  11.   key <AD07>  { [  u,    U,    7,    7    ] };
  12.   key <AD08>  { [  i,    I,    8,    8    ] };
  13.   key <AD09>  { [  o,    O,    9,    9    ] };
  14.   key <AD10>  { [  p,    P,    0,    0    ] };
  15.   key <AB08>  { [  comma,    semicolon,  equal,    equal    ] };
  16.  
  17.   // 2. row
  18.   key <AC01>  { [  a,    A,    asterisk,  asterisk  ] };
  19.   key <AC02>  { [  s,    S,    plus,    plus    ] };
  20.   key <AC03>  { [  d,    D,    numbersign,  numbersign  ] };
  21.   key <AC04>  { [  f,    F,    minus,    minus    ] };
  22.   key <AC05>  { [  g,    G,    underscore,  underscore  ] };
  23.   key <AC06>  { [  h,    H,    parenleft,  parenleft  ] };
  24.   key <AC07>  { [  j,    J,    parenright,  parenright  ] };
  25.   key <AC08>  { [  k,    K,    ampersand,  ampersand  ] };
  26.   key <AC09>  { [  l,    L,    exclam,    exclam    ] };
  27.   key <AB09>  { [  period,    colon,    question,  question  ] };
  28.  
  29.   // 3. row
  30.   key <AB01>  { [  z,    Z,    sterling,  sterling  ] };
  31.   key <AB02>  { [  x,    X,    dollar,    dollar    ] };
  32.   key <AB03>  { [  c,    C,    EuroSign,  EuroSign  ] };
  33.   key <AB04>  { [  v,    V,    slash,    slash    ] };
  34.   key <AB05>  { [  b,    B,    backslash,  backslash  ] };
  35.   key <AB06>  { [  n,    N,    quotedbl,  quotedbl  ] };
  36.   key <AB07>  { [  m,    M,    apostrophe,  apostrophe  ] };
  37.   key <SPCE>  { [  space,    space,    at,    at    ] };
  38. };
* This source code was highlighted with Source Code Highlighter.


Тут используется 4 уровня. Каждая запись — это символ, комментариями они отделены на ряды на клавиатуре. В данной раскладке используется 4 уровня (4 разных значения можно получить с помощью одной кнопки). Итак как переключаются эти уровни:
Shift(на клавиатуре стрелка вверх) — увеличивает на один уровень в любом случае. Нужно либо держать, либо нажать один раз и любая следующая клавиша увеличит значение при нажатии на уровень, либо два раза нажать — получится Caps Lock режим, то есть все последующие нажатия кнопок будут увеличены на один уровень.
Fn(синяя стрелка на клавиатуре) — увеличивает на два уровня вверх. В комбинации с Shift увеличивает на три уровня вверх.

Итак получаем, чтоб получить из таблицы символов нужный символ, согласно таблице, для примера возьмем первую кнопку:
  1. key <AD01> { [ q,  Q,  1,  1  ] };
* This source code was highlighted with Source Code Highlighter.

  • чтоб получить первый уровень, то есть символ «q» — нужно просто нажать кнопку
  • чтоб получить второй уровень, то есть символ «Q» — нужно нажать Shift и кнопку
  • чтоб получить третий уровень, то есть символ «1» — нужно нажать Fn и кнопку
  • чтоб получить четвертый уровень, то есть символ «1» — нужно нажать Shift, Fn и кнопку


«А как-же переключение раскладки?» — спросите Вы. А все просто. Давайте посмотрим на секцию с русской раскладкой:
  1. partial alphanumeric_keys
  2. xkb_symbols "ru" {
  3.   include "nokia_vndr/rx-51(english_base)"
  4.   include "nokia_vndr/rx-51(arrows_2btns)"
  5.  
  6.   name[Group1] = "Russian";
  7.  
  8.   key.type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC";
  9.  
  10.   // 1. row
  11.   key <AD01>  { [  q,    Q,    1,      1,      Cyrillic_shorti,  Cyrillic_SHORTI,  1,      1      ] };
  12.   key <AD02>  { [  w,    W,    2,      2,      Cyrillic_tse,    Cyrillic_TSE,    2,      2      ] };
  13.   key <AD03>  { [  e,    E,    3,      3,      Cyrillic_u,    Cyrillic_U,    3,      3      ] };
  14.   key <AD04>  { [  r,    R,    4,      4,      Cyrillic_ka,    Cyrillic_KA,    4,      4      ] };
  15.   key <AD05>  { [  t,    T,    5,      5,      Cyrillic_ie,    Cyrillic_IE,    5,      5      ] };
  16.   key <AD06>  { [  y,    Y,    6,      6,      Cyrillic_en,    Cyrillic_EN,    6,      6      ] };
  17.   key <AD07>  { [  u,    U,    7,      7,      Cyrillic_ghe,    Cyrillic_GHE,    7,      7      ] };
  18.   key <AD08>  { [  i,    I,    8,      8,      Cyrillic_sha,    Cyrillic_SHA,    8,      8      ] };
  19.   key <AD09>  { [  o,    O,    9,      9,      Cyrillic_shcha,    Cyrillic_SHCHA,    9,      9      ] };
  20.   key <AD10>  { [  p,    P,    0,      0,      Cyrillic_ze,    Cyrillic_ZE,    0,      0      ] };
  21.   key <AB08> { [  Cyrillic_ha,  Cyrillic_HA,  Cyrillic_hardsign,  Cyrillic_HARDSIGN,  Cyrillic_ha,    Cyrillic_HA,    Cyrillic_hardsign,  Cyrillic_HARDSIGN  ] };
  22.  
  23.   // 2. row
  24.   key <AC01>  { [  a,    A,    asterisk,    asterisk,    Cyrillic_ef,    Cyrillic_EF,    asterisk,    asterisk    ] };
  25.   key <AC02>  { [  s,    S,    plus,      plus,      Cyrillic_yeru,    Cyrillic_YERU,    plus,      plus      ] };
  26.   key <AC03>  { [  d,    D,    numbersign,    numbersign,    Cyrillic_ve,    Cyrillic_VE,    numbersign,    numbersign    ] };
  27.   key <AC04>  { [  f,    F,    minus,      minus,      Cyrillic_a,    Cyrillic_A,    minus,      minus      ] };
  28.   key <AC05>  { [  g,    G,    underscore,    underscore,    Cyrillic_pe,    Cyrillic_PE,    underscore,    underscore    ] };
  29.   key <AC06>  { [  h,    H,    exclam,      exclam,      Cyrillic_er,    Cyrillic_ER,    exclam,      exclam      ] };
  30.   key <AC07>  { [  j,    J,    question,    question,    Cyrillic_o,    Cyrillic_O,    question,    question    ] };
  31.   key <AC08>  { [  k,    K,    semicolon,    semicolon,    Cyrillic_el,    Cyrillic_EL,    semicolon,    semicolon    ] };
  32.   key <AC09>  { [  l,    L,    colon,      colon,      Cyrillic_de,    Cyrillic_DE,    colon,      colon      ] };
  33.   key <AB09>  { [  comma,    comma,    comma,      comma,      Cyrillic_zhe,    Cyrillic_ZHE,    comma,      comma      ] };
  34.   key <UP>  { [  period,    period,    period,      period,      Cyrillic_e,    Cyrillic_E,    period,      period      ] };
  35.  
  36.   // 3. row
  37.   key <AB01>  { [  z,    Z,    dollar,      dollar,      Cyrillic_ya,    Cyrillic_YA,    dollar,      dollar      ] };
  38.   key <AB02>  { [  x,    X,    EuroSign,    EuroSign,    Cyrillic_che,    Cyrillic_CHE,    EuroSign,    EuroSign    ] };
  39.   key <AB03>  { [  c,    C,    slash,      slash,      Cyrillic_es,    Cyrillic_ES,    slash,      slash      ] };
  40.   key <AB04>  { [  v,    V,    parenleft,    parenleft,    Cyrillic_em,    Cyrillic_EM,    parenleft,    parenleft    ] };
  41.   key <AB05>  { [  b,    B,    parenright,    parenright,    Cyrillic_i,    Cyrillic_I,    parenright,    parenright    ] };
  42.   key <AB06>  { [  n,    N,    quotedbl,    quotedbl,    Cyrillic_te,    Cyrillic_TE,    quotedbl,    quotedbl    ] };
  43.   key <AB07>  { [  m,    M,    apostrophe,    apostrophe,    Cyrillic_softsign,  Cyrillic_SOFTSIGN,  apostrophe,    apostrophe    ] };
  44.   key <LEFT>  { [  Cyrillic_be,  Cyrillic_BE,  Cyrillic_yu,    Cyrillic_YU,    Cyrillic_be,    Cyrillic_BE,    Cyrillic_yu,    Cyrillic_YU    ] };
  45. };
* This source code was highlighted with Source Code Highlighter.

Первое, что бросается в глаза — это количество уровней. В данном случае их 8, а не 4. Все логично. На уровне 1-4 располагается английская раскладка, а на уровнях 5-8 — русская. Об этом так-же говорит вот эта запись:
  1. key.type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC";
* This source code was highlighted with Source Code Highlighter.

Для повышения или понижения уровня используется комбинация Ctrl+Пробел. Для пользователей она известна как переключение раскладки, что и есть повышения уровня на 4. Когда вы переключили раскладку на русскую (тем самым повысив все дальнейшие нажатия на 4) то клавиши Shift и Fn работают по тому-же принципу:
  • уровень 5 — просто нажатие кнопки
  • уровень 6 — Shift + нажатие
  • уровень 7 — Atl + нажатие
  • уровень 8 — Fn,Shify + нажатие

Но есть одно ограничение, чтоб вы не написали в уровнях 7 и 8, значения все равно будут браться с уровней 3,4. Но лучше в уровнях 7 и 8 все-же записать самому те-же значения что и для 3 и 4, во избежании возможных проблем.
Второе, на что нужно обратить внимание — это вот эта запись:
  1. include "nokia_vndr/rx-51(arrows_2btns)"
* This source code was highlighted with Source Code Highlighter.

Она подключает 2-х кнопочный курсор (что мне не нравиться и плюс у меня на клавишах 4 кнопки курсора).
Давайте рассмотрим секцию с кнопочками:
  1. partial hidden alphanumeric_keys
  2. xkb_symbols "arrows_2btns" {
  3.   // rx-51 specific arrows mapping
  4.   // normal 2nd level must not be enumerated to allow text selection with Shift key
  5.   key <DOWN>  { type[Group1] = "PC_FN_LEVEL2", symbols[Group1] = [  Left,  Up  ] };
  6.   key <RGHT>  { type[Group1] = "PC_FN_LEVEL2", symbols[Group1] = [  Right,  Down  ] };
  7. };
  8.  
  9. partial hidden alphanumeric_keys
  10. xkb_symbols "arrows_4btns" {
  11.   // standard arrows mapping
  12.   // normal 2nd level must not be enumerated to allow text selection with Shift key
  13.   key <UP>  { type[Group1] = "ONE_LEVEL", symbols[Group1] = [  Up  ] };
  14.   key <LEFT>  { type[Group1] = "ONE_LEVEL", symbols[Group1] = [  Left  ] };
  15.   key <DOWN>  { type[Group1] = "ONE_LEVEL", symbols[Group1] = [  Down  ] };
  16.   key <RGHT>  { type[Group1] = "ONE_LEVEL", symbols[Group1] = [  Right  ] };
  17. };
* This source code was highlighted with Source Code Highlighter.

Первая секция «arrows_2btns» используется в русской раскладке и еще в ряде других, где на клавиатуре только две клавиши отведены для курсора. Свойство type[Group1] = «PC_FN_LEVEL2» — как раз и определяет то, что на клавише две функции. Во второй секции «arrows_4btns» 4 клавиши отведены на курсор и на каждой клавише всего по одной функции (как же расточительно :-) ), об этом говорит атрибут type[Group1] = «ONE_LEVEL».
Вот тут можно разогнаться по полной, можно повесить на курсор 6 значений при двойной раскладке, что я и сделал, вот ниже мой вариант:
  1. partial hidden alphanumeric_keys
  2. xkb_symbols "arrows_rule" {
  3.   // standard arrows mapping
  4.   // normal 2nd level must not be enumerated to allow text selection with Shift key
  5.   key <UP>  { type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC", symbols[Group1] = [  Up,    Up,    Cyrillic_e,    Cyrillic_E,    Up,    Up,    Cyrillic_e,    Cyrillic_E    ] };
  6.   key <LEFT>  { type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC", symbols[Group1] = [  Left,    Left,    Cyrillic_be,    Cyrillic_BE,    Left,    Left,    Cyrillic_be,    Cyrillic_BE    ] };
  7.   key <DOWN>  { type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC", symbols[Group1] = [  Down,    Down,    Cyrillic_yu,    Cyrillic_YU,    Down,    Down,    Cyrillic_yu,    Cyrillic_YU    ] };
  8.   key <RGHT>  { type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC", symbols[Group1] = [  Right,    Right,    Cyrillic_hardsign,  Cyrillic_HARDSIGN,  Right,    Right,    Cyrillic_hardsign,  Cyrillic_HARDSIGN  ] };
  9. };
* This source code was highlighted with Source Code Highlighter.

В моем варианте в русской и английской раскладке курсор остается курсором. Fn позволяет печатать русские буквы, которые у меня не влезли в обычные кнопки — Э, Б, Ю, Ъ. Комбинация Fn с Shift печатают заглавные и прописные символы. Из-за вышеуказанных ограничений 3,4 и 7,8 уровней русские буквы будут печататься при любой раскладке, но не велика потеря. Теперь кнопки курсора несут 3-х функциональную нагрузку (стрелка и большая и маленькая буква). Если учитывать, что есть комбинации с Ctrl + стрелка дает Home, End, PgUp, и PgDwn с соответствующей стрелкой, получаем 4 функции вместо 2-х, как в оригинале.

В добавок ко всему, я изменил саму секцию «ru», теперь у меня на «серой» клавиатуре синие кнопки (Fn — комбинации) совпадают с тем, что написано на клавиатуре. Спорными оказались несколько кнопок.
,;=ЧЪ — сильно много функций, все не влазит. Я убрал твердый знак и перенес его на стрелку вправо. Еще один недостаток, запятая, только в английской раскладке, думаю перенести ее вместо знака фунтов стерлингов в русской раскладке.
.:? Ж — ну тут все влезло, только точка опять присутствует только в английской раскладке, можно перенести ее вместо знака доллара или евро.
<курсор влево>БЮ — хочется, чтоб курсор оставался всегда курсором и буквы можно было использовать как заглавные так и прописные. С такими требованиями не влазит это все на одну клавишу. Поэтому перенес на <курсор клавишу вниз>
мой вариант можно сказать у меня с сайта вот по этой ссылке. Там лежит файлик rx-51.
Файл располагается в /usr/share/X11/xkb/symbols/nokia_vndr.
Скопируйте новый вариант файла (мой или свой) в любое место на устройстве и из xterm нужно выполнить такие вот команды:
sudo gainroot
cp /usr/share/X11/xkb/symbols/nokia_vndr/rx-51 /usr/share/X11/xkb/symbols/nokia_vndr/rx-5.bak
cp /home/user/MyDocs/rx-51 /usr/share/X11/xkb/symbols/nokia_vndr/rx-51
setxkbmap ru

Будьте предельно внимательны, если вы положите плохой файл rx-51 и перезагрузите устройство, то оно не сможет загрузиться и придется перепрошивать устройство.

В общем отличный простой способ изменить раскладку по Вашему усмотрению. Например тем, кто работает часто в консоли, было бы полезно добавить «пайп» "|". Ну и так далее.

Чтоб закрыть тему с кнопками, отмечу, что также можно поменять и таблицу дополнительных символов, которая появляется при нажатии на Fn+Ctrl. Но тут уже все не так просто. Сложность в том, что эти символы хранятся в бинарном виде. И для того, чтоб сформировать собственную таблицу, необходимо собрать специальный компилятор этого формата, написать свою конфигурацию, скомпилировать.
Для заинтересовавшихся, вот ссылка на Maemo Wiki.

Освобождаем место на RootFS


Вот эта проблема для меня была сюрпризом. Rootfs — корневая файловая система, где находится ядро и самое необходимое (модули ядра, файлы конфигурации системы) для запуска системы. Располагается Rootf естественно в напаянном NAND Flash, а не на eMMC. Чтоб было понятно, небольшой экскурс по типам памяти.
NOR-flash — тип флэш памяти, который позволяет получить байт с произвольного места (random-access for reading), и большим плюсом является выполнение программ прям из адресного пространства NOR — execute in place (XIP). Недостаток — цена. Обычно используется для хранения настроек и разной мелочи. Энергонезависимая память. Кратко — что-то вроде энергонезависимой RAM. Ну и в последнее время NOR сильно отстает от NAND по объему информации.
NAND — значительно дешевле NOR. Скорость записи в NAND намного быстрее чем в NOR. Но основной недостаток — это то, что NAND блочное устройство и читать с него можно только блоками (в зависимости от микросхемы это может быть 512/2048/4096 байт). SD/MMC карты — это как раз представители NAND.

И для ясности еще один термин — SoC — System on Chip. Переводится как «система в одной микросхеме» или «Система на кристале».
Чтоб не распыляться, вот определение и характеристики термина.

Таким образом в «голом» N900 у нас такие вот такие вот виды памяти:
  • 256 Mb DDR — используется как пространства для выполнения программ, так как мы уже разобрались, что с NAND выполнять программы нельзя. Располагаются внутри SoC.
  • 256 Mb NAND — используется для rootfs, ниже подробней опишу. Располагается в SoC.
  • 32 Гб eMMC — используется для всего остального, напаяна на плату.
  • до 16 Гб microSD Slot — слот для установки дополнительной памяти, официально написано, что поддерживается 16 Гб, но так как появились уже 32Гб экземпляры, то я лично опробовал и могу сказать, что работает. Видимо на момент написания харрактеристик еще и в планах не было выпуска карт объемом больше 16 Гб. Есть вероятность что и карта 64 Гб будет работать, если она выйдет конечно. Но нужно проверять.


Сначала отмечю, что корень и загрузчик с ядром располагаются в 256Mb NAND. Ниже опишу подробней.
32Гб eMMC разбита на 3 раздела:
  • 2 Гб раздел ext3, смонтирован как /home. Тут лежат настройки программ и разная мелочь. Также сюда ведет ссылка /opt (в /home/opt), сюда устанавливаются программы размером большим 500Кб (в старых прошивках, хотя все зависит от разработчику, куда захочет, туда и засунет, и я рекомендую туда именно устанавливать свое ПО).
  • 768 Мб, как swap-раздел.
  • Оставшиеся 27Гб отформатированы как VFAT и смонтированы в /home/user/MyDocs. Сюда программы не устанавливаются, потому-что этот раздел размонтируется, когда вы подключаете устройство к компьютеру, для того, чтоб его моно было подключить как внешний накопитель. Кстати, никто не мешает Вам его конвертировать/переформатировать в ext3 например, но к Windows Вы сможете подключить устройство только с помощью дополнительного ПО (портированного FUSE и ext3fs драйвера в нем, например)

image

Ну а теперь подробней про rootfs. Весь 256Mb NAND отформатирован как UBIFS. UBIFS — это замена популярному JFFS2. Разница в том, что UBIFS умеет кэшировать и на больших объемах получается хороший прирост производительности. Недостаток, что UBIFS сложнее (он работает поверх UBI, который работает поверх MTD), а JFFS2 работает напрямую с NAND. Ну еще UBIFS появился только в 2007 году и работает с ядром начиная с версии 2.6.27. Именно поэтому практически во всех встраиваемых устройствах используется JFFS2. Но инженеры из Nokia приняли смелое решение использовать UBIFS. Подробней об этой файловой системе можно почитать здесь и здесь.
В NAND располагается загрузчик, ядро и корневая директория — "/" плюс разные системные файлы, необходимы для загрузки. На «голом» устройстве должно быть около 100Мб свободно. Проблема в том, что если вы подключаете много репозиториев, то кэш apt'а раздувается очень сильно. Плюс некоторые библиотеки тоже устанавливаются в rootfs и у меня уже через неделю rootfs переполнился. Это очень печально и приходится предпринимать дополнительные действия по предотвращению этого. При переполнении rootfs система начинает тормозить и обновление каталогов приложений невозможно (некуда сохранять кэш).

В идеале все что можно лучше перенести в VFAT, но это опасно, так как он отмонтируется при подключении к компу. Можно все перетащить в /home, как это сделано для /opt. Именно на этом и основывается мой метод.

Состояние заполненности можно проверить, выполнив команду в терминале:
df -h


Самый простой способ все перенести — это создать скрипт с вот таким содержимым:
#!/bin/sh
# Nokia N900 Maemo 5 Script to free up space on rootfs
# ignoring errors when creating dirs that may already exist

# Moving ?? icons to /home/opt
mkdir -p /home/opt/usr/share/icons 2> /dev/null
cp -r /usr/share/icons/* /home/opt/usr/share/icons
rm -r /usr/share/icons
ln -s /home/opt/usr/share/icons /usr/share/icons

# Moving video on start-up to /home/opt
mkdir -p /home/opt/usr/share/hildon-welcome 2> /dev/null
cp -r /usr/share/hildon-welcome/* /home/opt/usr/share/hildon-welcome
rm -r /usr/share/hildon-welcome
ln -s /home/opt/usr/share/hildon-welcome /usr/share/hildon-welcome

# ??
mkdir -p /home/opt/usr/share/pixmaps 2> /dev/null
cp -r /usr/share/pixmaps/* /home/opt/usr/share/pixmaps
rm -r /usr/share/pixmaps
ln -s /home/opt/usr/share/pixmaps /usr/share/pixmaps

# Moving 'apt cache' to /home/opt - Valid until Bug 5746 is fixed.
mkdir -p /home/opt/var/cache/apt 2> /dev/null
cp -r /var/cache/apt/* /home/opt/var/cache/apt
rm -r /var/cache/apt
ln -s /home/opt/var/cache/apt /var/cache/apt

# Moving locales Source
mv /usr/share/locale /opt
ln -s /opt/locale /usr/share/locale


* This source code was highlighted with Source Code Highlighter.


например вы создали файл с именем free_my_rootfs.sh
выполните в консоли:
chmod +x free_my_rootfs.sh
./free_my_rootfs.sh


Этот скрипт переносит иконки, видео «рукопожатие» стартующее при включении, кэш apt'a и локали системы.

Дополнительно можно еще перетащить питон «optify python» (если перевести, то «перетащить python в /opt»):
sudo gainroot
apt-get install pymaemo-optify
apt-get clean


Приложение «Карты» тоже хранятся в rootfs (сами карты кэшируются на самый большой раздел), можно сделать так:
sudo gainroot
mv /usr/share/nokia-maps /home/opt/
ln -s /home/opt/nokia-maps /usr/share/nokia-maps


Можно еще переместить движок MicroB:
sudo gainroot
mv /usr/share/microb-engine /home/opt
ln -s /home/opt/microb-engine /usr/share/microb-engine


Ну и можно переместить учебник по пользованию N900:
sudo gainroot
mv /usr/share/tutorial-applet /home/opt
ln -s /home/opt/tutorial-applet /usr/share/tutorial-applet


Темы тоже живут в rootfs, но переносить их не очень безопасно, можно получить «кирпич» и придется перепрошивать устройство. Просто возьмите за правило держать парочку тем и удалять те, которым в ближайшее время пользоваться не будете.

Ну вот вроде это все должно Вам помочь. Есть другой метод, очень брутальный, но для настоящих гиков. Заключается он в том, что нужно создать еще один раздел (уменьшив 27 Гб VFAT раздел) и засунуть все туда. Подробное описание этого метода можно найти здесь. Там еще есть умный скрипт, который проверяет перемещены ли уже данные и в конце покажет сколько места он спас на rootfs. Но пользоваться этим методом новичкам не рекомендую.

Ну и главное, в следующей прошивк
Теги:
Хабы:
+37
Комментарии 18
Комментарии Комментарии 18

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн