Tegrapart
Если Вы переразбивали внутренний накопитель, то вероятно вам пригодится понимание того, как работает tegrapart.
tegrapart - это один из вариантов, которым ядро находит партиции на накопителе тошки (второй механизм называется nvtegra). Параметры разбивки (партиции) задаются в cmdline в формате <абревиатура партиции>:<стартовый сектор>:<кол-во секторов>:<размер сектора>. Например, один из вариантов tegrapart=recovery:300:a00:800,boot:d00:1000:800,mbr:1d00:200:800 Здесь задается 3 партиции: recovery (5-я партиция в нумерации nvflash), boot (6-я партиция в нумерации nvflash) и mbr. В начале MBR партиции записан, как это ни странно, MBR. Тот самый, который присутствует в нулевом секторе жесткого диска обычного PC. Внутри MBR можно задать только 4 партиции. В заводской разбивке после MBR идет 5 партиций (APP, CAC, MSC, UBA, UDB), в которых размещаются данные android, поэтому инженерам пришлось использовать так называемую extended партицию (также делается на PC, если нужно разбить диск на более чем 4 партиции). Внутри этой партиции может содержаться большое количество логических томов. Для описания каждого такого тома необходима специальная запись, которая на тошибе размещается во вспомогательныхх партициях EM1 и EM2. После переразбивки положение и размер некоторых партиций меняется, удаляются партиции EM1 и EM2, а после MBR остается 2 партиции для данных. Чтобы после заработала логика tegrapart, нужно править MBR (иначе он будет указывать на старые места партиций) или описывать все партиции в cmdline (mbr описывать в этом случае нельзя, т.к. разбор останавливается на mbr партиции).
Замечание: наряду с tegrapart в ядре реализован механизм nvtegra, который опирается на описание партций, содержащееся в партиции PT (3-я партиция в нумерации nvflash), а не на cmdline и содержимое партиций MBR, EM1 и EM2.
117-я
Рассмотрим, что к чему на примере 117-й модели тошибы (stuw). Структура партиций вот такая:
Id Name Start Size 2 BCT 0 1536 3 PT 1536 256 4 EBT 1792 1024 5 SOS 2816 2560 6 LNX 5376 4096 7 MBR 9472 512 8 APP 9984 153600 9 CAC 163584 204800 10 MSC 368384 1024 11 EM1 369408 256 12 UDA 369664 632320 13 EM2 1001984 256 14 UDB 1002240 2876672
Соответственно в партции 7 находится MBR:
% hexdump -C -n512 ./part-7-MBR.img 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001c0 00 00 83 00 00 00 00 08 00 00 00 60 09 00 00 00 |...........`....| 000001d0 00 00 83 00 00 00 00 68 09 00 00 80 0c 00 00 00 |.......h........| 000001e0 00 00 83 00 00 00 00 e8 15 00 00 10 00 00 00 00 |.......Х........| 000001f0 00 00 05 00 00 00 00 f8 15 00 00 34 d6 00 55 aa |.......Ь...4ж.U╙| 00000200
Последние два байта 55aa, значит это и правда MBR. Партиции прописаны начиная со смещения 0x1BE:
Offset Type Start Size 0x1BE 0x83 (Linux) 2048 614400 0x1CE 0x83 (Linux) 616448 819200 0x1DE 0x83 (Linux) 1435648 4096 0x1EE 0x05 (Extended) 1439744 14038016
Обратим внимание на то, что в MBR размеры указаны в секторах по 512 байт, а в partitiontable - по 2048. Первая партиция начинается с 2048-го сектора (по 512 байт, или 512-го сектора по 2048 байт). Это соответствует партиции APP. Размер этой партиции также одинаков в MBR и partitiontable. Вторая партиция в MBR указывает на CAC, третья - на MSC. Четвертая партиция имеет тип extended и включает в себя EM1, UDA, EM2 и UDB.
% hexdump -C -n512 part-11-EM1.img 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001c0 00 00 83 00 00 00 00 04 00 00 00 98 26 00 00 00 |............&...| 000001d0 00 00 05 00 00 00 00 9c 26 00 00 98 af 00 00 00 |........&...╞...| 000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U╙| 00000200
Offset Type Start Size 0x1BE 0x83 (Linux) 1024 2529280 0x1CE 0x05 (Extended) 2530304 11507712 0x1DE не используется 0x1EE не используется
Первая описанная партиция начинается сразу после EM1 и имеет размер 2529280 секторов (632320, если сектора по 2048 байт), значит это описание UDA. Вторая - extended партиция, включающая в себя EM2 и UDB.
% hexdump -C -n512 part-13-EM2.img 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001c0 00 00 83 00 00 00 00 04 00 00 00 94 af 00 00 00 |............╞...| 000001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U╙| 00000200
Offset Type Start Size 0x1BE 0x83 (Linux) 1024 11506688 0x1CE не задано 0x1DE не используется 0x1EE не используется
В EM2 описана одна партиция. Как несложно догадаться, это UDB.