- Создаем прошивку для Android своими руками. Работа с рамдиском.
- Xiaomi представила технологию RAMDISK, которая значительно ускоряет производительность в играх
- Патчим прошивку Android за 5 минут
- Задача
- Необходимые инструменты
- Решение
- 1. Извлекаем с устройства загрузочный образ
- 2. Затем загрузочный образ нужно разобрать
- 3. Патчим
- 4. Заменяем загрузочный образ на устройстве
- Итоги
- azureru / extract android kernel.md
- This comment has been minimized.
- petrosmp commented Sep 16, 2018 •
- This comment has been minimized.
- kpirnie commented Mar 7, 2019
- This comment has been minimized.
- arendtio commented Aug 10, 2019
- This comment has been minimized.
- HermesNWO commented Sep 4, 2019
- This comment has been minimized.
- ytrezq commented Mar 26, 2020 •
- This comment has been minimized.
- TheTangledMind commented Aug 9, 2020
- Патчим прошивку Android за 5 минут
- Задача
- Необходимые инструменты
- Решение
- 1. Извлекаем с устройства загрузочный образ
- 2. Затем загрузочный образ нужно разобрать
- 3. Патчим
- 4. Заменяем загрузочный образ на устройстве
- Итоги
Создаем прошивку для Android своими руками. Работа с рамдиском.
Работаем с рамдиском (для ядер с initrd).
Статья написана на примере работы с образом ramdisk от таблетки Flytouch 2.
Сам рамдиск представляет из себя архив gz внутри которго содержится архив cpio расположенный в образе изготовленном средствами mkimage. Посмотрим на образ внимательнее.
Эта информация нам понадобится в дальнейшем при создании собственного рамдиска.
/droid/installer$ mkimage -l ramdisk.img
Image Name: hRamdisk
Created: Sun Apr 24 16:28:14 2011
Image Type: ARM Linux RAMDisk Image (uncompressed)
Data Size: 1485551 Bytes = 1450.73 kB = 1.42 MB
Load Address: 0x41000000
Entry Point: 0x41000000
Ок, теперь будем распаковывать рамдиск для его просмотра и\или модификации. Находим т.н. magic (1f8b08) для gz в образе, притом только первое вхождение.
/droid/installer$ grep -P -a -b -m 1 —only-matching ‘\x1F\x8B\x08’ ramdisk.img | cut -f 1 -d :
64
Теперь имея позицию начала gzip-а вытаскиваем его из образа (читать блоками по 64 байта, порпустив первый блок — bs=64 skip=1).
/droid/installer$ dd if=ramdisk.img bs=64 skip=1 of=ramdisk.cpio.gz
23211+1 записей считано
23211+1 записей написано
скопирован 1485551 байт (1,5 MB), 0,0738819 c, 20,1 MB/c
Далее с полученным файлом ramdisk.cpio.gz можно работать как с обычным архивом, однако нам нужно сохранить все права доступа на файлы извлеченные из этого архива. Распаковать можно например так:
/droid/installer$ gzip -dc ramdisk.cpio.gz | cpio -id
6963 блоков
Теперь о запаковке рамдиска. Мы имеем распакованный рамдиск. Если мы внесли в него нужные нам правки, то его необходимо правильно собрать. Для этого удалим старый рамдиск и архив ramdisk.cpio.gz из этой папки.
/droid/installer$ rm -f ramdisk.cpio.gz ramdisk.img
Далее создадим архив cpio.
/droid/installer$ find ./ | cpio -H newc -o > ../ramdisk.cpio
6963 блоков
И заархивируем его в gzip.
/droid/installer$ cd ..
barsuk@droidtest:
/droid$ gzip ramdisk.cpio
Теперь нам осталось создать образ рамдиска в mkimage. Адрес загрузки и точку входа возьмем из вывода mkimage -l, который мы делали в начале статьи.
Источник
Xiaomi представила технологию RAMDISK, которая значительно ускоряет производительность в играх
Объёмом оперативной памяти в 8 Гб уже никого не удивишь – эта опция постепенно становится стандартной для многих современных смартфонов. Геймерские устройства получают до 16 Гб RAM.
Недавно компания Xiaomi представила интересную технологию RAMDISK, которая позволяет использовать ОЗУ смартфона как хранилище на диске, за счёт чего производительность устройства в играх и приложениях увеличивается.
Эта технология уже существует на компьютерах, но для смартфонов её пока никто не использовал. Режим RAMDISK Trial Mode будет доступен для пользователей Mi 10 Ultra с 16 Гб оперативной памяти LPDDR5.
Технология RAMDISK позволяет использовать часть RAM в качестве виртуального хранилища. Плюс этого в том, что ОЗУ – гораздо более быстрая память, чем обычная встроенная. К примеру, в Xiaomi Mi 10 Ultra задействована оперативная память типа LPDDR5 RAM и внутренняя — UFS 3.1. Скорость RAM при этом составляет 44 Гб/с, а скорость чтения/записи хранилища UFS 3.1 составляет 1700+/750+ Мб/с.
Для использования режима RAMDISK Trial Mode на Mi 10 Ultra, вам необходимо перейти в раздел Speed Installation в Game Center и выбрать Game Trial. Согласно заявлениям компании, загрузка игры Peace Elite в этом режиме занимает около 10 секунд, что на 100 процентов быстрее, чем в обычном режиме.
Этот режим поддерживает 10 популярных игр, включая Glory of the King, QQ Speed и Peace Elite. Каждую из игр можно удалить в дальнейшем, при этом её фрагментов в памяти не останется и замедлять работу телефона она не будет.
Учтите, что в случае, если смартфон отключится по любой причине, игра, загруженная в ОЗУ через RAMDISK, исчезнет оттуда. Xiaomi предлагает возможность переноса игр, установленных в ОЗУ, во внутреннюю память устройства.
Источник
Патчим прошивку Android за 5 минут
Задача
Все началось с того, что я захотел установить на планшет Digma Optima 7.61 игру GTA San Andreas. К сожалению, виртуальная SD-карта планшета имеет объем менее 1 Гб, а кэш игры весит порядка 2-3 Гб. На планшете установлен Android 4.4.2 и возможность просто взять и сменить память по умолчанию в нем отсутствует. Так же в нем отсутствует файл /etc/vold.fstab (он есть на более старых версиях андроида, и изменив данный файл с root-правами, можно поменять местами виртуальную и реальную карты памяти).
Необходимые инструменты
1. Компьютер или ноутбук с ОС Linux.
2. Утилиты adb и fastboot (входят в состав Android SDK, так же, как заметил tmnhy, входят в репозитории как отдельные пакеты).
3. Набор утилит bootimg_tools (нашел здесь).
Решение
1. Извлекаем с устройства загрузочный образ
— Подключаем устройство к компьютеру через usb-кабель и заходим в shell устройства:
— Где-то в папке /dev/block на устройстве нужно найти файл с именем boot. У меня он находился по пути /dev/block/by-name/boot, но данный путь может различаться на разных устройствах.
— Извлекаем загрузочный образ:
— Выходим из shell’а (exit) и извлекаем образ:
2. Затем загрузочный образ нужно разобрать
— Скачиваем и распаковываем bootimg_tools.
— Добавляем bootimg_tools в PATH:
— Если все предыдущие шаги сделаны верно, то должна появиться папка boot-from-device. Внутри нее должны лежать файлы zImage и ramdisk.cpio.gz, а так же папка ramdisk. Как раз внутри последней лежит содержимое загрузочного образа, которое мы будем патчить.
3. Патчим
Для решения своей задачи я нашел строчку, которую нужно заменить, в файле init.sun8i.rc. Я просто заменил export EXTERNAL_STORAGE /mnt/sdcard на export EXTERNAL_STORAGE /mnt/extsd. Как я понимаю, это как раз и есть то значение, которое возвращает метод Environment.getExternalStorageDirectory() в Android API. В пользу этого предположения говорит тот факт, что после применения патча приложения начали использовать аппаратную карту памяти вместо виртуальной для хранения своих данных.
4. Заменяем загрузочный образ на устройстве
Я написал для этих целей небольшой скрипт:
Итоги
После проделанных манипуляций игра на планшете успешно заработала.
Источник
azureru / extract android kernel.md
Extracting Existing Kernel + Ramfs
Enter the machine using adb shell
Run cat /proc/partitions
Dump the partition to a file using dd
Extract it to your linux system adb pull /data/kernel_ramfs.img
Run sudo apt-get install abootimg
Check the Kernel Dump
Run abootimg -i kernel_ramfs.img . It need to show
That means you dump the correct kernel+ramfs
Extract Kernel Dump
It will extract zImage and also initrd.img
Extract Ramdisk, Modify And Repack
Modify the ramdisk accordingly (e.g. you modify init.rc or add another additonal files) Then repack accordingly
Adb Put and Redumping
Reboot — And pray for the best
This comment has been minimized.
Copy link Quote reply
petrosmp commented Sep 16, 2018 •
adb pull /data/kernel_ramfs.img
returns
adb: error: failed to copy ‘/data/kernel_ramfs.img’ to ‘.\kernel_ramfs.img’: remote Permission denied
My device is rooted (and connected), adb is running with root privileges and I also tried
adb shell
su
mount -o remount,rw /dev/block/stl9 /system
chmod 777 /system/app
exit
exit
and then re running it but sadly with no succes. Any ideas?
This comment has been minimized.
Copy link Quote reply
kpirnie commented Mar 7, 2019
@petrosmp Without knowing what device you are attempting this with, all we can do is guess and cannot help you pull it.
Let us know what device you are talking about, and maybe we can help you figure out where your ramdisk is actually located
This comment has been minimized.
Copy link Quote reply
arendtio commented Aug 10, 2019
@petrosmp I guess the problem is that your adb has not read access to the file. Just because you run it with root privileges on your PC doesn’t mean it has root privileges on the device. You can validate this assumption by doing ‘adb shell’ and then ls -l /data/kernel_ramfs.img (without su ).
So copying it to a place where you are allowed to access the file without being root should solve the issue. For me running mv /data/kernel_ramfs.img /storage/6264-6339/; chmod a+r /storage/6264-6339/kernel_ramfs.img as root worked just fine (that is my sdcard). Afterward, I was able to pull the file via adb pull /storage/6264-6339/kernel_ramfs.img .
This comment has been minimized.
Copy link Quote reply
HermesNWO commented Sep 4, 2019
@petrosmp You have to activate OEM unlock in developper options !
This comment has been minimized.
Copy link Quote reply
ytrezq commented Mar 26, 2020 •
@petrosmp.
In my case, simply unpacking and repacking without changing anything through
results in a different boot.img (but of the same size) which doesn’t work on my Samsung Galaxy tab s3.
This comment has been minimized.
Copy link Quote reply
TheTangledMind commented Aug 9, 2020
I dont get the same information that you do from cat. I get this.
130|gts6lwifi:/ # cat /proc/partitions
major minor #blocks name
1 0 8192 ram0
1 1 8192 ram1
1 2 8192 ram2
1 3 8192 ram3
1 4 8192 ram4
1 5 8192 ram5
1 6 8192 ram6
1 7 8192 ram7
1 8 8192 ram8
1 9 8192 ram9
1 10 8192 ram10
1 11 8192 ram11
1 12 8192 ram12
1 13 8192 ram13
1 14 8192 ram14
1 15 8192 ram15
8 0 249835520 sda
8 1 2048 sda1
8 2 2048 sda2
8 3 4 sda3
8 4 8 sda4
8 5 32768 sda5
8 6 20480 sda6
8 7 10240 sda7
8 8 10240 sda8
8 9 20480 sda9
8 10 1024 sda10
8 11 512 sda11
8 12 40960 sda12
8 13 512 sda13
8 14 4096 sda14
8 15 16384 sda15
259 17 97280 sda16
259 18 87040 sda17
259 19 65536 sda18
259 20 10240 sda19
259 21 65536 sda20
259 22 80852 sda21
259 23 16384 sda22
259 24 16384 sda23
259 25 6381568 sda24
259 26 1347584 sda25
259 27 1024000 sda26
259 28 409600 sda27
259 29 40960 sda28
259 30 51200 sda29
259 31 239978364 sda30
8 16 8192 sdb
8 17 3776 sdb1
8 18 4260 sdb2
8 32 8192 sdc
8 33 3776 sdc1
8 34 4260 sdc2
8 48 61440 sdd
8 49 1024 sdd1
8 50 4096 sdd2
8 51 2048 sdd3
8 52 512 sdd4
8 53 512 sdd5
8 54 4096 sdd6
8 55 4 sdd7
8 56 1024 sdd8
8 57 384 sdd9
8 58 512 sdd10
8 59 512 sdd11
8 60 512 sdd12
8 61 256 sdd13
8 62 256 sdd14
8 63 4 sdd15
259 0 8192 sdd16
259 1 4 sdd17
259 2 2048 sdd18
259 3 8192 sdd19
259 4 128 sdd20
259 5 512 sdd21
259 6 64 sdd22
259 7 80 sdd23
259 8 2048 sdd24
259 9 32 sdd25
259 10 32 sdd26
259 11 32 sdd27
259 12 512 sdd28
259 13 2048 sdd29
259 14 2048 sdd30
259 15 1024 sdd31
259 16 18536 sdd32
179 0 15138816 mmcblk0
179 1 15134720 mmcblk0p1
gts6lwifi:/ #
Источник
Патчим прошивку Android за 5 минут
Задача
Все началось с того, что я захотел установить на планшет Digma Optima 7.61 игру GTA San Andreas. К сожалению, виртуальная SD-карта планшета имеет объем менее 1 Гб, а кэш игры весит порядка 2-3 Гб. На планшете установлен Android 4.4.2 и возможность просто взять и сменить память по умолчанию в нем отсутствует. Так же в нем отсутствует файл /etc/vold.fstab (он есть на более старых версиях андроида, и изменив данный файл с root-правами, можно поменять местами виртуальную и реальную карты памяти).
Необходимые инструменты
1. Компьютер или ноутбук с ОС Linux.
2. Утилиты adb и fastboot (входят в состав Android SDK, так же, как заметил tmnhy, входят в репозитории как отдельные пакеты).
3. Набор утилит bootimg_tools (нашел здесь).
Решение
1. Извлекаем с устройства загрузочный образ
— Подключаем устройство к компьютеру через usb-кабель и заходим в shell устройства:
— Где-то в папке /dev/block на устройстве нужно найти файл с именем boot. У меня он находился по пути /dev/block/by-name/boot, но данный путь может различаться на разных устройствах.
— Извлекаем загрузочный образ:
— Выходим из shell’а (exit) и извлекаем образ:
2. Затем загрузочный образ нужно разобрать
— Скачиваем и распаковываем bootimg_tools.
— Добавляем bootimg_tools в PATH:
— Если все предыдущие шаги сделаны верно, то должна появиться папка boot-from-device. Внутри нее должны лежать файлы zImage и ramdisk.cpio.gz, а так же папка ramdisk. Как раз внутри последней лежит содержимое загрузочного образа, которое мы будем патчить.
3. Патчим
Для решения своей задачи я нашел строчку, которую нужно заменить, в файле init.sun8i.rc. Я просто заменил export EXTERNAL_STORAGE /mnt/sdcard на export EXTERNAL_STORAGE /mnt/extsd. Как я понимаю, это как раз и есть то значение, которое возвращает метод Environment.getExternalStorageDirectory() в Android API. В пользу этого предположения говорит тот факт, что после применения патча приложения начали использовать аппаратную карту памяти вместо виртуальной для хранения своих данных.
4. Заменяем загрузочный образ на устройстве
Я написал для этих целей небольшой скрипт:
Итоги
После проделанных манипуляций игра на планшете успешно заработала.
Источник