Несколько недель назад я узнал что открытый исходный код для Amlogic S905 U-boot был представлен, и один из разработчиков представил образ облегченной Ubuntu 14.04 для его K1 Plus TV box и представил инструкцию по установке образа . Я так же попробовал поставить его,но уже на свою приставку Beelink MINI MX, используя его рекомендации. Представляю вам свою инструкцию по загрузке Linux с микро SD карты, таким образом можно сохранить и Android если вы извлечете карту.
Модификация среды U-boot
Инструкция включает в себя открытие коробки и присоединение или спайку по USB к отладочной плате TTL для доступа к U-boot и изменения параметров. Но позже когда сможете настроить работу образа с сетью вы можете загрузить fw_setenv и fw_saveenv, и выполнять те же шаги с Android без необходимости включать девайс.
К1 Плюс имеет UART разъем, так что вам не придется паять ничего, но МИНИ MX требует некоторых сложностей, на четко обозначенных Tx, Rx, GND разъемах.
Подключите USB к плате TTL и к компьютеру, настройте MiniCom / Putty / Screen 115200 8N1, запустите плату, нажатие пробела, прерывает загрузку:
1 2 3 4 |
Enter USB burn Try connect time out 701, 700, 834 Hit any key to stop autoboot: 0 gxb_p200_v1# |
Вы можете запустить printenv для поддержки настроек по умолчанию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
baudrate=115200 bootargs=rootfstype=ramfs init=/init console=ttyS0,115200 no_console_suspend earlyprintk=aml-uart,0xc81004c0 ramoops.mem_address=0x20000000 ramoops.mem_size=0x100000 ramoops.record_size=0x8000 ramoops.conf bootcmd=run storeboot bootdelay=1 bootmode_check=get_rebootmode; echo reboot_mode=${reboot_mode};if test ${reboot_mode} = factory_reset; then defenv_reserv aml_dt;setenv upgrade_step 2; save;fi; bootup_offset=0x10ac270 bootup_size=0x5eec36 cmdline_keys=if keyman init 0x1234; then if keyman read usid ${loadaddr} str; then setenv bootargs ${bootargs} androidboot.serialno=${usid};fi;if keyman read mac ${loadaddr} str; then setenv bootargs ${bo; cvbsmode=576cvbs digitaudiooutput=PCM display_bpp=24 display_color_bg=0 display_color_fg=0xffff display_color_index=24 display_height=2160 display_layer=osd1 display_width=3840 dtb_mem_addr=0x1000000 edid.crcvalue=0xa62c0000 ethact=Meson_Ethernet ethaddr=00:15:18:01:81:31 factory_reset_poweroff_protect=echo wipe_data=${wipe_data}; echo wipe_cache=${wipe_cache};if test ${wipe_data} = failed; then run init_display; run storeargs;if mmcinfo; then run recovery_from_sdcard;fi;i fb_addr=0x3f800000 fb_height=1080 fb_width=1920 fdt_high=0x20000000 firstboot=0 gatewayip=10.18.9.1 hdmimode=2160p60hz420 hostname=arm_gxbb init_display=hdmitx hpd;osd open;osd clear;vout output ${outputmode};imgread pic logo bootup $loadaddr;bmp display $bootup_offset;bmp scale initargs=rootfstype=ramfs init=/init console=ttyS0,115200 no_console_suspend earlyprintk=aml-uart,0xc81004c0 ramoops.mem_address=0x20000000 ramoops.mem_size=0x100000 ramoops.record_size=0x8000 ramoops.cone ipaddr=10.18.9.97 irremote_update=if irkey 0xe31cfb04 0xb748fb04 2500000; then echo read irkey ok!; if itest ${irkey_value} == 0xe31cfb04; then run update;else if itest ${irkey_value} == 0xb748fb04; then run update;\ fi;fi;fi; is.bestmode=false loadaddr=1080000 mac=da:7b:db:4e:28:af netmask=255.255.255.0 outputmode=2160p60hz420 preboot=run factory_reset_poweroff_protect;run upgrade_check;run bootmode_check;run init_display;run storeargs;run upgrade_key;run switch_bootmode; reboot_mode=normal recovery_from_flash=if imgread kernel recovery ${loadaddr}; then bootm ${loadaddr}; fi recovery_from_sdcard=if fatload mmc 0 ${loadaddr} aml_autoscript; then autoscr ${loadaddr}; fi;if fatload mmc 0 ${loadaddr} recovery.img; then if fatload mmc 0 ${dtb_mem_addr} dtb.img; then echo sd dtb.im; recovery_from_udisk=if fatload usb 0 ${loadaddr} aml_autoscript; then autoscr ${loadaddr}; fi;if fatload usb 0 ${loadaddr} recovery.img; then if fatload usb 0 ${dtb_mem_addr} dtb.img; then echo udisk dtb.; sdc_burning=sdc_burn ${sdcburncfg} sdcburncfg=aml_sdc_burn.ini serverip=10.18.9.113 stderr=serial stdin=serial stdout=serial storeargs=setenv bootargs ${initargs} logo=${display_layer},loaded,${fb_addr},${outputmode} hdmimode=${hdmimode} cvbsmode=${cvbsmode} hdmitx=${cecconfig} androidboot.firstboot=${firstboot}; run cmdline_ke; storeboot=if imgread kernel boot ${loadaddr}; then store dtb read $dtb_mem_addr; bootm ${loadaddr}; fi;run update; switch_bootmode=get_rebootmode;if test ${reboot_mode} = factory_reset; then run recovery_from_flash;else if test ${reboot_mode} = update; then run update;else if test ${reboot_mode} = cold_boot; then run ; try_auto_burn=update 700 750; update=run usb_burning; run sdc_burning; if mmcinfo; then run recovery_from_sdcard;fi;if usb start 0; then run recovery_from_udisk;fi;run recovery_from_flash; upgrade_check=echo upgrade_step=${upgrade_step}; if itest ${upgrade_step} == 3; then run init_display; run storeargs; run update;else if itest ${upgrade_step} == 1; then defenv_reserv; setenv upgrade_step; upgrade_key=saradc open 0; if saradc get_in_range 0x0 0x50; then echo detect upgrade key; run update;fi; upgrade_step=2 usb_burning=update 1000 wipe_cache=successful wipe_data=successful Environment size: 4777/65532 bytes |
Теперь вы можете изменить некоторые настройки в U-Boot для того, чтобы позволить Linux загрузиться с SD-карты. Если вы делаете это непосредственно в терминале Android с помощью adb, вы можете заменить SETENV и saveenv по fw_setenv и fw_saveenv (не присутствует в прошивке MINI MX ):
1 2 3 4 |
setenv preboot "run factory_reset_poweroff_protect;run upgrade_check;run bootmode_check;run init_display;run storeargs;run update_key;run irremote_update;run user_start;run switch_bootmode;" setenv user_start "if mmcinfo; then run linux_start_mmc;fi;" setenv linux_start_mmc "if fatload mmc 0 1080000 kernel.img; then if fatload mmc 0 0x1000000 dtb.img; then echo sd dtb.img loaded; fi;echo ===[LINUX START from mmc]===; bootm 1080000;fi;" saveenv |
Образ Flash Ubuntu для SD card
Для начала скачайте образ: ubuntu-14.04-headless-arm64.7z.
Я сделал это на своём компьютере с Ubuntu , но вы так же можете сделать это и на Windows с помощью 7pzip и Win32DiskImager
Установите необходимые инструменты и распакуйте.
1 2 |
sudo apt-get install p7zip-full pv 7z x ubuntu-14.04-headless-arm64.7z |
Вставьте свою micro SD карту, не ниже 2 Гб, проверьте с помощью lsblk и установите образ заменив / DEV / SDX для вашего устройства.
1 2 |
sudo dd if=ubuntu-14.04-headless-arm64.img | pv | sudo dd of=/dev/sdX bs=16M sync |
Get the Device Tree File for Your device
Если вы используете K1 Plus, вы можете пропустить этот шаг, но если вы используете другое устройство, как например я с моим Beelink MINI MX , заменить дерево файлов в /boot/dtb.img будет хорошая идея. Для примера, MINI MX допускает только соединение Fast Ethernet с деревом файлов K1 Plus , но если отключить образ прошивки Android Я получил соединение Gigabit Ethernet.
Вам может быть необходим boot.img который вам надо получить из прошивки, или напрямую из NAND flash.
У меня нет прошивки для MINI NX, так что я просто сбросил раздел с adb shell:
1 |
dd if=/dev/block/boot of=<sdcard_path>/boot.img |
Я выполнил инструкции для извлечения дерева устройств из файла Android, затем скачал boot.img-second.gz файл, который я скопировал на загрузочный раздел в SD-карты с Ubuntu:
1 |
cp boot.img-second.gz /media/jaufranc/boot/dtb.img |
Запускаем Ubuntu в MINI MX
Вы можете расширить корневой раздел для вашей операционной системы на вашей SD карте м помощью gparted, Или можете использовать только малую часть на вашей SD карте. Сейчас поставил нашу SD карту в вашу приставку на Amlogic S905 и подключитесь к сети.
После затраченного времени, вы наконец сможете получить доступ к командной строке через которую можно подключиться и залогиниться по стандартному debian и паролю temppwd:
1 2 3 4 5 6 7 8 9 |
Ubuntu 14.04 LTS koneplus ttyS0 koneplus login: debian Password: Last login: Thu Jan 1 00:02:46 UTC 2015 on ttyS0 Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.14.29 aarch64) * Documentation: https://help.ubuntu.com/ debian@koneplus:~$ |
Это образ занимающий мало места, у вас остается много свободного места и памяти:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
debian@koneplus:~$ df -h Filesystem Size Used Avail Use% Mounted on /dev/mmcblk0p2 29G 462M 28G 2% / devtmpfs 280M 4.0K 280M 1% /dev none 4.0K 0 4.0K 0% /sys/fs/cgroup tmpfs 404M 0 404M 0% /tmp none 81M 252K 81M 1% /run none 5.0M 0 5.0M 0% /run/lock none 404M 0 404M 0% /run/shm none 100M 0 100M 0% /run/user debian@koneplus:~$ free -h total used free shared buffers cached Mem: 807M 125M 681M 256K 3.1M 22M -/+ buffers/cache: 99M 707M Swap: 0B 0B 0B |
Все четыре ядра работают. CPUInfo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
cat /proc/cpuinfo Processor : AArch64 Processor rev 4 (aarch64) processor : 0 processor : 1 processor : 2 processor : 3 Features : fp asimd crc32 CPU implementer : 0x41 CPU architecture: AArch64 CPU variant : 0x0 CPU part : 0xd03 CPU revision : 4 Hardware : Amlogic |
Ядро построено. С помощью команды в Android “CONFIG_ANDROID_PARANOID_NETWORK“, мы сможем настроить все сети:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
ifconfig eth0 eth0 Link encap:Ethernet HWaddr da:7b:db:4e:28:af inet6 addr: fe80::d87b:dbff:fe4e:28af/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1788 errors:0 dropped:0 overruns:0 frame:0 TX packets:178 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:265549 (265.5 KB) TX bytes:14810 (14.8 KB) Interrupt:40 ifconfig eth0 192.168.0.201 up No support for INET on this system. sudo ifconfig eth0 192.168.0.201 up sudo ifconfig sudo: unable to resolve host koneplus eth0 Link encap:Ethernet HWaddr da:7b:db:4e:28:af inet addr:192.168.0.201 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::d87b:dbff:fe4e:28af/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2570 errors:0 dropped:0 overruns:0 frame:0 TX packets:248 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:384945 (384.9 KB) TX bytes:19904 (19.9 KB) Interrupt:40 |
Таким образом и проделана работа, во всяком случае первичная.
[Дополнение: легко поставить провода если немного вырезать корпус]
Благодарим сайт www.cnx-software.com за предоставленную информацию.
Оригинал статьи тут.
Хорошая статья, чувак