Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Apr 25, 2019 7:20 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 124 posts ]  Go to page Previous 14 5 6 7 8 9 Next
Author Message
PostPosted: Fri Oct 31, 2008 4:04 pm 
Offline
User avatar

Joined: Thu Mar 01, 2007 7:57 pm
Posts: 835
И ещё один глупый вопрос: а где взять PE ядро?

_________________
Всех выше те, кто доброе творят,
И за дела добра не ждут наград,
Всем жертвуют для страждущих людей,
Не думая о выгоде своей.


Top
   
PostPosted: Fri Oct 31, 2008 6:21 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Присоединяюсь к Атауальпа, где взять бинарник и как собрать бинарник самому, если можно развернутый ответ ) а то на svn несколько лишних скриптов для компиляции которые к PE отношения не имеют.


Top
   
PostPosted: Fri Oct 31, 2008 10:33 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Для сборки нужны migw gcc (я компилирую gcc 4.2.1) fasm, binutils , make и 7z если нужна упаковка в .gz. Сборка простая - открывается консоль cmd и в ней выполняется make. Или простой батник
@erase lang.inc
@echo lang fix ru >lang.inc
@make
@pause
если все нормально то получится примерно такой лог
Code:
as  -o bin/export.obj core/export.asm 
gcc -c -O2 -I include/ -fomit-frame-pointer -fno-builtin -o bin/init.obj core/init.c
gcc -c -O2 -I include/ -fomit-frame-pointer -fno-builtin -o bin/mm.obj core/mm.c
gcc -c -O2 -I include/ -fomit-frame-pointer -fno-builtin -o bin/slab.obj core/slab.c
gcc -c -O2 -I include/ -fomit-frame-pointer -fno-builtin -o bin/heap.obj core/heap.c
gcc -c -O2 -I include/ -fomit-frame-pointer -fno-builtin -o bin/dll.obj core/dll.c
gcc -c -O2 -I include/ -fomit-frame-pointer -fno-builtin -o bin/spinlock.obj core/spinlock.c
fasm.exe boot/boot.asm bin/boot/boot.obj
flat assembler  version 1.67.15  (1373667 kilobytes memory)
3 passes, 7240 bytes.
fasm.exe boot/start.asm bin/boot/start.obj
flat assembler  version 1.67.15  (1373667 kilobytes memory)
4 passes, 851 bytes.
ld -shared -s -Map kernel.map --image-base 0x100000 --file-alignment 32  -T ld.x -o kernel.mnt kernel.obj bin/export.obj bin/init.obj bin/mm.obj bin/slab.obj bin/heap.obj bin/dll.obj bin/spinlock.obj bin/boot/boot.obj bin/boot/start.obj
7z a -tgzip kernel.gz kernel.mnt   

7-Zip 4.42  Copyright (c) 1999-2006 Igor Pavlov  2006-05-14

Scanning

Updating archive kernel.gz

Compressing  kernel.mnt

Everything is Ok


Ядро может выводить отладочный лог в COM1. Это очень удобно если запускать в эмуляторе. Для этого надо открыть makefile и добавить -DCONFIG_DEBUG в строку "CFLAGS =" и перекомпилировать ядро. Для запуска в qemu указать ключ -serial file:путь_к_лог_файлу. Для bochs отредактировать строку в bochsrc.txt "com1: enabled=1, mode=file, dev=путь_к_лог_файлу". На реальном железе такое ядро будет грузиться очень медлено потому что вывод в СОМ занимает много времени.

P.S. Я выложу новую сборку когда доделаю загрузку PE программ. Примерно через неделю.


Top
   
PostPosted: Fri Oct 31, 2008 11:58 pm 
Offline
User avatar

Joined: Thu Mar 01, 2007 4:16 pm
Posts: 426
Жду с нетерпением.
Загрузка DLL будет реализована?

..bw


Top
   
PostPosted: Sat Nov 01, 2008 4:03 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Сейчас этим занимаюсь. PE программы и расшаренные DLL с автоматической линковкой при загрузке.


Top
   
PostPosted: Sat Nov 01, 2008 7:36 am 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Quote:
Ядро может выводить отладочный лог в COM1
Какие параметры порта?


Top
   
PostPosted: Sat Nov 01, 2008 10:18 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
8 бит, остальное по дефолту. Я использовал только в эмуляторах им всё равно. На железе наверное надо ставить 115200 чтобы быстрее работало


Top
   
PostPosted: Wed Nov 05, 2008 9:48 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Сделал загрузку ДЛЛ.

Пока все длл-ки локальны и не могут импортировать сами, но это пока.
Здесь свежая превьюшка.
/rd/1/testcon2.kpe портированный пример работы с консолью. Здесь отладочное ядро (нет оно не зависло. Просто долго, долго, очень долго и старательно пишет всё в сом1).


Attachments:
File comment: исходники портированной консоли
console.7z [16.99 KiB]
Downloaded 102 times
Top
   
PostPosted: Wed Nov 05, 2008 10:28 am 
Offline
User avatar

Joined: Thu Mar 01, 2007 4:16 pm
Posts: 426
Какие есть условия для запуска PE EXE? ImageBase, например, должен быть равен нулю? Если он будет выставлен в 0x400000 то это приведет к перерасходу памяти (первые 4Mb будут зарезервированны для удовлетворения смещения секций на ImageBase)?
DLL локальны (не понял :-) ? Т.е. таблицы импорта в них игнорируются и зависимости для таких DLL разрешены не будут?

..bw


Last edited by bw on Wed Nov 05, 2008 12:35 pm, edited 1 time in total.

Top
   
PostPosted: Wed Nov 05, 2008 12:16 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Базы программ и длл должны быть 0. Для фасма это не проблема
format PE GUI at 0
format PE GUI 4.0 DLL at 0
Перерасхода памяти не будет. Образ неправильно скомпонуется и вылетит со страничной ошибкой. Длл локальны в том смысле что находятся в пространстве процесса. Если десять программ ссылаются на одну длл она будет загружена десять раз. Таблицы импорта в длл игноруруется. Загрузчик не различает длл и приложения и может запустить длл как программу. Всё это будет исправлено, а пока так.

Путь к программе и командная строка передаются через стек. Я взял за основу System V ABI. После загрузки приложения стек выглядит так
Code:
typedef struct
{
    int     argc;       /*  always 2                                */
    char   *path;       /*  argv[0]   program path                  */
    char   *cmdline;    /*  argv[1]   command  line. May be null    */
    u32_t   sep1;       /*  separator.  must be zero                */
    char   *env;        /*  single environment string               */
    u32_t   sep2;       /*  separator.  must be zero                */
    auxv_t  aux[1];     /*  aux. AT_NULL for now                    */
}exec_stack_t;

[esp] = argc
[esp+4] = path и т.д

Стек расположен в вершине адресного пространства процесса. Пока стек жёстко ограничен одной страницей.


Top
   
 Post subject: Re: Колибри PE
PostPosted: Wed Nov 05, 2008 12:22 pm 
Offline
Site Founder
User avatar

Joined: Sun Aug 08, 2004 8:55 am
Posts: 689
Разделил тему.

_________________
in code we trust


Top
   
 Post subject: Re: Колибри PE
PostPosted: Wed Nov 05, 2008 12:51 pm 
Offline
User avatar

Joined: Thu Mar 01, 2007 4:16 pm
Posts: 426
> Базы программ и длл должны быть 0.
Странное решение, надеюсь в скором времени ты исправишь этот момент. Хотелось бы иметь возможность загружать существующие (под винду) библиотеки без предварительного изменения в них image base и соответствующей релокации. Конечно, для выполнения зависимостей некоторых DLL придется поработать мозгом и написать частичные реализации kernel32.dll и т.п. Например, первым делом, я хочу поработать над xvid.dll. У этой библиотеки существуют, вполне реализуемые, зависимости от kernel32.dll и user32.dll.

..bw


Top
   
 Post subject: Re: Колибри PE
PostPosted: Wed Nov 05, 2008 1:59 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Базу для длл я поправлю. Насчёт Win DLL я не столь оптимистичен. Существующий загрузчик не сможет их правильно загрузить. И правильная реализация функций из win api дело довольно нудное. Мне кажется быстрее портировать и скомпилировать их под Колибри.


Top
   
 Post subject: Re: Колибри PE
PostPosted: Wed Nov 05, 2008 2:17 pm 
Offline
User avatar

Joined: Thu Mar 01, 2007 4:16 pm
Posts: 426
> Существующий загрузчик не сможет их правильно загрузить.
А в чем может возникнуть сложность? Удручающая новость, если честно, я сильно расчитывал на это.

> И правильная реализация функций из win api дело довольно нудное.
Это конечно так. Но я не ставлю перед собой цель реализовать весь API, а только по мере необходимости.

> Мне кажется быстрее портировать и скомпилировать их под Колибри.
Собирать виндовый код из под Linux то еще приключение, особенно сишный код паскалисту :-). Мои начинания с медиаплеером потому и заглохли. Существующих реализация libc окозалось недостаточно, ни для xvid, ни тем более для ffmpeg. Писать свои заглушки для недостающих имен на си я не могу из-за недостатояного опыта разработки на этом языке, а на pascal'е это довольно проблематичная задача, хотя бы потому, что определение функций типа cdecl реализовано слабовато (нельзя работать с "..." в параметрах).

p.s. К тому же исходники не всегда доступны ;-).

..bw


Top
   
 Post subject: Re: Колибри PE
PostPosted: Wed Nov 05, 2008 5:18 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 4993
Действительно, наверное благодаря улучшеным иконкам (а может и чему-то ещё)), образ грузится значительно быстрее.

_________________
Через тернии к звездам


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 124 posts ]  Go to page Previous 14 5 6 7 8 9 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited