OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 10 Декабрь, 2024 01:55

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




Форум закрыт Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 58 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
СообщениеДобавлено: Среда, 17 Октябрь, 2012 14:48 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Иван Денисов писал(а):
Скорее выложить два варианта сборки с кратким описанием по компиляции тем и другим образом. Тянуть нельзя.
С тянуть нельзя, понятно :). Выложить два варианта не катит. Нужно определиться с одним, выложить его, и его же далее поддерживать.
Иван Денисов писал(а):
Для кроссразработки также предложить две схемы. Мою с временным перемещением файлов предлагаю тоже не убирать. Все-таки работает все и мне, например, так очень удобно работать.
Не вижу препятствий для наличия нескольких схем работы на выбор пользователя. Предлагайте: где инструкция по разворачиванию рабочего места?
Иван Денисов писал(а):
На каком ядре остановились? В репозитории сейчас что-за ядро оказалось в итоге в папке System/Mod/ ? Ядро Александра все-таки пока недоделанное? Давайте версию для BSD выложим попозже, а вот для линукса ведь ядро есть от OpenBUGS 322. Считаю надо с ним пока выложить все вразумительные наработки по Linux версии.
В System/Mod/ линуксовое ядро для публикации. Читайте дельты, там все написано.

По ядру Александра он сам скажет. Из его наработок пока ничего не вносил: от автора дельт нету, провести сравнение и выписать пока времени не нашел.

Насчёт ядра OpenBUGS 322 ничего не знаю, даже где брать. Дайте пожалуйста ссылку. Заодно, может сравните, чем оно отличается от того, которое уже есть.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 17 Октябрь, 2012 21:12 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Я за второй вариант запуска.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 17 Октябрь, 2012 21:17 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Илья Ермаков писал(а):
Я за второй вариант запуска.
Поддержу.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 21 Октябрь, 2012 02:53 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 485
Откуда: KZ
Да, есть в Ubuntu такая проблема, конструктор библиотеки не запускается, если к ней нет обращения. Как заставить компилятор (линкер) работать нормально, я так и не понял.

Стал разбираться с Kernel.baseStack.

Она используется в двух местах: в сборке мусора (Kernel.MarkLocals) и при отображении информации о TRAP-е (в Kernel.TrapHandler). Причём она может изменяться (уменьшаться) в Kernel.Start, хоть это и не обязательно, -- для того, чтобы не отображать лишнее.

По-моему SetKernelBaseStack вызывать не нужно в том случае, если не вызывать никаких процедур из библиотеки. Т. е. в случае:
libBB.so := Kernel+ Files HostFiles StdLoader
Все процедуры выполняются в одном и том же стеке, при вызове конструктора библиотеки. Сначала переменная baseStack инициализируется в Kernel.INIT, вызываемой из конструктора библиотеки, потом из него же Files.INIT, HostFiles.INIT, и потом из него же запускается сам BlackBox в StdLoader.INIT. Так что всё должно быть нормально.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 21 Октябрь, 2012 14:52 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Alexander Shiryaev писал(а):
Да, есть в Ubuntu такая проблема, конструктор библиотеки не запускается, если к ней нет обращения. Как заставить компилятор (линкер) работать нормально, я так и не понял.
Решение записано в Dev_dev/Docu/ElfLinker-Link (снова перенёс ElfLinker-Link в Dev :) ).


Последний раз редактировалось Евгений Темиргалеев Понедельник, 22 Октябрь, 2012 14:51, всего редактировалось 2 раз(а).
ч


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 21 Октябрь, 2012 14:53 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Alexander Shiryaev писал(а):
Стал разбираться с Kernel.baseStack.
Зачем? Решение с ручной дин. загрузкой отбросили.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 22 Октябрь, 2012 08:31 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3806
Евгений, прямой вопрос: удасться ли договориться о включении LinLinker и первого метода сборки в публикацию которую вы курируете или это принципиальная изначальная позиция?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 22 Октябрь, 2012 09:26 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Изначальной моей позицией был способ (1). В ходе обсуждения (РБВ, ТЕЭ, ТФВ) появился критерий минимальности исходника сишного пускача, с которым все единодушно согласились. По этому критерию отбирается способ (2). Решение зафиксировано 14.09 в viewtopic.php?p=74762#p74762, работа началась.

Общий подход --- найти как можно более простое решение. Сюда же относится и поддержка только одного способа. "Лучше меньше, да лучше".

Какие у Вас есть принципиальные (технические) возражения? По какой причине Вы так держитесь за LinLinker? Давайте обсуждать. (Просто хочется, потому что я так привык и мне теперь так удобно, это не довод. Мне был удобен (1) способ, я к нему привык.)
---
Если хочется совсем правильное решение --- возьметесь доделывать ElfLinker? У меня, например, нету сейчас времени, чтобы на ~месяц всё бросить для изучения ELF-формата и реализации DevElfLinker, чтобы оценить возможность/сложность доделывания.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 22 Октябрь, 2012 14:32 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 485
Откуда: KZ
Надо составить таблицу, строки которой - способы запуска, столбцы - особенности.

Т. к. способ (2) в Ubuntu не работает, то я за способ (1) для случая, когда из libBB.so нет экспорта (т. к. в этом случае SetKernelBaseStack не требуется).
Код:
#include <dlfcn.h>
#include <stdio.h>

int main (int argc, char *argv[])
{
        void * h;
        int res;

        h = dlopen("libBB.so", RTLD_LAZY | RTLD_GLOBAL);
        if (h != NULL) {
                res = 0;
        } else {
                perror(dlerror());
                res = 1;
        }

        return res;
}


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 22 Октябрь, 2012 15:02 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3806
В чем смысл публиковать то, что принципиально не отличается от того, что опубликовал Димыч в сборке bb-revival-nix0.1?
Ведь просто ничего нового нет тогда за исключением нескольких фиксов!
Надо открыть материалы, может Роман или кто-то еще разберутся с документацией ELF и доделают, а у нас так руки и не дойдут, у одних нет времени у других квалификации.

Для меня метод 2 очень сложен, сравните, для метода номер 1 инструкция занимает меньше 10 строчек. В то время как для второго развертывание сложное, решение выглядит костыльно (не говорю, что оно плохое, но оно выглядит ПЛОХО), а поэтому не привлечет людей в проект.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 22 Октябрь, 2012 15:43 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Info21 писал(а):
Илья Ермаков писал(а):
Я за второй вариант запуска [ viewtopic.php?p=75490#p75490 ].
Поддержу.
Второй вариант реализован (дельта KernelCmdline, решение 4), первый описан (решение 3). (обновлённый архив: viewtopic.php?f=102&t=4118)
Цитата:
Решение 4, 21102012, ТЕЭ
Повторить подход Kernel для Windows не в лоб, организуя для других модулей командную строку, которую они не могут получить системным вызовом, а концептуально: основать передачу параметров на таком механизме ОС, который позволит получать их через системные вызовы. Тогда модули сами получают потребные параметры, Kernel же о параметрах ничего знать не надо.

Согласно документации libc, программа может получать параметры также и через переменные окружения, для чтения/записи которых предоставлены соответствующие функции. В случае динамической библиотеки этот способ оказывается единственным.
http://www.gnu.org/software/libc/manual ... ram-Basics

Отличие от Windows-подхода с командной строкой:
- программный: модули вместо разобра командной строки и выделения своих параметров, запрашивают значения переменных окружения с определёнными и зафиксированными в документации пользователя именами;
- пользователь: вместо указания параметров в командной строке при вызове программы, выставляет значения переменных окружения перед её вызовом.
Усё решение: из Kernel вычищены команднострочные костыли, получилось как в Kernel для Windows.

Теперь специальный пусковой скрипт .sh не нужен. Достаточно только бинарного пускача и библиотеки.

HostFiles переделан под новый подход --- дельта HostFilesCmdline.
Цитата:
Серверная конфигурация
Исходный метод определения параметров серверной конфигурации:
- первичная папка = папка, содержащая выполняемый файл;
- вторичная папка = задана через командную строку ключом /USE.
Серверная конфигурация включается, если (корректно) задана вторичная папка.

Т. к. получение имени выполняемого файла — та же проблема, что и получение командной строки, то для неё тоже решение — первичная папка определяется явно через переменную окружения. Такой подход, в частности, позволяет использовать один и тот же выполняемый файл (библиотеку), размещённые в стандартных папках (FHS), для любых конфигураций.

Новый метод:
- первичная папка = значение переменной окружения bbServerDir;
- вторичная папка = значение переменной окружения bbWorkDir.
Переменные должны содержать полное имя папок (без "/" в конце). Серверная конфигурация включается, если (корректно) явно определены как первичная так и вторичная папка; если первичная папка не определена, в качестве неё используется текущая.
Тоже всё хорошо почистилось --- костыли и заметки как бы их улучшить заменились на штатные запросы переменных окружения. Новая команда запуска показана ниже, workPath --- параметр тестовой программы.

Осталось только уточнить как обозвать переменные окружения. Менять потом будет крайне проблематично.

Пока буду потихоньку переделывать инструкцию по сборке "екзе".

.../home/test/dev$ gcc --version > 1.utf8 ; env bb-primaryDir=$HOME/bb16rc6 bb-secondaryDir=$PWD workPath=Dev/Docu ./test >> 1.utf8
Код:
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

failed to install signal
32
failed to install signal
33
Server dir: /home/bb/bb16rc6
Work dir: /home/test/dev
Work path: Dev/Docu

********************
abs: "/home/bb/bb16rc6/Dev/Docu"
====== LocList (res =  0) ======
   nlocs =  0
====== FileList (res =  0) ======
AlienTool.odc
Analyzer.odc
Browser.odc
Build-Tool.odc
CPB.odc
CPC486.odc
CPE.odc
CPH.odc
CPL486.odc
CPM.odc
CPP.odc
CPS.odc
CPT.odc
CPV486.odc
Cmds.odc
ComDebug.odc
ComInterfaceGen.odc
Commanders.odc
Compiler.odc
Debug.odc
Dependencies.odc
HeapSpy.odc
Inspector.odc
LinkChk.odc
Linker.odc
Markers.odc
MsgSpy.odc
P-S-I.odc
Packer.odc
Profiler.odc
RBrowser.odc
References.odc
Search.odc
Selectors.odc
SubTool.odc
Sys-Map.odc
TypeLibs.odc
User-Man.odc
   nfiles =  38

********************
abs: "/home/test/dev/Dev/Docu"
====== LocList (res =  0) ======
   nlocs =  0
====== FileList (res =  0) ======
ElfLinker-Link.odc
ElfLinker.odc
   nfiles =  2

********************
"/Dev/Docu" (abs: "/home/test/dev/Dev/Docu")
====== LocList (res =  0) ======
   nlocs =  0
====== FileList (res =  0) ======
AlienTool.odc
Analyzer.odc
Browser.odc
Build-Tool.odc
CPB.odc
CPC486.odc
CPE.odc
CPH.odc
CPL486.odc
CPM.odc
CPP.odc
CPS.odc
CPT.odc
CPV486.odc
Cmds.odc
ComDebug.odc
ComInterfaceGen.odc
Commanders.odc
Compiler.odc
Debug.odc
Dependencies.odc
ElfLinker-Link.odc
ElfLinker.odc
HeapSpy.odc
Inspector.odc
LinkChk.odc
Linker.odc
Markers.odc
MsgSpy.odc
P-S-I.odc
Packer.odc
Profiler.odc
RBrowser.odc
References.odc
Search.odc
Selectors.odc
SubTool.odc
Sys-Map.odc
TypeLibs.odc
User-Man.odc
   nfiles =  40
./test > 1.utf8
Код:
failed to install signal
32
failed to install signal
33
Server dir: /home/test/dev
Work dir: /home/test/dev
Work path:

********************
abs: "/home/test/dev"
====== LocList (res =  0) ======
Code
Dev
Dev_dev
Host
Lin
Lin_dev
Sym
System
System_dev
Test
_dev
archives
d
   nlocs =  13
====== FileList (res =  0) ======
1.utf8
Lin-Console-Coder-List.utf8
start.odc
starter.c
test
test.so
   nfiles =  6


... для следующих двух случаев --- тоже самое


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 22 Октябрь, 2012 16:00 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Иван Денисов писал(а):
Надо открыть материалы, может Роман или кто-то еще разберутся с документацией ELF и доделают, а у нас так руки и не дойдут, у одних нет времени у других квалификации.
Все, у кого есть время и квалификация, давно могли бы сделать. Пакет Оминк/Опенбагз сколько уже времени открыт?

Иван Денисов писал(а):
Для меня метод 2 очень сложен, сравните, для метода номер 1 инструкция занимает меньше 10 строчек. В то время как для второго развертывание сложное, решение выглядит костыльно (не говорю, что оно плохое, но оно выглядит ПЛОХО), а поэтому не привлечет людей в проект.
Для меня костыльно выглядит отсутствие подробной инструкции. И не надо забывать, что моя инструкция состоит из одного документа, а Ваша требует присутствия в пакете нного количества вспомогательных файлов. Если мою сделать также, она тоже уменьшится в объёме.

Но не вижу смысла откатываться к морально устаревшим методам работы, отказываясь от документ-ориентированного интерфейса. Да, чтобы документ стал активным (что снижает рукотыканье в разы), требуется поставить сопутствующие компоненты. Есть предположение, что Ваше "развертывание сложное" заключается в их отсутствии...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 22 Октябрь, 2012 16:56 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3806
Блин, я вот все время пишу первый, первый, а по вашей классификации, то о чем я пишу - это третий (3) метод с LinLinker. Вообще, внес много путаницы в обсуждения, прошу прощения.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 22 Октябрь, 2012 19:06 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Товарищи, отдельно акцентирую внимание на вопросе выбора имён переменных окружения --- параметров:
Код:
env bb-primaryDir=xxx bb-secondaryDir=yyy zzz/program

которые заменяют /USE (bb-secondaryDir) и положение экзешника как неявный параметр (bb-primaryDir):
Код:
xxx/program /USE yyy


Мне всё равно, какие будут названия. Лишь бы пожелания не начали возникать через неделю или месяц, когда придётся лопатить кучу документов.

P.S. Будет эта методика в итоге применяться или не будет --- вопрос отдельный, поэтому про названия можно высказаться вовсе его не касаясь.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 22 Октябрь, 2012 21:45 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4712
Откуда: Россия, Орёл
Предлагаю более стандартно (вернее, как принято уже на практике, по линуксовому) к именам подойти: BB_PRIMARY_DIR и BB_SECONDARY_DIR.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 22 Октябрь, 2012 23:33 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 485
Откуда: KZ
Поддерживаю.
А то на самом деле с командной строкой проблем много. В Windows хоть WinApi.GetCommandLine есть.

BB_PRIMARY_DIR -- необязательная переменная (если не определена -- то getcwd()),
BB_SECONDARY_DIR -- необязательная переменная (как /USE).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 23 Октябрь, 2012 08:28 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Цитата:
Предлагаю более стандартно (вернее, как принято уже на практике, по линуксовому) к именам подойти: BB_PRIMARY_DIR и BB_SECONDARY_DIR.


Поддерживаю.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 23 Октябрь, 2012 14:30 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Итого, по результатам голосования ЗА (трое), ВОЗДЕРЖАЛСЯ (один), не участвовали (двое). :) заменил значения констант на BB_PRIMARY_DIR и BB_SECONDARY_DIR.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Форум закрыт Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 58 ]  На страницу Пред.  1, 2, 3

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


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

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


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB