2.6 KiB
Writing software for PepperOS
Why would you want to do that?
Honestly I have no idea. Maybe you have too much free time.
Keep in mind that the Pepper kernel is a personal project and it's full of bugs, inconsistencies, weird ways of doing things (and I don't care because it's my toy).
Now if you still want to write something for this OS, thank you. Follow along.
1. Write the source code
PepperOS is able to run programs written in x86 assembly, and C programs.
x86 Assembly
Start your assembly file with the bits 64 instruction, to emit 64-bit code.
You can add sections .text, .data, .bss as you need.
The three things to take in consideration here are:
- PepperOS does not use the
syscallinstruction, instead it uses the old-fashionedint 0x80to trigger a system call. - The entry point should be labelled as
_start. - At the end of the file, there should be an exit system call followed by a loop, like so:
.end:
mov rax, 0x3C
mov rdi, 0x0
int 0x80
.loop:
jmp .loop
For an example, look at the file pedicel.S.
C program
You will find relevant headers in the libc directory. They contain system call wrappers, utility functions, and more. See what's implemented there and what's not.
To invoke a system call you can use the functions defined in libc/syscall.h.
2. Add the Makefile rule and variable
Now that your code is complete, add a Makefile rule to user/Makefile with your program name. You can just copy-paste the rule that applies to you (either from an Assembly source or C source) and change the name of the files (.raw, .elf, etc...) in the rule.
For clarity, raw binaries have the .raw extension, and ELF ones have .elf.
You also now have to add the name of the executable to the USER_PROGRAMS variable at the top of the global Makefile.
Finally, do make user to compile your program.
3. Run your program
You can now boot up PepperOS, in a VM or on real hardware, and use the kernel's shell to list files in the filesystem (to see if your executable was properly added), and then, run it with the load command. Congratulations, you made a program for a random hobby OS!
4. (Optional) debugging
Use GDB with the make debug rule!
For your information, user programs are loaded at 0x400000. Can be good to know to set breakpoints.
5. (Optional) contribute!
If you like what you've done and you think it could be nice to add it to PepperOS, send it to me by e-mail: xamidev (at) riseup (dot) net. It may or may not be added in a future release... who knows?