motofan logo
> 

ADS и дуалбут, armcc.exe, tcc.exe, fromelf.exe

motoprogger
сообщение 19.4.2008, 8:28


Гуру
******

Группа: Разработчики
Сообщений: 1 327
Регистрация: 20.7.2006
Из: Г. Омск
Пользователь №: 92 049
Модель телефона: C380 и Talkabout
Прошивка: разные

Рейтинг: 510



Есть в планах попробовать написать дуалбут на Си. Для этого надо, чтобы функция main() была расположена в самом начале того бинарника, который я получу после сборки и извлечения бинарного файла из эльфа. Более того, может понадобиться, чтобы перед точкой входа были определённые байты. Как этого добиться?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
 
Ответ в темуСоздание новой темы
Ответов(1 - 9)
Vilko
сообщение 19.4.2008, 9:01


Мотокодер
******

Группа: Легенды MotoFan.Ru
Сообщений: 1 331
Регистрация: 23.6.2003
Из: Москва
Пользователь №: 71
Модель телефона: E398+, Е1000, ...

Рейтинг: 1116



motoprogger,
компили main в отдельный модуль, при линковке используй скаттер и выноси этот модуль в начало.

Сообщение отредактировал Vilko - 19.4.2008, 9:01
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
motoprogger
сообщение 19.4.2008, 16:11


Гуру
******

Группа: Разработчики
Сообщений: 1 327
Регистрация: 20.7.2006
Из: Г. Омск
Пользователь №: 92 049
Модель телефона: C380 и Talkabout
Прошивка: разные

Рейтинг: 510



Ага. Тогда имхо лучше сделать так: написать на асме модуль со всеми нужными первыми байтами и ARM-функцией DBEntry, запускающей main().
А какой формат файла, который опция scatter требует как карту создаваемого эльфа?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vilko
сообщение 20.4.2008, 19:38


Мотокодер
******

Группа: Легенды MotoFan.Ru
Сообщений: 1 331
Регистрация: 23.6.2003
Из: Москва
Пользователь №: 71
Модель телефона: E398+, Е1000, ...

Рейтинг: 1116



текстовый. вот такой я для дуала использую например:
Код

video_main 0x11F80000
{
    video_main +0
    {
        __object.o(+RO)
    }
}

main 0x11FE0000
{
    boot_main +0
    {
        boot.o(+RO, +FIRST)
        mmс.o(+RO)

    }
}

ram 0x3FC8000
{
    boot_rw +0
    {
        __object.o(+RW)
    }
    boot_zi +0
    {
        boot.o(+ZI)
        mmc.o(+ZI)
        __object.o(+ZI)
    }
}

Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
motoprogger
сообщение 22.4.2008, 13:32


Гуру
******

Группа: Разработчики
Сообщений: 1 327
Регистрация: 20.7.2006
Из: Г. Омск
Пользователь №: 92 049
Модель телефона: C380 и Talkabout
Прошивка: разные

Рейтинг: 510



Цитата(Vilko @ Вчера, 1:38)

video_main +0
*


Что означает +0?
Цитата(Vilko @ Вчера, 1:38)

__object.o(+RO)
*


Я так понимаю, +RO - ставит атрибут Read Only на секцию?
Цитата(Vilko @ Вчера, 1:38)

boot.o(+RO, +FIRST)
*


+FIRST - поместить объектный файл первым по порядку?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vilko
сообщение 22.4.2008, 16:01


Мотокодер
******

Группа: Легенды MotoFan.Ru
Сообщений: 1 331
Регистрация: 23.6.2003
Из: Москва
Пользователь №: 71
Модель телефона: E398+, Е1000, ...

Рейтинг: 1116



motoprogger,
+0 - адресация под-секции, относительная или абсолютная. +0 означает продолжать адресацию основной секции без изменений.
(+RO) - имя/тип секции в модуле, которую брать. соотв означает что взять только RO секции модуля.
значения
+RO - соотв read-only секции, как правило - код.
+RW - read-write секции, обычно инициализированные данные
+ZI - zero-initialized секции. BSS. то что в асме обозначаем NOINIT

+FIRST - данный модуль разместить в самом начале блока, не пытаясь до него сделать например Ven-ы



Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
motoprogger
сообщение 22.4.2008, 16:15


Гуру
******

Группа: Разработчики
Сообщений: 1 327
Регистрация: 20.7.2006
Из: Г. Омск
Пользователь №: 92 049
Модель телефона: C380 и Talkabout
Прошивка: разные

Рейтинг: 510



На перспективу: гнуарм так умеет?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vilko
сообщение 22.4.2008, 18:43


Мотокодер
******

Группа: Легенды MotoFan.Ru
Сообщений: 1 331
Регистрация: 23.6.2003
Из: Москва
Пользователь №: 71
Модель телефона: E398+, Е1000, ...

Рейтинг: 1116



motoprogger,
не совсем 1 в 1, но схоже.
смотри .lds файлы в линь-ядре для примеру )
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
motoprogger
сообщение 23.4.2008, 16:29


Гуру
******

Группа: Разработчики
Сообщений: 1 327
Регистрация: 20.7.2006
Из: Г. Омск
Пользователь №: 92 049
Модель телефона: C380 и Talkabout
Прошивка: разные

Рейтинг: 510



Вот мой первый опыт - Ramdld для C380, который по идее должен ждать нажатия любой клавиши и переходит в бутлоадер. Предупреждаю, не проверял, ибо некогда. Есть желание - можете проверить, загрузка по 0x03FD0000, запуск с 0x03FD0010, как обычно.
А что надо задать компилятору, чтобы сборщик разрешал из Thumb-функций вызывать ARM-функции?

Добавлено позже (23.4.2008, 22:35):
Компиляция командой make (она должна быть установлена, например, в составе Delphi или Borland C++ Builder), компилятор ARM должен быть в PATH.
Прикрепленный файл ramdld.rar   ( 2.62 килобайт ) Кол-во скачиваний: 106
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vilko
сообщение 23.4.2008, 16:41


Мотокодер
******

Группа: Легенды MotoFan.Ru
Сообщений: 1 331
Регистрация: 23.6.2003
Из: Москва
Пользователь №: 71
Модель телефона: E398+, Е1000, ...

Рейтинг: 1116



motoprogger,
опция /interwork компилеру
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
ADS и дуалбут, armcc.exe, tcc.exe, fromelf.exe · Ломаем и строим! · Forum
 

Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 28.7.2025, 7:03

Форум живёт: