Перенос Android на HDD в Mele A100 (и похожих, Allwinner A10)

f2e668c33b3e483da7a873e6eecf3b41.jpg

Досталось мне такое вот устройство, Mele A100 с битой nand памятью, работало после прошивки пару перезагрузок, потом не загружалось (bootloop).
Первое что пришло в голову подключить консольку, но ничего информативного туда не было.
Второе что пришло в голову, после непродолжительного гугления, это записать прошивку на sd карту, на 4pda такое есть, но у меня была только карточка на 32G с моего мобильника, покупать я не хотел, да и скорость будет не очень.
Третье, что пришло в голову, после продолжительного рассматривания платы в поиске usb внутри (так как андроид детектил больше 3х usb, а наружу есть только 3) взгляд зацепился за sata неприпаяный, жесткий то у меня есть.
Консолька подключается вот сюда, вот таким шнурком (cd-audio)
a8e874d533a74c2c807503ba85648047.jpg585a298a2a5a437f94296fdb184e948c.jpg

Собственно понравился он мне обилием интерфейсов, сбоку еще есть SD и USB-OTG
image


Чувствуя радость и под приколы коллеги, я припаял к нему sata, родное фото не прилаживаю, там всё залито термоклеем, а я тогда не верил в победу.
4872d42887cd47a8a06e6462e2743999.jpg
310941708e664c3c85dfb5d8049e234b.JPG
3 не изолированных я припаял к 3 м справа, а парные к парным, Будьте внимательны, не припаяйте «верхногами», надо смотреть по ключу нарисованному с другой стороны платы
Питание на sata разъеме я взял только GND и 5V, для 2.5» жестких этого хватает, питание брал с входа БП.
После таких издевательств android обнаружил sata, что меня удивило и обрадовало.
Далее я пропущу кучу потраченного зря времени, которое я потратил на изучение как оно работает и почему, установку debian-ubuntu, pimp-my-mele, и debian-installer
Debian я не хотел, потому что хочу смотреть на этой штуке видео, а debian не умеет hardware acceleration для видео, а может и умеет :-), но еще нужен пульт, а еще надо LazyMedia, а этого debian не умеет.

Наткнулся я на утилиту ImgRepacker (4pda, xda), которая умеет пересобирать образы прошивки для PhoenixSuit и LiveSuit, разобрал прошивку и в файле init.sun4i.rc в папке firmware.img.dump\boot.fex.dump\ramdisk.dump изменил все обращения к nand обращениями к sda (Появилась проблемма, если включена флешка она монтируется как sda, а hdd как sdb, что наталкивает на мысль что hdd на usb шине, но hdd все равно быстрее флешки, как минимум визуально).

Код замены
# — то, что было
## — исходные комментарии
on fs
#    mount ext4 /dev/block/nandd /system wait noatime nodev barrier=0
     wait /dev/block/sda
     mount ext4 /dev/block/sda2 /system wait noatime nodev barrier=0

## try to mount /data
#       wait /dev/block/nande
#       mount ext4 /dev/block/nande /data wait noatime nosuid nodev barrier=0
#       setupfs /dev/block/nande        
        mount ext4 /dev/block/sda3 /data wait noatime nosuid nodev barrier=0
#       setupfs /dev/block/nande        
#       umount /data
#       exec /system/bin/logwrapper /system/bin/e2fsck -y /dev/block/nande    
#       exec /system/bin/busybox mount -t ext4 -o noatime,nosuid,nodev,barrier=0,journal_checksum,noauto_da_alloc /dev/block/nande /data 

## try to mount /cache
#    mount ext4 /dev/block/nandh /cache wait noatime nosuid nodev barrier=0
#       setupfs /dev/block/nandh
#       umount /cache
#       exec /system/bin/logwrapper /system/bin/e2fsck -y /dev/block/nandh 
#    exec /system/bin/busybox mount -t ext4 -o noatime,nosuid,nodev,barrier=0,journal_checksum,noauto_da_alloc /dev/block/nandh /cache 
#   exec /system/bin/busybox mount -t ext4 -o noatime,nosuid,nodev,barrier=0,journal_checksum,noauto_da_alloc /dev/block/sda7 /cache 
    mount ext4 /dev/block/sda7 /cache wait noatime nosuid nodev barrier=0
    
#    format_userdata /dev/block/nandk apollo
#   exec /system/bin/busybox mount -t ext4 -o noatime,nosuid,nodev,barrier=0,journal_checksum,noauto_da_alloc /dev/block/sda4 /mnt/sdcard 
mount ext4 /dev/block/sda4 /mnt/sdcard wait noatime nosuid nodev barrier=0

# try to mount /private
    export PRIVATE_STORAGE /mnt/private
#    format_userdata /dev/block/nandi PRIVATE
    mkdir /mnt/private 0000 system system
#    mount vfat /dev/block/nandi /mnt/private
    format_userdata /dev/block/sda6 PRIVATE
    mount vfat /dev/block/sda6 /mnt/private



Также свои комманды можно писать в /system/etc/install-recovery.sh, его можно создать уже в рабочей системе.

Подготовка диска
на диске создаются разделы, размеры на ваш выбор, те что итспользуются в nand указаны ниже
sda1 Расширеный раздел sda5 swap sda6 private nandi/16М vfat sda7 cache nandh/512М ext4 sda2 system nandd/1024М ext4 sda3 data nande/1024M ext4 sda4 sdcard nandk/2048M ext4
Копировал информацию я с помошью dd, когда запустил liveSD Ubuntu
dd if=/dev/nandd of=/dev/sda2
и провел e2fsck /dev/sda2

Далее прошиваем с помошью PhoenixCard запакованый образ на SD карту, прошиваем mele и подключаем hdd, после грузится система с hdd.

86026a167bef42938af46edd211efd85.PNG

Для тех кто не хочет заниматься этим всем сам, образ соснованый на Toucan Smart (Android + iconBIT TV Launcher 22.01.2013)
Прошивка на Яндекс.Диск
Папка с файлами на Яндекс.Диск
Прошивка на OneDrive
Папка с файлами на OneDrive

Обнаружилось что у меня на плате 4×256М оперативки, а где поменять эту настройку, я не нашел, поэтому решил не особо парить мозг:

Подлючаем usb console
На моменте Hit any key to stop autoboot: жмакаем пробел и попадаем в загрузчик
в загрузчике:
setenv setargs_nand setenv bootargs console=\${console} root=\${nand_root}init=\${init} loglevel=\${loglevel} partitions=\${partitions} mac_addr=\${mac} mem=1024M
команда mem=1024M передает андроиду что есть 1024М оперативы, далее
если команда printenv mac покажет mac=00:00:00:00:00:00 то скорее всего при каждом запуске mac адресс ethrernet будет меняться, чтоб такого не было, впишите свой мак, он чаще всего наклеен на карточке, внутри корпуса.
setenv mac 12:34:56:78:90:12
Для того чтоб сохранить переменные
saveenv
после перезагрузки reset получаем рабочий Андроид на котором 1 гиг оперативы

На самом деле
d02703c1c362482d9b1335a652e74baa.PNG
swap я прописал в /system/etc/install-recovery.sh
mount -o remount,rw /system echo swapon /dev/block/sda5 > /system/etc/install-recovery.sh chmod +x /system/etc/install-recovery.sh mount -o remount,ro /system

P.S. Ошибки прошу писать в личные, я их исправлю, и коментарии будут выглядеть глупо
Хотел поставить OpenWRT, но вовремя задал себе вопрос «а на… зачем?» 44d26d228ea34774a90824cd81223b75.gif

© Habrahabr.ru