Deodeokos
This is an OS project written based on the principle of 64 -bit multicore OS and rescue books.
It is easy to record, so there may be frequent changes and errors!
Environment and construction
- Apple M1 MacBook Air
- Docker (Ubuntu 18.04 / AMD64)
- Since GCC, qemu ... is an OS written in the x86_64 environment, if you are M1, you need to add the Docker Platform option.
docker build --platform linux/amd64 -t os:1.0 .
docker-compose up -d
docker exec -it os bash
./build.sh && ./qemu.sh
Reference
- The QEMU environment introduced in the '64 -bit multi -core OS principle and rescue 'book is 0.10.4, so if you use the latest QEMU, the OS will not come up properly. I use the Qemu 2 version and I need to modify the boot loader to solve it. Change the 80 -line
cmp al, 19 of Bootloader.asm to cmp al, 37 to work.
Debugging
gdb
If you proceed with debugging through GDB, you will need two shells.
docker exec -it os bash
./build.sh && ./qemu_debug.sh
gdb
target remote:1234
file 02.Kernel64/Temp/Kernel64.elf
Debugging progress after setting breakpoint
vscode
First, install the Native Debug Extension.
If you proceed with debugging in the VSCODE environment, follow the following process.
-
.vscode/task.json qemu build execution - Run Qemu Debug in
.vscode/task.json - Breakpoint
- Debugging with F5
You can customize the command by modifying the contents of .vscode/launch.json and .vscode/task.json .
Change
- 210125: SPINLOCK sync implementation
- 211220: Interrupt dispersion processing in symmetrical I/O mode
- 211116: Multi -core implementation 2 (Core activation)
- 211028: Multicore implementation 1 (MP table implementation)
- 211020: Serial port device driver implementation
- 211017: File System Cache and Rampdic Implementation
- 211002: File I / O implementation
- 210927: Debugging environment configuration
- 210902: Simple file system implementation
- 210830: Added hard disk driver
- 210824: Implementation of dynamic memory allocation
- 210813: Multisreading implementation
- 210809: Race Condition Solution through Mutex
- 210807: Multi -level queue scheduler implementation
- 210802: Round Robin Scheduler Implementation
- 210725: Simple multitasking implementation
- 210723: Add a timer device
- 210720: Console shell implementation
- 210719: Implementation of interrupt using PIC controller
- 210717: Add basic keyboard interrupt (POLLING)
- 210716: Added keyboard driver
- 210712: Converted from protection mode to IA-32E mode
- 210708: Create the first kernel
- 210706: Transition from Real Mode to Protection Mode
- 210701: Add boot loader