Inicialização customizada não inicializando kernels

0

Eu construí a linha principal do U-Boot, com os seguintes comandos:

make ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- -j3 Bananapi_M2_Ultra_defconfig
make ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- -j3

... e Linux 4.18, tentando executá-lo no computador Banana Pi M2-Berry (parece que as versões Ultra e Berry funcionam com o mesmo software). O bootloader carrega bem. Ainda não o configurei, então estou tentando inicializar o kernel especificando os comandos necessários manualmente (o arquivo .dtb foi construído usando a árvore do kernel):

=> setenv bootargs "earlyprintk=sunxi-uart,0x01c28000 console=tty1 console=ttyS0,115200n8 console=tty0 sunxi_ve_mem_reserve=0 sunxi_g2d_mem_reserve=0 sunxi_no_mali_mem_reserve console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait"
=> fatload mmc 0 0x43000000 sun8i-r40-bananapi-m2-ultra.dtb
11655 bytes read in 4 ms (2.8 MiB/s)
=> fatload mmc 0 0x47000000 uImage
5575128 bytes read in 262 ms (20.3 MiB/s)
=> bootm 0x47000000 - 0x43000000
## Booting kernel from Legacy Image at 47000000 ...
   Image Name:   Linux-4.18.0-k4be
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    5575064 Bytes = 5.3 MiB
   Load Address: 40008000
   Entry Point:  40008000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 43000000
   Booting using the fdt blob at 0x43000000
   Loading Kernel Image ... OK
   Loading Device Tree to 49ffa000, end 49fffd86 ... OK

Starting kernel ...

Neste momento, o sistema trava indefinidamente.

Eu consegui baixar e executar alguma imagem de cartão SD em funcionamento. O kernel lá começa com os comandos:

setenv bootargs "board=bpi-m2u console=earlyprintk=sunxi-uart,0x01c28000 console=tty1 console=ttyS0,115200n8 no_console_suspend consoleblank=0 root=/dev/mmcblk0p2 rootfstype=ext4 rw rootwait bootmenutimeout=10 datadev=mmcblk0p2 service=linux bpiuser=720p mac_addr=? enforcing=1 initcall_debug=0 loglevel=8 init=/bin/bash cma=256M panic=10 disp.screen0_output_type=3 disp.screen0_output_mode=5 disp.screen1_output_type=3 disp.screen1_output_mode=5"
fatload mmc 0:1 0x47000000 bananapi/bpi-m2u/linux/uImage
fatload mmc 0:1 0x49000000 bananapi/bpi-m2u/linux/uInitrd
bootm 0x47000000 0x49000000

Tentando executar o kernel usando meu gerenciador de inicialização e esses comandos exatos também falharão com o "kernel inicial" interrompido. (Não consegui obter o bootloader para carregar meu kernel por causa dos erros do MMC sendo exibidos.)

A diferença proeminente entre o sistema funcional e o não funcional é o processo inicial do u-boot. Mina produz o seguinte:

U-Boot SPL 2018.09-rc2 (Aug 17 2018 - 01:25:32 +0200)
DRAM: 1024 MiB
Trying to boot from MMC1


U-Boot 2018.09-rc2 (Aug 17 2018 - 01:25:32 +0200) Allwinner Technology

CPU:   Allwinner R40 (SUN8I 1701)
Model: Banana Pi BPI-M2-Ultra
I2C:   ready
DRAM:  1 GiB
MMC:   SUNXI SD/MMC: 0, SUNXI SD/MMC: 1
Loading Environment from FAT... Card did not respond to voltage select!
In:    serial@1c28000
Out:   serial@1c28000
Err:   serial@1c28000
SCSI:  SATA link 0 timeout.
AHCI 0001.0100 32 slots 1 ports 3 Gbps 0x1 impl SATA mode
flags: ncq stag pm led clo only pmp pio slum part ccc apst 

Net:   phy interface7
eth0: ethernet@1c50000
starting USB...
No controllers found
Hit any key to stop autoboot:  0 

O trabalho imprime muito mais informações (embora eu não consiga encontrar nenhuma dica nestes):

[     0.33]HELLO! BOOT0 is starting!
[     0.37]boot0 commit : 2320b4e28f694a40302a75531ea057ca7fcc0074

[     0.44]boot0 version : 4.0
[     0.47]set pll start
[     0.51]set pll end
[     0.87]rtc[0] value = 0x00000000
[     0.90]rtc[1] value = 0x00000000
[     0.93]rtc[2] value = 0x00000000
[     0.97]rtc[3] value = 0x00000000
[     0.100]rtc[4] value = 0x00000000
[     0.103]rtc[5] value = 0x00000000
[     0.107]DRAMC IS FOUR
[     0.109]DRAM BOOT DRIVE INFO: V1.1
[     0.113]the chip id is 0x00000001
[     0.116]the chip id is 0x00000001
[     0.120]the chip id is 0x00000001
[     0.123]the chip id is 0x00000001
[     0.127]the chip id is 0x00000001
[     0.134]PMU: [     0.135]AXP221
[     0.137]ddr voltage = 1250 mv
[     0.144]PMU: [     0.145]AXP221
[     0.147]ddr voltage = 1250 mv
[     0.158]PMU: [     0.159]AXP221
[     0.161]ddr voltage = 1500 mv
[     0.172]DRAM CLK =576 MHZ
[     0.174]DRAM Type =3 (2:DDR2,3:DDR3,6:LPDDR2,7:LPDDR3)
[     0.180]DRAM zq value: 0x003b3bfb
[     0.186]DRAM SIZE =1024 M
[     0.189]DRAM simple test OK.
[     0.192]dram size =1024
[     0.194]rtc standby flag is 0x00000000, super standby flag is 0x00000000
[     0.203]card no is 0
[     0.205]sdcard 0 line count 4
[     0.208][mmc]: mmc driver ver 2016-07-01 15:30
[     0.212][mmc]: sdc0 spd mode error, 2
[     0.225][mmc]: Wrong media type 0x00000000
[     0.229][mmc]: ***Try SD card 0***
[     0.239][mmc]: HSSDR52/SDR25 4 bit
[     0.242][mmc]: 50000000 Hz
[     0.245][mmc]: 14832 MB
[     0.247][mmc]: ***SD/MMC 0 init OK!!!***
[     0.354]Loading boot-pkg Succeed(index=0).
[     0.358]Entry_name        = u-boot
[     0.377]Ready to disable icache.
[     0.380]Jump to secend Boot.


U-Boot 2014.07 (Nov 11 2017 - 19:07:47) Allwinner Technology 

uboot commit : 8 
i2c_init ok
[      0.446]pmbus:   ready
[      0.465]PMU: AXP221
[      0.465]PMU: AXP22x found
[      0.466]PMU: dcdc2 1160
[      0.468]PMU: cpux 1008 Mhz,AXI=336 Mhz
PLL6=600 Mhz,AHB1=200 Mhz, APB1=100Mhz  MBus=400Mhz
set power on vol to default
dcdc1_vol = 3300, onoff=1
dcdc2_vol = 1160, onoff=1
dcdc3_vol = 1100, onoff=1
dcdc4_vol = 1100, onoff=0
aldo1_vol = 2800, onoff=0
aldo2_vol = 1500, onoff=1
aldo3_vol = 3000, onoff=1
dc1sw_vol = 3000, onoff=0
dc5ldo_vol = 1100, onoff=0
dldo1_vol = 3300, onoff=0
dldo2_vol = 3300, onoff=0
dldo3_vol = 3300, onoff=0
dldo4_vol = 2500, onoff=0
eldo1_vol = 2800, onoff=0
eldo2_vol = 1500, onoff=0
eldo3_vol = 1200, onoff=0
gpio0_vol = 3300, onoff=0
gpio1_vol = 1800, onoff=0
find power_sply to end
vbus exist
BPI: bpi_boot_init_gpio ...
set pin for gpio_pin_1
set pin for gpio_pin_2
set pin for gpio_pin_3
set pin for gpio_pin_4
run key detect
BPI: BPI-M2 Berry 1.0 
bpi_board_version: [2e]
no key found
no uart input
DRAM:  1 GiB
fdt addr: 0x76e81c78
Relocation Offset is: 35ed8000
In:    serial
Out:   serial
Err:   serial
gic: normal mode
[      0.696]start
drv_disp_init
init_clocks: finish init_clocks.
pwm_request: reg = 0x1c23400. pwm = 0.
request pwm success, pwm = 0.
tv_init:
tv_init:
drv_disp_init finish
boot_disp.output_disp=0
boot_disp.output_type=3
boot_disp.output_mode=5
boot_disp.auto_hpd=1
disp0 device type(4) enable
attched ok, mgr0<-->device0, type=4, mode=5
[      1.378]end
workmode = 0,storage type = 1
[      1.378]MMC:    0
[mmc]: mmc driver ver 2016-07-01 15:50:00
[mmc]: boot_card_no error 1
SUNXI SD/MMC: 0
[mmc]: 50 MHz...
[mmc]: sample: 53 - 188(ps)
[mmc]: 100 MHz...
[mmc]: sample: 26 - 192(ps)
[mmc]: 200 MHz...
[mmc]: sample: 13 - 192(ps)
[mmc]: BPI: 0 CARD_TYPE_SD
[mmc]: media type 0x8000001
[mmc]: ************Try SD card 0************
[mmc]: host caps: 0x27
[mmc]: MID 41 PSN 521001cd
[mmc]: PNM SD16G -- 0x53-44-31-36-47
[mmc]: PRV 3.0
[mmc]: MDT m-6 y-2018
[mmc]: speed mode     : HSSDR52/SDR25 
[mmc]: clock          : 50000000 Hz
[mmc]: bus_width      : 4 bit
[mmc]: user capacity  : 14832 MB
[mmc]: ************SD/MMC 0 init OK!!!************
[mmc]: erase_grp_size      : 0x1WrBlk*0x200=0x200 Byte
[mmc]: secure_feature      : 0x0
[mmc]: secure_removal_type : 0x0
[      1.554]sunxi flash init ok
sunxi secure storage is not supported
[      1.560]usb burn from boot
delay time 0
[      1.652]usb prepare ok
usb sof ok
[      1.864]usb probe ok
[      1.864]usb setup ok
key pressed value=0x2e
[      1.866]exit usb burn from boot
next work 1
SUNXI_UPDATE_NEXT_ACTION_NULL
--------fastboot partitions--------
-total partitions:7-
-name-        -start-       -size-      
boot-res    : 1000000       1000000     
env         : 2000000       100000      
boot        : 2100000       800000      
private     : 2900000       100000      
misc        : 2a00000       100000      
rootfs      : 2b00000       a000000     
UDISK       : cb00000       0           
-----------------------------------
base bootcmd=run setargs_nand boot_normal
bootcmd set setargs_mmc
key 0
cant find rcvy value
cant find fstbt value
misc partition found
to be run cmd=run setargs_mmc boot_normal
BPI: disable_node mmc2 in BPI-M2 Berry 1.0
update dtb dram start
update dtb dram  end
sunxi_serial: serial_feature is not exist
serial is: 94507872c6181c0d050f
BPI-M2 Berry: force to set pmu_bat_unused = 1
BPI: axp_probe_battery_exist(32)
BPI: BatExist(32) pmu_bat_unused(0)
BPI: force to set no battery in BPI-M2 Berry 1.0
PowerBus = 2( 2:vBus 3:acBus other: not exist)
no battery, limit to dc
no battery exist
sunxi_bmp_logo_display
reading bootlogo.bmp
3686538 bytes read in 162 ms (21.7 MiB/s)
bmp file buffer: 0x40000000, bmp_info.buffer: 46400000
screen_id =0, screen_width =1280, screen_height =720
frame buffer address 46400036
Net:   No ethernet found.
[      2.366]inter uboot shell
Hit any key to stop autoboot:  0 

- também ligando um LED verde na placa no processo.

O Uboot compilado com fontes clonadas aqui: link também falha da mesma forma.

Eu também tentei clonar o gerenciador de inicialização:

dd if=/tmp/2018-05-24-raspbian-jessie-preview-bpi-m2u-sd-emmc.img of=/dev/sdc bs=1024 seek=8 skip=8 count=1016

mas trava após a mensagem "set pll end". Provavelmente precisa de mais dados do que esses 1016 kBytes para funcionar.

Eu senti falta de algo básico? Depois de muitas pesquisas no google, eu não consegui encontrar nenhum relatório dessas versões sucedendo ou não, apenas esta página: link diz que a placa deve ser suportada pela linha principal U-Boot e Linux.

    
por k4be 17.08.2018 / 02:55

1 resposta

0

Eu mesmo consegui resolver o problema. Primeiro: o bootloader estava funcionando bem desde o início. Vamos percorrer a minha pergunta passo a passo.

  1. Meu bootloader não estava inicializando o kernel, porque eles usam um kernel modificado, que não seria executado com um u-boot padrão.
  2. A diferença na saída do bootloader foi causada por duas coisas: primeiro, eles usaram outro bootloader "BOOT0", não o SPL do u-boot, para o primeiro estágio, e usaram uma versão muito antiga do u-boot.
  3. O bootloader, devido ao uso do "BOOT0", tem um layout de dados muito diferente. Provavelmente, não vale a pena se incomodar em descobrir isso.
  4. Eu tive vários problemas com o kernel e o arquivo da árvore de dispositivos, fazendo com que não funcionasse direito.

Primeiro, meu kernel não sabia como enviar texto para um console serial, então nada apareceu. Isso foi corrigido ativando a função de depuração de baixo nível na configuração do Linux. Então, não foi configurado corretamente para o SOC "sunxi" (eu provavelmente o configurei erroneamente tentando resolver o problema). Também estava usando o arquivo de árvore de dispositivos errado para o Linux (do u-boot em vez do da árvore do Linux - estava literalmente esperando por mim lá). O último problema é um mistério. Depois de consertar todos os erros, o Linux inicializou, mas congelou após a mensagem sobre um dispositivo RTC. (Não foi relacionado ao RTC, porque ainda aconteceu depois de desativar completamente o suporte a RTC). Finalmente, o kernel inicializou bem após a limpeza, reconfigurando e recompilando a árvore de fontes. O mesmo problema, com o congelamento após a mensagem RTC, aconteceu na segunda vez (quando compilar nativamente) e foi corrigido da mesma maneira. Pelo menos, tudo está funcionando agora.

    
por 28.09.2018 / 23:47