Meluncurkan OS Android dari kartu SD untuk perangkat dengan prosesor Amlogic S912

Artikel ini menjelaskan secara rinci, dengan kode sumber, pekerjaan yang dilakukan pada transfer dan peluncuran firmware dari kartu-SD dengan OS Android untuk perangkat pada prosesor Amlogic S912.



Saya suka komputer miniatur system-on-a-chip (SOC). Untuk ukurannya yang mungil dan konsumsi daya yang rendah dibandingkan dengan komputer pribadi. Menggunakan perangkat semacam itu, Anda dapat menyelesaikan berbagai tugas. Di minikomputer, Anda dapat memasang OS Android (seperti kebanyakan produsen "mainan" ini), dan berbagai distribusi Linux atau Chrome OS.



Pekerjaan saya saat ini adalah mengembangkan aplikasi Android. Dalam pekerjaan ini, pengujian pada perangkat nyata pada berbagai versi sistem sangat diinginkan. Saya memiliki beberapa komputer mini dari Rockchip dan Amlogic yang juga saya uji. Android, sebagai sistem operasi, berkembang cukup dinamis dan sekarang modifikasinya dari versi 4.4 menjadi 10 digunakan di pasaran. Dan dalam perjalanannya sudah Android versi 11.



Banyak perusahaan yang terlibat dalam pengembangan set-top box berbasis Android harus memiliki masa pemeliharaan yang singkat untuk keturunan mereka karena perkembangan pesat baik perangkat keras maupun perangkat lunak. Salah satu alat kerja utama saya untuk pengujian adalah kotak KM8P pada prosesor S912 dengan dua gigabyte RAM dan sistem operasi Android 7.1 yang sudah diinstal sebelumnya. Waktu berlalu, dan selama beberapa tahun, versi 8.1, 9.0 dan 10.0 OS Android telah muncul di pasaran.



Saya sangat ingin menguji aplikasi saya dengan versi yang sama ini. Tapi apa yang harus dilakukan? Entah Anda perlu membeli hewan dengan prosesor dan versi baru Android, atau menyesuaikan versi baru Android pada perangkat yang ada. Cara pertama mudah dan sederhana: dengan membayar sedikit, masalah mudah diselesaikan. Tapi kami tidak mencari cara yang mudah, jadi kami memilih cara kedua. Cara kedua jauh lebih sulit, tetapi lebih menarik. Selain itu, chip S912 sendiri merupakan prosesor 8-inti yang sangat baik, tidak kalah dengan kinerja prosesor Amlogic terbaru pada chip S905x.



, , . : ? 7.1 Linux 3.14.29 NAND SK Hynix H27UCG8T2ETR, Amlogic aml_nftl_dev.ko.



4.9. . , Amlogic , SDK Android , Amlogic.



, github' 4.9 SDK Android Amlogic 2017-18 . , git- Khadas. , , , aml_nftl_dev 4.9 . ? 4.9? , . .



S912 EMMC. , ( - 2020 ) 9, ( ). EMMC. , , SD-, MMC, EMMC, SD- .



, , Amlogic SD-. , - . Amlogic SD-. Amlogic u-boot . , FAT- SD-. , , MMC SD-. .



, , -, EMMC, . SDMMC- SDIO-. , SDMMC, , EMMC?



-, , Amlogic . , , , . , .



, SDMMC, EMMC SD-, , , EMMC SD-! , , . — . , , . github', amlpt. Ubuntu. , , , Windows.



mmcparts_a9.c, , , . — 0x1, cache — 0x2, data — 0x4. 0x2800000 (40). , partitions . 9- 17.



mmcparts_a9.c, , make_amlptwrt.sh. amlptwrt, mmc_parts.bin. , MMC. make_amlptrdr.sh amlptrdr, . amlptrdr , . :



@>:~/AML/amlpt$ ./amlptrdr

[mmc_verify_partition_tbl] mmc read partition OK!

show_mmc_partitions

[disk p01] logo offset 40 Mb, size 8 Mb

[disk p02] recovery offset 48 Mb, size 24 Mb

[disk p03] misc offset 72 Mb, size 8 Mb

[disk p04] dtbo offset 80 Mb, size 8 Mb

[disk p05] cri_data offset 88 Mb, size 8 Mb

[disk p06] rsv offset 96 Mb, size 16 Mb

[disk p07] metadata offset 112 Mb, size 16 Mb

[disk p08] vbmeta offset 128 Mb, size 2 Mb

[disk p09] param offset 130 Mb, size 16 Mb

[disk p10] boot offset 146 Mb, size 16 Mb

[disk p11] tee offset 162 Mb, size 32 Mb

[disk p12] vendor offset 194 Mb, size 130 Mb

[disk p13] odm offset 324 Mb, size 128 Mb

[disk p14] system offset 452 Mb, size 1350 Mb

[disk p15] product offset 1802 Mb, size 128 Mb

[disk p16] cache offset 1930 Mb, size 1120 Mb

[disk p17] data offset 3050 Mb, size 4050 Mb


, MMC SDMMC, , drivers/amlogic/mmc/emmc_partitions.c:



) -, , EMMC. is_card_emmc :



static int is_card_emmc(struct mmc_card *card) 
{ 
    //struct mmc_host *mmc = card->host; 
    // emmc port, so it must be an eMMC or TSD  
    //if (!strcmp(mmc_hostname(mmc), "emmc")) 
        return 1; 
    //else 
    //    return 0; 
    //return mmc->is_emmc_port;
}


, , , . , - .



) , . mmc_read_partition_tbl:



 //start_blk = get_reserve_partition_off(card);         
start_blk = MMC_BOOT_PARTITION_SIZE + MMC_BOOT_PARTITION_RESERVED;


, MMC_BOOT_PARTITION_SIZE + MMC_BOOT_PARTITION_RESERVED 36 . , , EMMC . .



, , SD- 36 . , , amlptwrt, SD- :



// 36M = 37748736 bytes = 73728 sectors         
sudo dd if=mmc_parts.bin of=/dev/sdb seek=73728 bs=512


, /dev/sdb — SD-.



, boot.img initrd :



 root=/dev/mmcblk0p14 rootfstype=ext4 rootwait


, u-boot Amlogic Linux c SD- FAT. SD- FAT 32 . boot.img dtb.img. dtb.img EMMC, SD- /dev/mmcblk0. , boot.img , , /dev/mmcblk0p14.

, , - SD-. SD- :



SD-
// logo
sudo dd if=logo.PARTITION of=/dev/sdb bs=1M seek=40 conv=sync,fsync status=progress 
// recovery 
sudo dd if=recovery.PARTITION of=/dev/sdb bs=1M seek=48 conv=sync,fsync status=progress 
// misc 
sudo dd if=/dev/zero of=/dev/sdb bs=1M seek=72 count=8 conv=sync,fsync status=progress 
// dtbo 
sudo dd if=dtbo.PARTITION of=/dev/sdb bs=1M seek=80 conv=sync,fsync status=progress 
// cri_data 
sudo dd if=/dev/zero of=/dev/sdb bs=1M seek=88 count=8 conv=sync,fsync status=progress 
// rsv 
sudo dd if=/dev/zero of=/dev/sdb bs=1M seek=96 count=16 conv=sync,fsync status=progress 
// metadata 
sudo dd if=/dev/zero of=/dev/sdb bs=1M seek=112 count=16 conv=sync,fsync status=progress 
// vbmeta 
sudo dd if=vbmeta.PARTITION of=/dev/sdb bs=1M seek=128 conv=sync,fsync status=progress 
// param 
sudo dd if=/dev/zero of=/dev/sdb bs=1M seek=130 count=16 conv=sync,fsync status=progress 
// boot 
sudo dd if=boot.PARTITION of=/dev/sdb bs=1M seek=146 conv=sync,fsync status=progress 
// tee 
sudo dd if=/dev/zero of=/dev/sdb bs=1M seek=162 count=32 conv=sync,fsync status=progress
// vendor
sudo dd if=vendor.img of=/dev/sdb bs=1M seek=194 conv=sync,fsync status=progress 
// odm
sudo dd if=odm.img of=/dev/sdb bs=1M seek=324 conv=sync,fsync status=progress 
// system
sudo dd if=system.img of=/dev/sdb bs=1M seek=452 conv=sync,fsync status=progress 
// product
sudo dd if=product.img of=/dev/sdb bs=1M seek=1802 conv=sync,fsync status=progress


, , . , system vendor , sparse-. :



simg2img system.PARTITION system.img


cache data -. , amlptwrt, fdisk SD- ext4:



sudo mkfs.ext4 /dev/sdb2 
sudo mkfs.ext4 /dev/sdb3


, fdisk, /dev/sdb2 /dev/sdb3.



u-boot , SD-, FAT- aml_autoscript. aml_autoscript mkimage :



 if mmcinfo; then fatload mmc 0 ${loadaddr} boot.img; fatload mmc 0 ${dtb_mem_addr} dtb.img; bootm; fi;


Hanya itu yang diperlukan untuk mentransfer firmware dari Android ke kartu SD.



Beberapa Firmwares yang dibuat dengan menggunakan metode ini diterbitkan dalam topik yang sesuai di forum w3bsit3-dns.com. Jika ada yang tidak jelas, ajukan pertanyaan di komentar. Apa yang saya bisa - saya akan membantu.



Untuk ini, izinkan saya mengambil cuti dan semoga sukses untuk semua orang dalam mentransfer firmware!




All Articles