> Daca programul tau e ceva special (eg. boot-loader, os-kernel) atunci poti
> sa folosesti ceva de genul:
> objcopy -O binary -j .text -j .data -j .rodata <program> <program_raw>
> Atentie, pentru asta trebuie sa-l compilezi static si sa ai de grija ca
> toate relocarile sa fie eliminate (cam greu de realizat).
Eu am facut ceva la stilul urmator, mai demult. In mod particular,
comanda de mai sus care extrage sectiunile relevante din ELF probabil
e mai buna decat la mine.
In loc de "ld -Ttext 0" poti sa pui ce adresa de start vrei tu.
O alta chestie cool de care probabil o sa ai nevoie e ca in fisierul
obiect pe care ti-l scoate ld-ul ai definite simbolurile:
__bss_start
_edata
_end
_etext
----
VERSION = 0
PATCHLEVEL = 1
SUBLEVEL = 1
SUBDIRS = init kernel lib drivers/char drivers/net drivers/pci fs mm tasks net
LIBDIR = -Llib -Ldrivers/char -Ldrivers/net \
-Ldrivers/pci -Lfs -Lmm -Ltasks -Lnet
LIBS = -llib -lchar -lnetdriver -lpci -lfs -lmm -ltasks -lnet
CC= gcc -Wall -O2 -fomit-frame-pointer -fno-builtin
CPP= gcc -E
AS= as
AS86= as86 -0 -a
AS386= as86 -3
LD= ld
LD86= ld86 -0
CFLAGS = -I../include
.EXPORT_ALL_VARIABLES:
KERNEL_OBJS = kernel/head.o kernel/main.o kernel/traps.o kernel/irq.o \
kernel/timer.o kernel/fault.o kernel/sched.o
all:
@echo "Net386 v$(VERSION).$(PATCHLEVEL).$(SUBLEVEL) #`cat .compile`"
@if [ ! -f .compile ]; then \
echo 1 > .compile; \
else \
expr 0`cat .compile` + 1 > .compile; \
fi
@for i in $(SUBDIRS); do\
(make -C $$i ) ;\
done
ld $(LIBDIR) -Ttext 0 $(KERNEL_OBJS) $(LIBS) -o init/kernel.tmp
objcopy -O binary -R .note -R .comment init/kernel.tmp init/kernel
mv init/kernel.tmp init/net386obj
bdisk:
cd init && make bdisk
clean:
@for i in $(SUBDIRS); do \
(make -C $$i $@ ) ; \
done
newcompile:
@echo 1 >.compile
---
Send e-mail to '[EMAIL PROTECTED]' with 'unsubscribe rlug' to
unsubscribe from this list.