Как запустить Linux на устройствах Amlogic S905 таких как MINI MX или K1 Plus


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

Enter USB burn
Try connect time out 701, 700, 834
Hit any key to stop autoboot:  0
gxb_p200_v1#

Вы можете запустить printenv для поддержки настроек по умолчанию:

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 ):

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

Установите необходимые инструменты и распакуйте.

sudo apt-get install p7zip-full pv
7z x ubuntu-14.04-headless-arm64.7z

Вставьте свою micro SD карту, не ниже 2 Гб, проверьте с помощью lsblk  и установите образ заменив / DEV / SDX для вашего устройства.

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:

dd if=/dev/block/boot of=<sdcard_path>/boot.img

Я выполнил инструкции для извлечения дерева устройств из файла Android, затем скачал boot.img-second.gz файл, который я скопировал на загрузочный раздел в SD-карты с Ubuntu:

cp boot.img-second.gz /media/jaufranc/boot/dtb.img

Запускаем Ubuntu в MINI MX

Вы можете расширить корневой раздел для вашей операционной системы на вашей SD карте м помощью gparted, Или можете использовать только малую часть на вашей SD карте. Сейчас поставил нашу SD карту в вашу приставку на Amlogic S905 и подключитесь к сети.

После затраченного времени, вы наконец сможете получить доступ к командной строке через которую можно подключиться и залогиниться по стандартному debian и паролю temppwd:

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:~$

Это образ занимающий мало места, у вас остается много свободного места и памяти:

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:

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“, мы сможем настроить все сети:

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 за предоставленную информацию.

Оригинал статьи тут.

 

 

0 0 vote
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

1 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Павел
Павел
4 лет назад

Хорошая статья, чувак