Как указать архитектуру для sde-objcopy? - PullRequest
1 голос
/ 20 сентября 2011

Мне нужно преобразовать изображение в объектный файл (.o), используя sde-objcopy, тогда я могу использовать это изображение в нашей системе no-os. Я протестировал команду objcopy, она хорошо работает на моем ПК (Fedora 12). Например, команда ниже преобразует test.jpg в test.o.

objcopy -I binary -O elf32-i386 -B i386 ../stdy/test.jpg test.o

Вот мои вопросы:

A . У sde-objcopy нет опции "-B" для указания архитектуры, но если я не укажу архитектуру, она выдаст предупреждение, подобное этому:

$ sde-objcopy -I binary -O elf32-little test.jpg test.o

sde-objcopy: Предупреждение. Выходной файл не может представлять архитектуру НЕИЗВЕСТНО!

Как исправить это предупреждение?

B . Кажется, что objcopy использует имя файла для генерации символов в объектном файле. Если я использую полный путь (например, /home/owner/stdy/test.jpg) в качестве параметра objcopy, он генерирует длинные именованные символы. Есть ли какой-нибудь элегантный способ исправить эту проблему?

$ objcopy -I binary -O elf32-i386 -B i386 ../stdy/test.jpg test.o

$ nm test.o

00000083 D _binary____stdy_test_jpg_end

00000083 A _binary____stdy_test_jpg_size

00000000 D _binary____stdy_test_jpg_start

$ objcopy -I binary -O elf32-i386 -B i386 test.jpg test.o

$ nm test.o
00000032 D _binary_test_jpg_end

00000032 A _binary_test_jpg_size

00000000 D _binary_test_jpg_start

1 Ответ

0 голосов
/ 30 августа 2012

Вы можете использовать что-то вроде:

# data.s
.section ".rodata"
.globl font_data_start, font_data_end
font_data_start:
.incbin "Zitz-Regular.ttf"
font_data_end:
.size font_data_start, font_data_end - font_data_start

и затем получить доступ к материалам в вашей программе:

/* prog.c */
extern const char font_data_start[], font_data_end[];
void function() {
    fwrite(font_data_start, font_data_end - font_data_start, 1, stdout);
}
...