OSDev
http://osdev.su/

Небольшая проблема с кодом под ARM
http://osdev.su/viewtopic.php?f=6&t=524
Страница 1 из 1

Автор:  tlx [ 07 апр 2012, 21:17 ]
Заголовок сообщения:  Небольшая проблема с кодом под ARM

Интересуюсь архитектурой ARM. Я попытался вынуть из ядра Linux код инициализирующий видеоконтроллер pl110 из VersatilePB. Делал я это используя qemu:

Код:
 qemu-system-arm -M versatilepb -m 128M -kernel ./arch/arm/boot/zImage -vga cirrus


Ядро 2.6.32.3 с конфигурацией versatile_defconfig

Не то чтобы я был в тупике, просто остался один шаг и хочется скорее закончить.

Если я правильно понимаю, мне удалось выделить весь нужный код в файлы /init/main.c и /arch/arm/kernel/head.S, но мне не удалось отвязать их от механизма сборки ядра. Код из head.S вызывается после распаковки, но думаю его можно запустить сразу, указав как точку входа.

Я набросал файл для линковщика, но думаю что-то напутал с размещением кода в памяти. Может стоит забить пространство до 0xC0000000 нулями.

В общем, прошу совета как собрать рабочий загрузочный образ из двух файлов. С простым кодом получается (например как в блоге Balau82), но, как только включается mmu, выполнение следующей строки взывает зависание (закоментированые строки с 81 по 83).

Прилагаю рабочий пример с закоментироваными строками. Собирается:

Код:
 arm-none-eabi-gcc -Wp, -nostdinc -mlittle-endian -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -Os -marm -fno-omit-frame-pointer -mapcs -mno-sched-prolog -mabi=apcs-gnu -mno-thumb-interwork -march=armv5te -mtune=arm9tdmi -msoft-float -Uarm -Wframe-larger-than=1024 -fno-stack-protector -fno-omit-frame-pointer -fno-optimize-sibling-calls -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fno-dwarf2-cfi-asm -fconserve-stack -c -o main.o main.c

arm-none-eabi-gcc -Wp, -nostdinc -mlittle-endian -mabi=apcs-gnu -mno-thumb-interwork -march=armv5te -mtune=arm9tdmi -msoft-float     -DTEXT_OFFSET=0x00008000  -c -o head.o head.S

arm-none-eabi-ld -T test.ld head.o main.o -o test.elf

arm-none-eabi-objcopy -O binary test.elf test.bin


Запускается без графики и выводит «Hellow world».
Код:
qemu-system-arm -M versatilepb -m 128M -nographic -kernel test.bin


В идеале если раскоментироавть строки и разобраться с размещением образа в памяти должно появится четыре полоски при запуске qemu в графическом окне.

Вложение:
Комментарий к файлу: Код
osdev.zip [31.99 КБ]
Скачиваний: 362

Автор:  SII [ 07 апр 2012, 22:01 ]
Заголовок сообщения:  Re: Небольшая проблема с кодом под ARM

Вряд ли кто здесь чем-то поможет. Все, кроме меня, работают с IA-32; я работаю с ARMом, но никогда не сталкивался с упомянутой железякой, ну а всякие линухи на дух не переношу, а соответственно, и не использую.

Автор:  tlx [ 08 апр 2012, 07:19 ]
Заголовок сообщения:  Re: Небольшая проблема с кодом под ARM

Похоже я поторопился.
Перед распаковать настраиваются прерывания.
Я думал код будет выполняя без этого,т.к. прерывания отключены.

Вобщем буду копать.

Забыл сказать: выход из контрольного режима qemu - ctrl+a затем x

Автор:  tlx [ 11 апр 2012, 18:32 ]
Заголовок сообщения:  Re: Небольшая проблема с кодом под ARM

Я разобрался.
Если вдруг кому-то будет интересно прикладываю архив.

Вложения:
linux-2.6.32.3 patched by kliga.ru.zip [88.38 КБ]
Скачиваний: 340

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/