Create a program generating more complex ELF file

This commit is contained in:
Baptiste Wicht 2014-01-06 18:26:21 +01:00
parent 868445e2e9
commit dbbe1dfcd5
3 changed files with 58 additions and 1 deletions

View File

@ -14,7 +14,10 @@ bootloader/stage2.bin: force_look
programs/one/a.out: force_look programs/one/a.out: force_look
cd programs/one; ${MAKE} a.out cd programs/one; ${MAKE} a.out
thor.flp: bootloader/stage1.bin bootloader/stage2.bin kernel/kernel.bin programs/one/a.out programs/hello/a.out: force_look
cd programs/hello; ${MAKE} a.out
thor.flp: bootloader/stage1.bin bootloader/stage2.bin kernel/kernel.bin programs/one/a.out programs/hello/a.out
dd if=bootloader/stage1.bin of=hdd.img conv=notrunc dd if=bootloader/stage1.bin of=hdd.img conv=notrunc
dd if=bootloader/stage2.bin of=hdd.img seek=1 conv=notrunc dd if=bootloader/stage2.bin of=hdd.img seek=1 conv=notrunc
sudo /sbin/losetup -o1048576 /dev/loop0 hdd.img sudo /sbin/losetup -o1048576 /dev/loop0 hdd.img
@ -22,6 +25,7 @@ thor.flp: bootloader/stage1.bin bootloader/stage2.bin kernel/kernel.bin programs
sudo /bin/mount -t vfat /dev/loop0 /mnt/fake_cdrom/ sudo /bin/mount -t vfat /dev/loop0 /mnt/fake_cdrom/
sudo /bin/cp kernel/kernel.bin /mnt/fake_cdrom/ sudo /bin/cp kernel/kernel.bin /mnt/fake_cdrom/
sudo /bin/cp programs/one/a.out /mnt/fake_cdrom/one sudo /bin/cp programs/one/a.out /mnt/fake_cdrom/one
sudo /bin/cp programs/hello/a.out /mnt/fake_cdrom/hello
sleep 0.1 sleep 0.1
sudo /bin/umount /mnt/fake_cdrom/ sudo /bin/umount /mnt/fake_cdrom/
sudo /sbin/losetup -d /dev/loop0 sudo /sbin/losetup -d /dev/loop0

15
programs/hello/Makefile Normal file
View File

@ -0,0 +1,15 @@
.PHONY: default clean
default: a.out
include ../../cpp.mk
%.cpp.o: src/%.cpp
$(CC) $(CPP_FLAGS_64) $(WARNING_FLAGS) -c $< -o $@
a.out: main.cpp.o
$(CC) $(COMMON_LINK_FLAGS) -e main $(CPP_FLAGS_64) -o a.out main.cpp.o
clean:
rm *.cpp.o
rm -rf a.out

View File

@ -0,0 +1,38 @@
//=======================================================================
// Copyright Baptiste Wicht 2013.
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//=======================================================================
typedef unsigned int uint8_t __attribute__((__mode__(__QI__)));
typedef unsigned int uint16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int uint32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int uint64_t __attribute__ ((__mode__ (__DI__)));
const char* source = "Hello world";
uint8_t make_color(uint8_t fg, uint8_t bg){
return fg | bg << 4;
}
uint16_t make_vga_entry(char c, uint8_t color){
uint16_t c16 = c;
uint16_t color16 = color;
return c16 | color16 << 8;
}
int main(){
uint16_t* vga_buffer = reinterpret_cast<uint16_t*>(0x0B8000);
auto s = source;
uint64_t i = 0;
while(*s){
vga_buffer[10 * 80 + 20 + i * 2] = make_vga_entry(*s, make_color(15, 0));
++s;
++i;
}
return 0;
}