Автор Тема: u-boot  (Прочитано 2824 раз)

Оффлайн yopt

  • Новичок
  • *
  • Сообщений: 7
  • Лайков: 1
  • Карма: +0/-0
  • Orange Pi PC
    • Просмотр профиля
u-boot
« : Февраль 28, 2016, 04:00:27 am »
прошу помощи у знающих. Уже больше месяца пытаюсь по мануалам заставить OPI-PC грузиться с помощью u-boot. Цель эта продиктована необходимостью доступа к некоторым параметрам загрузки, недоступным в script.bin. Хотя бы подскажите в какую сторону копать. Использую этот образ, впрочем на ubuntu и lubuntu с оф. форума также не получилось.

собираю из mainline (ранее пытался собрать из sunxi u-boot с тем же успехом) исходников u-boot и заливаю на sd-карту данной командой:

dd if=u-boot-sunxi-with-spl.bin of=/dev/sdd bs=1024 seek=8

предварительно на sd-карту залит работающий образ системы, поэтому с помощью fdisk удаляю первый раздел, создаю заново с 2048 сектора (согласно этой и этой инструкциям) с таким же размером, форматирую в fat и заливаю туда uImage и script.bin из текущего используемого образа, будь то образ от UB3GAD или с оф. сайта. Компилирую boot.cmd в boot.scr с таким содержимым:

setenv bootargs console=ttyS0,115200 noinitrd 
disp.screen0_output_mode=EDID:1280x720p50 init=/init
root=/dev/mmcblk0p2 rootwait panic=10 ${extra}
fatload mmc 0 0x43000000 script.bin
fatload mmc 0 0x48000000 uImage
bootm 0x48000000

также uEnv.txt с таким содержимым:

bootargs=console=ttyS0,115200 disp.screen0_output_mode=EDID:1024x768p50 hdmi
aload_script=fatload mmc 0 0x43000000 script.bin;
aload_kernel=fatload mmc 0 0x48000000 uImage;bootm 0x48000000;
uenvcmd=run aload_script aload_kernel

два эти файла помещаю в загрузочный FAT-раздел рядом с script.bin и uImage. Также, перед компиляцией uBoot подправил файл bootm.c в исходниках, а именно изменил константу CONFIG_SYS_BOOTM_LEN с 8 мб на, например, 12 мб, иначе при загрузке в вывод по ttl загрузка отваливается с ошибкой:

Loading Kernel Image ... Image too large: increase CONFIG_SYS_BOOTM_LEN

после всех проделанных манипуляций процесс загрузки виснет на строке

Starting kernel ...

полный вывод через TTL:

U-Boot SPL 2016.03-rc2-00197-gcf23b4d-dirty (Feb 27 2016 - 19:46:05)
DRAM: 1024 MiB
Trying to boot from MMC


U-Boot 2016.03-rc2-00197-gcf23b4d-dirty (Feb 27 2016 - 19:46:05 +0200) Allwinner Technology

CPU:   Allwinner H3 (SUN8I)
I2C:   ready
DRAM:  1 GiB
MMC:   SUNXI SD/MMC: 0
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   No ethernet found.
starting USB...
USB0:   USB EHCI 1.00
USB1:   USB OHCI 1.0
USB2:   USB EHCI 1.00
USB3:   USB OHCI 1.0
USB4:   USB EHCI 1.00
USB5:   USB OHCI 1.0
scanning bus 0 for devices... 1 USB Device(s) found
scanning bus 2 for devices... 1 USB Device(s) found
scanning bus 4 for devices... 1 USB Device(s) found
scanning bus 1 for devices... 1 USB Device(s) found
scanning bus 3 for devices... 1 USB Device(s) found
scanning bus 5 for devices... 1 USB Device(s) found
Hit any key to stop autoboot:  0
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found U-Boot script /boot.scr
reading /boot.scr
306 bytes read in 17 ms (17.6 KiB/s)
## Executing script at 43100000
Unknown command 'disp.screen0_output_mode=EDID:1280x720p50' - try 'help'
Unknown command 'rootwait' - try 'help'
reading script.bin
35724 bytes read in 59 ms (590.8 KiB/s)
reading uImage
10967184 bytes read in 9391 ms (1.1 MiB/s)
## Booting kernel from Legacy Image at 48000000 ...
   Image Name:   Linux-3.4.39-02-lobo
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    10967120 Bytes = 10.5 MiB
   Load Address: 40008000
   Entry Point:  40008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK

Starting kernel ...

u-boot, собранный из репозитория sunxi выдает несколько другой вывод, но конечный результат такой же

p.s. ну, вообще цель отключить вывод звука через hdmi. Прочитал где-то на оф. форуме без этого параметра не будут работать некоторые мониторы подключенные через переходник hdmi2dvi (с hdmi2vga проблем нету), с коей проблемой я и столкнулся. Не хочу особо заострять на этом внимание, думаю, метод заставить грузиться opi с помощью свежего u-boot будет полезен сообществу в целом
« Последнее редактирование: Февраль 28, 2016, 04:15:47 am от yopt »

Оффлайн AlDemin

  • Житель
  • ****
  • Сообщений: 405
  • Лайков: 104
  • Карма: +14/-1
  • OPi, OPi+, OPiOne, OPiZero, OPiPC2, BPi, RPiB.
    • Просмотр профиля
Re: u-boot
« Ответ #1 : Февраль 28, 2016, 12:42:22 pm »
Что бросилось в глаза.

Ваш лог:
## Booting kernel from Legacy Image at 48000000 ...
   Image Name:   Linux-3.4.39-02-lobo
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    10967120 Bytes = 10.5 MiB
   Load Address: 40008000
   Entry Point:  40008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK

Рабочий лог:
## Booting kernel from Legacy Image at 40007800 ...
   Image Name:   Linux-3.4.39
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    10915320 Bytes = 10.4 MiB
   Load Address: 40008000
   Entry Point:  40008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
Выделил жирным.

Ядро грузиться в память с определенного адреса, точка входа ядра ( адрес передачи управления ) находиться со смещением в +200байт точнее (0x200байт) от начала, а теперь посмотрите что у вас: куда грузиться ядро и куда передается управление? Там где ядра нет.
Где то есть параметр u-boot, куда грузить ядро, он у вас 48000000, а должен быть 40007800

UPD: хотя могу ошибаться, похоже адрес загрузки и точка входа одинаковые, но указанный в конфиге адрес 0x48000000 игнорируется и то ли ядро грузиться не туда то ли стартует еи от туда.

Дальше: ваши параметры один фиг идут побоку:
Unknown command 'disp.screen0_output_mode=EDID:1280x720p50' - try 'help'
Unknown command 'rootwait' - try 'help'

И последнее, проблемы с DVI мониторами нет, если монитор у вас FullHD, другие мониторные разрешения апельсин пока не научили выдавать.
« Последнее редактирование: Февраль 29, 2016, 04:09:52 pm от AlDemin »

Оффлайн yopt

  • Новичок
  • *
  • Сообщений: 7
  • Лайков: 1
  • Карма: +0/-0
  • Orange Pi PC
    • Просмотр профиля
Re: u-boot
« Ответ #2 : Февраль 29, 2016, 08:16:22 pm »
подправил boot.scr таким образом:

Цитировать
setenv bootargs console=ttyS0,115200 noinitrd
disp.screen0_output_mode=EDID:1280x720p50 init=/init
root=/dev/mmcblk0p2 rootwait panic=10 ${extra}
fatload mmc 0 0x43000000 script.bin
fatload mmc 0 0x40007800 uImage
bootm 0x40007800

лог загрузки стал такой

Цитировать
## Booting kernel from Legacy Image at 40007800 ...
   Image Name:   Linux-3.4.39-02-lobo
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    10967120 Bytes = 10.5 MiB
   Load Address: 40008000
   Entry Point:  40008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK

но все-равно виснет на

Starting kernel ...

как определить адрес точки входа ядра? насколько я понимаю, в каждом образе она своя?
« Последнее редактирование: Февраль 29, 2016, 08:18:05 pm от yopt »

Оффлайн yopt

  • Новичок
  • *
  • Сообщений: 7
  • Лайков: 1
  • Карма: +0/-0
  • Orange Pi PC
    • Просмотр профиля
Re: u-boot
« Ответ #3 : Февраль 29, 2016, 08:21:21 pm »
тут ребята пишут, что поднимали u-boot на OPI-PC. Но как конкретно этот процесс происходит - непонятно. Полезен этот загрузчик может быть хотя бы тем, что разрешение и некоторые другие параметры загрузки можно прописывать напрямую в uEnv.txt не "компилируя" каждый раз в script.bin

Оффлайн ua3nbw

  • Посвященный
  • ***
  • Сообщений: 154
  • Лайков: 68
  • Карма: +10/-0
  • Orange Pi PC
    • Просмотр профиля
Re: u-boot
« Ответ #4 : Февраль 29, 2016, 09:33:43 pm »
На armbian разрешение  можно прописывать напрямую с помошью h3disp


Вот их boot.scr
Извините, вам запрещён просмотр содержимого спойлеров.

Оффлайн AlDemin

  • Житель
  • ****
  • Сообщений: 405
  • Лайков: 104
  • Карма: +14/-1
  • OPi, OPi+, OPiOne, OPiZero, OPiPC2, BPi, RPiB.
    • Просмотр профиля
Re: u-boot
« Ответ #5 : Февраль 29, 2016, 09:59:56 pm »
У Armbian-а нет BOOT раздела все на одном ext4, и ядро "пожатое" - zImage
Игорь все делает по своему.

Оффлайн yopt

  • Новичок
  • *
  • Сообщений: 7
  • Лайков: 1
  • Карма: +0/-0
  • Orange Pi PC
    • Просмотр профиля
Re: u-boot
« Ответ #6 : Март 01, 2016, 06:56:56 pm »
рабочий boot.cmd

setenv machid 1029
setenv bootm_boot_mode sec
setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait panic=10
load mmc 0:1 0x43000000 script.bin || load mmc 0:1 0x43000000 boot/script.bin
load mmc 0:1 0x42000000 uImage || load mmc 0:1 0x42000000 boot/uImage
bootm 0x42000000

Оффлайн SterX

Re: u-boot
« Ответ #7 : Март 01, 2016, 07:06:03 pm »
А на нем можно дуалбут сделать без бубна?

Оффлайн yopt

  • Новичок
  • *
  • Сообщений: 7
  • Лайков: 1
  • Карма: +0/-0
  • Orange Pi PC
    • Просмотр профиля
Re: u-boot
« Ответ #8 : Март 01, 2016, 07:36:18 pm »
вот тут это описано вроде. Но бубен понадобится