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 в графическом окне. Вложение:
|
Автор: | 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 | ||
Я разобрался. Если вдруг кому-то будет интересно прикладываю архив.
|
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |