Досталось мне такое вот устройство, Mele A100 с битой nand памятью, работало после прошивки пару перезагрузок, потом не загружалось (bootloop).

Первое, что пришло в голову — подключить консольку, но ничего информативного туда не было. Второе, что пришло в голову, после непродолжительного гугления, это записать прошивку на sd карту, на 4pda такое есть, но у меня была только карточка на 32G с моего мобильника, покупать я не хотел, да и скорость будет не очень. Третье, что пришло в голову, после продолжительного рассматривания платы в поиске usb внутри (так как андроид детектил больше 3х usb, а наружу есть только 3), взгляд зацепился за sata неприпаяный, жесткий то у меня есть.

Консолька подключается вот сюда, вот таким шнурком (cd-audio):


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

Чувствуя радость и под приколы коллеги, я припаял к нему sata, родное фото не прикладываю, там всё залито термоклеем, а я тогда не верил в победу.



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.



Для тех кто не хочет заниматься этим всем сам, образ основаный на 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гиг оперативы
На самом деле

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 но вовремя задал себе вопрос «а на… зачем?»

Комментарии (4)


  1. dlinyj
    02.07.2015 17:25

    А можете показать все аргументы загрузчика в таком режиме пожалуйста.


    1. 4aba Автор
      02.07.2015 17:50
      +2

      sunxi#printenv
      boot_fastboot=fastboot
      boot_normal=sunxi_flash read 40007800 boot;boota 40007800
      boot_recovery=sunxi_flash read 40007800 recovery;boota 40007800
      bootcmd=run setargs_nand boot_normal
      bootdelay=1
      console=ttyS0,115200
      init=/init
      loglevel=5
      mac=00:00:00:00:00:00
      mmc_root=/dev/mmcblk0p7
      nand_root=/dev/nandd
      partitions=bootloader@nanda:env@nandb:boot@nandc:system@nandd:data@nande:misc@nandf:recovery@nandg:cache@nandh:private@nandi:sysrecovery@nandj:UDISK@nandk
      setargs_mmc=setenv bootargs console=${console} root=${mmc_root} init=${init} loglevel=${loglevel} mac_addr=${mac} partitions=${partitions}
      setargs_nand=setenv bootargs console=${console} root=${nand_root} init=${init} loglevel=${loglevel} mac_addr=${mac} partitions=${partitions} mem=1024M


      1. dlinyj
        02.07.2015 18:23

        Я, кстати, очень хотел сделать следующий финт ушами для линукса: это ядро в nand, а rootfs на жёстком диске. Но тогда когда я ковырялся загрузчик ещё не поддерживал жёсткий диск. А сейчас уже времени и желания нет :(((.

        Хотя надо таки попробовать.


        1. 4aba Автор
          02.07.2015 19:00

          pimp my mele умеет нанд, а дебиан не умеет нанд. сейчас можно сделать дебиан с нуля на полностью жестком, или готовую сборку на нанд и перенос вручную на жесткий