OSDev

для всех
Текущее время: 27 апр 2024, 13:45

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Небольшая проблема с кодом под ARM
СообщениеДобавлено: 07 апр 2012, 21:17 

Зарегистрирован: 28 янв 2012, 18:02
Сообщения: 29
Интересуюсь архитектурой 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 КБ]
Скачиваний: 361


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 апр 2012, 22:01 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Вряд ли кто здесь чем-то поможет. Все, кроме меня, работают с IA-32; я работаю с ARMом, но никогда не сталкивался с упомянутой железякой, ну а всякие линухи на дух не переношу, а соответственно, и не использую.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 апр 2012, 07:19 

Зарегистрирован: 28 янв 2012, 18:02
Сообщения: 29
Похоже я поторопился.
Перед распаковать настраиваются прерывания.
Я думал код будет выполняя без этого,т.к. прерывания отключены.

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 апр 2012, 18:32 

Зарегистрирован: 28 янв 2012, 18:02
Сообщения: 29
Я разобрался.
Если вдруг кому-то будет интересно прикладываю архив.


Вложения:
linux-2.6.32.3 patched by kliga.ru.zip [88.38 КБ]
Скачиваний: 338
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB