LINUX.ORG.RU

at91sam9 и linux

 


0

1

Давно лежала плата от starterkit на at91sam9g45. Пытаюсь загрузиться на ней с современным linux (5.4.6). Гружусь с sd карточки.

at91bootstrap собран и работает, настроен запускать linux ядро по адресу 0x70008000 с передачей dtb по адресу 0x70000000.

ядро настроено брать dtb через r2. dtb взят из arch/arm/boot/dts/at91sam9m10g45ek.dts, который включает в себя arch/arm/boot/dts/at91sam9g45.dtsi

На DBGU выдается информация во время работы at91bootstrap и, если в ядро добавить код для записи сообщения напрямую в dbgu в самое начало запуска ядра, то тоже пишет. Такая запись работате до момента включения mmu, после этого еще не сконфигурированы таблицы, содержащие адресное пространство регистров dbgu. Но тем не менее, видно, что на ядро управление передается.

В настройках ядра выбраны соответствующие драйвера uart, с указанием что консоль на uart, в аргументах запуская ядра (выбрано вшить в само ядро) написано console=ttyS0,115200, хотя пробовал и console=serial0:115200n8

Тем не менее, никакого вывода ядра нет. Какой либо иной активности вроде включения сетевой карточки, плата тоже не проявляет.

★★★★★

Последнее исправление: cvs-255 (всего исправлений: 2)
Ответ на: комментарий от Harald

Старый с флеш памяти грузится

Конфиг я через menuconfig руками делал, вроде бы все, чтобы хоть что то отобразилось, выбрал.

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от cvs-255

значит наверняка что-то в конфиге пропустил

Harald ★★★★★
()
Ответ на: комментарий от Harald

Попробовал. Все равно то же самое(

Из того, что я поменял по сравнению с дефолтом - отключил initramfs, и убрал appended dtb, т.к. dtb передает загрузчик

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 1)

at91bootstrap собран и работает, настроен запускать linux ядро по адресу 0x70008000 с передачей dtb по адресу 0x70000000.

какой смыл был менять дефолтные значения ?

[code] git clone https://github.com/linux4sam/at91bootstrap.git make at91sam9m10g45eksd_linux_image_dt_defconfig make menuconfig

Kernel Image Storage Setup —> (0x72000000) The External Ram Address to Load Kernel Image

Flattened Device Tree —> (0x71000000) The External Ram Address to Load Device Tree Blob [/code]

anonymous
()

Какойто дурак маркдаун поставил по дефолту

at91bootstrap собран и работает, настроен запускать linux ядро по адресу 0x70008000 с передачей dtb по адресу 0x70000000.

какой смыл был менять дефолтные значения ?

git clone https://github.com/linux4sam/at91bootstrap.git
make at91sam9m10g45eksd_linux_image_dt_defconfig
make menuconfig

Kernel Image Storage Setup  ---> 
(0x72000000) The External Ram Address to Load Kernel Image

Flattened Device Tree  ---> 
(0x71000000) The External Ram Address to Load Device Tree Blob 
anonymous
()

Проверь что ты не вываливаешься за пределы ОЗУ развёрнутым ядром. Или что у тебя распакованное ядро не перетирает dtb.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Dark_SavanT

взял ядро 3.16. Там есть возможность вместо dtb использовать board файл.

Получается так:

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 3.16.80 (vlad@vlad) (gcc version 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907] (15:7-2018-q2-6+b1) ) #7 Thu Dec 26 01:00:21 MSK 2019
[    0.000000] CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=0005317f
[    0.000000] CPU: VIVT data cache, VIVT instruction cache
[    0.000000] Ignoring memory below PHYS_OFFSET: 0x00000000-0x04000000
[    0.000000] bootconsole [earlycon0] enabled
[    0.000000] Memory policy: Data cache writeback
[    0.000000] Kernel panic - not syncing: ERROR: Failed to allocate 0x2000 bytes below 0x0.
[    0.000000]
[    0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 3.16.80 #7
[    0.000000] [<c000d9a4>] (unwind_backtrace) from [<c000bb9c>] (show_stack+0x10/0x14)
[    0.000000] [<c000bb9c>] (show_stack) from [<c03aac54>] (panic+0x78/0x1f4)
[    0.000000] [<c03aac54>] (panic) from [<c050d934>] (memblock_alloc_base+0x2c/0x38)
[    0.000000] [<c050d934>] (memblock_alloc_base) from [<c0504c28>] (early_alloc_aligned+0xc/0x2c)
[    0.000000] [<c0504c28>] (early_alloc_aligned) from [<c0505844>] (paging_init+0x450/0x870)
[    0.000000] [<c0505844>] (paging_init) from [<c0503454>] (setup_arch+0x344/0x68c)
[    0.000000] [<c0503454>] (setup_arch) from [<c0501880>] (start_kernel+0x70/0x314)
[    0.000000] [<c0501880>] (start_kernel) from [<70008040>] (0x70008040)
[    0.000000] ---[ end Kernel panic - not syncing: ERROR: Failed to allocate 0x2000 bytes below 0x0.

если на 0x72000000 загружать, то то же самое

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 2)
Ответ на: комментарий от anonymous

Если по дефолту с 3.16.80 делать, то получается

Error: unrecognized/unsupported device tree compatible list:
[ ]
cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от cvs-255

dtb взят из arch/arm/boot/dts/at91sam9m10g45ek.dts
Сделал на 5.4.6 по дефолту. Все равно тихо

подозреваю ram у тебя 32M, а на evk атмеловском 64M. То что там с dbgu или mmu не так в майнстримном ядре - не трать на это время, маловероятно

https://elixir.bootlin.com/linux/latest/source/arch/arm/boot/dts/at91sam9m10g...

	memory {
		reg = <0x70000000 0x4000000>;
	};

тут исправь на 32M

	memory {
		reg = <0x70000000 0x2000000>;
	};

и в бутсрапе тоже

Memory selection  ---> 
RAM Configuration  --->
RAM size (32 MB)  ---> 

Если действительно 32М на плате - исправь конфиг памяти в контроллере DDR если еще не исправил, тут вроде то что тебе нужно

https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.c...

бутстрап естественно будет и без исправлений работать - он в SRAM сидит, а вот ядро упадет при обращении к несуществующей памяти

anonymous
()
Ответ на: комментарий от anonymous

Забыл про адреса загрузки - в варианте с 32M их надо сместить вниз чтобы уложиться в 32M, например так

Kernel Image Storage Setup  ---> 
(0x71000000) The External Ram Address to Load Kernel Image

Flattened Device Tree  ---> 
(0x70800000) The External Ram Address to Load Device Tree Blob

начальные адреса (0x70000000) лучше не занимать - помоему туда таблица векторов прерываний переносится

anonymous
()
Ответ на: комментарий от anonymous

64 m памяти

В общем удалось запустить ядро, собрав uboot.

Правда там еще остался небольшой гемор с тем, что linux пока не видит sd карточку, но думаю это решаемо

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от cvs-255

Правда там еще остался небольшой гемор с тем, что linux пока не видит sd карточку

поменяй gpio для card detect (cd) в соответствии со схемой платы

https://elixir.bootlin.com/linux/latest/source/arch/arm/boot/dts/at91sam9m10g45ek.dts#L106

https://elixir.bootlin.com/linux/latest/source/arch/arm/boot/dts/at91sam9m10g45ek.dts#L119

anonymous
()
Ответ на: комментарий от anonymous

Хм, а значение по умолчанию в linux и uboot разные?

Я же с карточки гружусь и bootstrap и uboot видят карточку, хотя я в них ничего не менял

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от cvs-255

Я же с карточки гружусь и bootstrap и uboot видят карточку, хотя я в них ничего не менял

значит они просто не проверяют вставлена ли карта в слот, в Linux тоже так можно сделать

https://elixir.bootlin.com/linux/latest/source/arch/arm/boot/dts/at91sam9m10g...

тут добавь

slot@0 {
	reg = <0>;
	bus-width = <4>;
>>>>	non-removable;
	cd-gpios = <&pioD 10 GPIO_ACTIVE_HIGH>;
};

тогда драйвер не будет проверять CD, на второй mmc1 можно тоже добавить, но лучше исправь CD

anonymous
()
Ответ на: комментарий от anonymous

О, тут заработало!

Правда падает дальше. Каким то не очень понятным образом похоже кончается память

mmc0: new high speed SD card at address 0002
mmcblk0: mmc0:0002 00000 1.87 GiB
kworker/0:1 invoked oom-killer: gfp_mask=0x40cc0(GFP_KERNEL|__GFP_COMP), order=0, oom_score_adj=0
CPU: 0 PID: 45 Comm: kworker/0:1 Not tainted 5.4.6 #3
Hardware name: Atmel AT91SAM9
Workqueue: events_freezable mmc_rescan
[<c000fcb4>] (unwind_backtrace) from [<c000d6b8>] (show_stack+0x10/0x18)
[<c000d6b8>] (show_stack) from [<c05ae310>] (dump_stack+0x18/0x24)
[<c05ae310>] (dump_stack) from [<c007014c>] (dump_header+0x50/0x1f0)
[<c007014c>] (dump_header) from [<c0070d64>] (out_of_memory+0x258/0x358)
[<c0070d64>] (out_of_memory) from [<c009c5a8>] (__alloc_pages_nodemask+0x800/0x9c8)
[<c009c5a8>] (__alloc_pages_nodemask) from [<c00a0f28>] (____cache_alloc+0x1c0/0x5e4)
[<c00a0f28>] (____cache_alloc) from [<c00a14c0>] (__kmalloc+0x60/0x9c)
[<c00a14c0>] (__kmalloc) from [<c03f1c34>] (mmc_mq_init_request+0x34/0x5c)
[<c03f1c34>] (mmc_mq_init_request) from [<c01ea564>] (blk_mq_alloc_rqs+0x15c/0x1f8)
[<c01ea564>] (blk_mq_alloc_rqs) from [<c01ed7a4>] (blk_mq_init_sched+0x88/0x188)
[<c01ed7a4>] (blk_mq_init_sched) from [<c01df278>] (elevator_init_mq+0xa0/0x13c)
[<c01df278>] (elevator_init_mq) from [<c01f0090>] (__device_add_disk+0x2c/0x4c8)
[<c01f0090>] (__device_add_disk) from [<c03eeec8>] (mmc_add_disk+0x18/0xf4)
[<c03eeec8>] (mmc_add_disk) from [<c03f0ed4>] (mmc_blk_probe+0x2c0/0x69c)
[<c03f0ed4>] (mmc_blk_probe) from [<c02f3350>] (really_probe+0x1f8/0x31c)
[<c02f3350>] (really_probe) from [<c02f36fc>] (driver_probe_device+0x140/0x15c)
[<c02f36fc>] (driver_probe_device) from [<c02f1838>] (bus_for_each_drv+0xa4/0xbc)
[<c02f1838>] (bus_for_each_drv) from [<c02f351c>] (__device_attach+0xa8/0x124)
[<c02f351c>] (__device_attach) from [<c02f2508>] (bus_probe_device+0x24/0x80)
[<c02f2508>] (bus_probe_device) from [<c02f03d8>] (device_add+0x424/0x558)
[<c02f03d8>] (device_add) from [<c03e28dc>] (mmc_add_card+0x14c/0x244)
[<c03e28dc>] (mmc_add_card) from [<c03e8e5c>] (mmc_attach_sd+0xfc/0x160)
[<c03e8e5c>] (mmc_attach_sd) from [<c03e2204>] (mmc_rescan+0x1a8/0x24c)
[<c03e2204>] (mmc_rescan) from [<c002b288>] (process_one_work+0x154/0x1f0)
[<c002b288>] (process_one_work) from [<c002bb40>] (worker_thread+0x214/0x2d0)
[<c002bb40>] (worker_thread) from [<c0030a94>] (kthread+0xe4/0xf0)
[<c0030a94>] (kthread) from [<c00090e0>] (ret_from_fork+0x14/0x34)
Exception stack(0xc0e69fb0 to 0xc0e69ff8)

UPD: с этим разобрался, передав в ядро mem=64M

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.