<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://paz00.ru/index.php?action=history&amp;feed=atom&amp;title=Advanced_partitioning</id>
	<title>Advanced partitioning - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://paz00.ru/index.php?action=history&amp;feed=atom&amp;title=Advanced_partitioning"/>
	<link rel="alternate" type="text/html" href="https://paz00.ru/index.php?title=Advanced_partitioning&amp;action=history"/>
	<updated>2026-04-30T13:16:58Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://paz00.ru/index.php?title=Advanced_partitioning&amp;diff=92&amp;oldid=prev</id>
		<title>Unknown user в 08:13, 15 октября 2014</title>
		<link rel="alternate" type="text/html" href="https://paz00.ru/index.php?title=Advanced_partitioning&amp;diff=92&amp;oldid=prev"/>
		<updated>2014-10-15T08:13:08Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Введение==&lt;br /&gt;
На карте есть скрытое место (на некоторых тошках две партиции по 1 MiB, на некоторых две по 2 MiB) [2]. Эти области описаны в регистре ext_csd контроллера. Сделаны они для того, чтобы туда пихать специфичный для девайса загрузчик.&lt;br /&gt;
&lt;br /&gt;
Идея: запихать BCT + u-boot или BCT + fastboot + PT (PT нужен, чтобы fastboot нашел партицию LNX) в boot партиции, а ядро грузить с mmcblk0. На /dev/mmcblk0 можно будет сделать любую разметку.&lt;br /&gt;
&lt;br /&gt;
==Теория==&lt;br /&gt;
В партиции BCT содержится информация об инициализации памяти, загрузчиках и т.п. [1]. С помощью [[cbootimg|bctdump]] можно посмотреть информацию в BCT.&lt;br /&gt;
В партиции EBT содержится загрузчик (из коробки это fastboot).&lt;br /&gt;
Также стоит учитывать, что при разбивке минимальный размер партиции составляет 524288 байт (256 секторов по 2048 байт).&lt;br /&gt;
Посмотреть, какой размер у boot партиций можно в dmesg (ищем там boot0).&lt;br /&gt;
&lt;br /&gt;
==Идеи==&lt;br /&gt;
Основная идея, запихать всю (или большую часть информации в область, занимаемую двумя boot партициями, чтобы основную часть накопителя можно было разбивать как угодно.&lt;br /&gt;
* Использовать u-boot - в BCT поместить совмещенный образ BCT и u-boot (работает у srwarren и PaulFertser)&lt;br /&gt;
  Не пробовал.&lt;br /&gt;
* BCT, PT, EBT вместить область, занимаемую двумя boot партициями.&lt;br /&gt;
  fastboot от андроида 2.1 больше 1 MiB, поэтому такой вариант на некоторых тошках возможен '''только''' с загрузчиком от 2.2&lt;br /&gt;
  Вариант работает.&lt;br /&gt;
* BCT и EBT объединить (как в случае с u-boot'ом), PT оставить второй партицией.&lt;br /&gt;
  Не работает, похоже fastboot не находит PT. '''Нужно перепроверить.'''&lt;br /&gt;
* BCT, PT и EBT обединить в один образ&lt;br /&gt;
  Не работает, хз почему. '''Нужно перепроверить.'''&lt;br /&gt;
* BCT отдельно, PT и EBT объединить&lt;br /&gt;
  Не пробовал.&lt;br /&gt;
&lt;br /&gt;
'''TODO:''' посмотреть исходники [http://nv-tegra.nvidia.com/gitweb/?p=tools/tegrarcm.git;a=blob;f=README;h=89b019da1a3c2354f0fe4594ffd997b09cb22275;hb=HEAD tegrarcm] на предмет поиска PT и использования более маленьких партиций при разбивке.&lt;br /&gt;
&lt;br /&gt;
==Практика==&lt;br /&gt;
Сначала опишу различные действия, которые нам пригодятся. Они по большому счету не привязаны к какому-либо варианту разбивки.&lt;br /&gt;
&lt;br /&gt;
===Добываем fastboot===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bct_dump part-2-android21.img | less&lt;br /&gt;
&lt;br /&gt;
Version       = 0x00020001;&lt;br /&gt;
BlockSize     = 0x00004000;&lt;br /&gt;
PageSize      = 0x00000200;&lt;br /&gt;
PartitionSize = 0x01000000;&lt;br /&gt;
# Bootloader used       = 1;&lt;br /&gt;
# Bootloaders max       = 4;&lt;br /&gt;
# BCT size              = 4080;&lt;br /&gt;
# Hash size             = 16;&lt;br /&gt;
# Crypto offset         = 16;&lt;br /&gt;
# Crypto length         = 4064;&lt;br /&gt;
# Max BCT search blocks = 64;&lt;br /&gt;
#&lt;br /&gt;
# These values are set by cbootimage using the&lt;br /&gt;
# bootloader provided by the Bootloader=...&lt;br /&gt;
# configuration option.&lt;br /&gt;
#&lt;br /&gt;
# Bootloader[0].Version      = 0x00000001;&lt;br /&gt;
# Bootloader[0].Start block  = 224;&lt;br /&gt;
# Bootloader[0].Start page   = 0;&lt;br /&gt;
# Bootloader[0].Length       = 1091568;&lt;br /&gt;
# Bootloader[0].Load address = 0x00108000;&lt;br /&gt;
# Bootloader[0].Entry point  = 0x00108000;&lt;br /&gt;
# Bootloader[0].Attributes   = 0x00000004;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Т.е. загрузчик 2.1 имеет размер 1091568 байт, и будет искаться по смещению 3670016 (0x4000 * 224).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp part-4.img fastoot-ac100-android21.bin&lt;br /&gt;
truncate -s 1091568 fastoot-ac100-android21.bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Готовим новый BCT===&lt;br /&gt;
Нужно сохранить текущий конфиг&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bct_dump part-2-android21.img &amp;gt; bct.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
добавить '''в конец''' (если добавить в начало, потеряется информация о sdram) информацию о загрузчике&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BootLoader = fastoot-ac100-android21.bin,0x00108000,0x00108000,Complete;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
и сгенерировать новый образ BCT&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cbootimage -d ./bct.cfg ac100.bct.new&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На этом этапе мы имеем новый образ, содержащий в себе загрузчик.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-rw-rw-r--. 1 stuw stuw 1131008 Dec 26 12:40 new.bct&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
информация о загрузчике обновлена&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bct_dump new.bct | less&lt;br /&gt;
&lt;br /&gt;
Version       = 0x00020001;&lt;br /&gt;
BlockSize     = 0x00004000;&lt;br /&gt;
PageSize      = 0x00000200;&lt;br /&gt;
PartitionSize = 0x01000000;&lt;br /&gt;
# Bootloader used       = 1;&lt;br /&gt;
# Bootloaders max       = 4;&lt;br /&gt;
# BCT size              = 4080;&lt;br /&gt;
# Hash size             = 16;&lt;br /&gt;
# Crypto offset         = 16;&lt;br /&gt;
# Crypto length         = 4064;&lt;br /&gt;
# Max BCT search blocks = 64;&lt;br /&gt;
#&lt;br /&gt;
# These values are set by cbootimage using the&lt;br /&gt;
# bootloader provided by the Bootloader=...&lt;br /&gt;
# configuration option.&lt;br /&gt;
#&lt;br /&gt;
# Bootloader[0].Version      = 0x00020001;&lt;br /&gt;
# Bootloader[0].Start block  = 2;&lt;br /&gt;
# Bootloader[0].Start page   = 0;&lt;br /&gt;
# Bootloader[0].Length       = 1091568;&lt;br /&gt;
# Bootloader[0].Load address = 0x00108000;&lt;br /&gt;
# Bootloader[0].Entry point  = 0x00108000;&lt;br /&gt;
# Bootloader[0].Attributes   = 0x00000000;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Теперь загрузчик будет искаться по смещению 32768. (убедитесь, что присутствует информация о sdram).&lt;br /&gt;
По сути, BCT занимает 4080 байт, остальное занимает загрузчик, но часть места похоже не используется (после BCT и до загрузчика). Для использования с nvflash нужны только 4080 байт BCT.&lt;br /&gt;
&lt;br /&gt;
===Делаем разбивку===&lt;br /&gt;
Покажу на примере конфига для тошки, с размером boot партиции 1MiB и с использованием загрузчика от 2.2 (от 2.1 не влезает). Разбивать будем так:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[    boot0   ][  boot1  ][       main mmc     ]&lt;br /&gt;
[ BCT ][ PT  ][   EBT   ][ MBR ][ LNX ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Конфиг для данного случая будет выглядеть так:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[device]&lt;br /&gt;
type=hsmmc&lt;br /&gt;
instance=3&lt;br /&gt;
&lt;br /&gt;
[partition]&lt;br /&gt;
name=BCT&lt;br /&gt;
id=2&lt;br /&gt;
type=boot_config_table&lt;br /&gt;
allocation_policy=sequential&lt;br /&gt;
filesystem_type=basic&lt;br /&gt;
size=524288&lt;br /&gt;
file_system_attribute=0&lt;br /&gt;
partition_attribute=0&lt;br /&gt;
allocation_attribute=8&lt;br /&gt;
percent_reserved=0&lt;br /&gt;
&lt;br /&gt;
[partition]&lt;br /&gt;
name=PT&lt;br /&gt;
id=3&lt;br /&gt;
type=partition_table&lt;br /&gt;
allocation_policy=sequential&lt;br /&gt;
filesystem_type=basic&lt;br /&gt;
size=524288&lt;br /&gt;
file_system_attribute=0&lt;br /&gt;
partition_attribute=0&lt;br /&gt;
allocation_attribute=8&lt;br /&gt;
percent_reserved=0&lt;br /&gt;
&lt;br /&gt;
[partition]&lt;br /&gt;
name=EBT&lt;br /&gt;
id=4&lt;br /&gt;
type=bootloader&lt;br /&gt;
allocation_policy=sequential&lt;br /&gt;
filesystem_type=basic&lt;br /&gt;
size=1048576&lt;br /&gt;
file_system_attribute=0&lt;br /&gt;
partition_attribute=0&lt;br /&gt;
allocation_attribute=8&lt;br /&gt;
percent_reserved=0&lt;br /&gt;
filename=fastboot-ac100-22.bin&lt;br /&gt;
&lt;br /&gt;
[partition]&lt;br /&gt;
name=MBR&lt;br /&gt;
id=5&lt;br /&gt;
type=data&lt;br /&gt;
allocation_policy=sequential&lt;br /&gt;
filesystem_type=basic&lt;br /&gt;
size=524288&lt;br /&gt;
file_system_attribute=0&lt;br /&gt;
partition_attribute=0&lt;br /&gt;
allocation_attribute=8&lt;br /&gt;
percent_reserved=0&lt;br /&gt;
&lt;br /&gt;
[partition]&lt;br /&gt;
name=LNX&lt;br /&gt;
id=6&lt;br /&gt;
type=data&lt;br /&gt;
allocation_policy=sequential&lt;br /&gt;
filesystem_type=basic&lt;br /&gt;
size=8388608&lt;br /&gt;
file_system_attribute=0&lt;br /&gt;
partition_attribute=0&lt;br /&gt;
allocation_attribute=8&lt;br /&gt;
percent_reserved=0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Для создания recovey партиции ('''нужно использовать загрузчик от 2.1''') нужно добавить еще одну секцию перед LNX (никто не мешает сделать эту партицию размером с LNX, чтобы туда запихать еще одно полноценное ядро для загрузки linux/android). Только я пока не знаю, как быть с номерами ;-)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[partition]&lt;br /&gt;
name=SOS&lt;br /&gt;
id=5&lt;br /&gt;
type=data&lt;br /&gt;
allocation_policy=sequential&lt;br /&gt;
filesystem_type=basic&lt;br /&gt;
size=5242880&lt;br /&gt;
file_system_attribute=0&lt;br /&gt;
partition_attribute=0&lt;br /&gt;
allocation_attribute=8&lt;br /&gt;
percent_reserved=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт===&lt;br /&gt;
'''Не оттестировано, использовать на свой страх и риск :)'''&lt;br /&gt;
https://github.com/Stuw/ac100-repart&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git://github.com/Stuw/ac100-repart.git&lt;br /&gt;
cd ac100-repart&lt;br /&gt;
./main.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==GPT==&lt;br /&gt;
Процедура описана у Stephen'а [http://ac100.grandou.net/swarren_brain_dump?&amp;amp;#using_a_gpt_partition_table в статье]. Читать '''внимательно''' и '''вдумчиво''', могут быть очепятки :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ссылки==&lt;br /&gt;
[[http://www.spinics.net/lists/linux-tegra/msg08125.html|[1] ]] http://www.spinics.net/lists/linux-tegra/msg08125.html&lt;br /&gt;
[[http://ac100.grandou.net/swarren_brain_dump?&amp;amp;#mmc_boot_sectors|[2] ]] http://ac100.grandou.net/swarren_brain_dump?&amp;amp;#mmc_boot_sectors&lt;/div&gt;</summary>
		<author><name>Unknown user</name></author>
	</entry>
</feed>