Интересуюсь архитектурой 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 КБ]
Скачиваний: 366