Klikaos เป็นระบบปฏิบัติการอดิเรกและการศึกษาที่เขียนใน C (และชิ้นส่วนเล็ก ๆ บางส่วนถูกเขียนขึ้นในแอสเซมบลี)
คุณสามารถสร้าง klikaos โดยใช้สภาพแวดล้อม dev vagrant หรือบนเครื่องในท้องถิ่นของคุณ
Vagrantfile มีการพึ่งพาทั้งหมดที่จำเป็นในการสร้าง klikaos แล้ว หากต้องการใช้ Vagrant เป็นสภาพแวดล้อมการพัฒนาตามการพึ่งพาการพึ่งพาบนเครื่องโฮสต์ของคุณ:
brew install qemu )วิ่งต่อไปนี้:
vagrant up
vagrant ssh
cd /vagrant
make all run
สิ่งนี้จะสร้างภาพ ISO ที่สามารถบู๊ตได้และรูปภาพ HD ในโฟลเดอร์ images ในการเรียกใช้คุณจะต้องใช้ QEMU บนเครื่องในพื้นที่ของคุณ คุณสามารถเรียกใช้ (จากเครื่องในพื้นที่ของคุณ):
qemu-system-x86_64 -cdrom images/klika-os-x86_64.iso -m 128 -drive file=images/disk.img,format=raw,index=0,media=disk -boot order=d -serial stdio
วิธีที่มีประสิทธิภาพที่สุดในการสร้างและเรียกใช้ Klikaos คือการติดตั้งคอมไพเลอร์ GCC Cross สำหรับแพลตฟอร์มของคุณ เครื่องมือ GCC ต้องตั้งชื่อโดยใช้คำนำหน้า x86_64-elf เช่น:
x86_64-elf-gcc
x86_64-elf-ld
x86_64-elf-as
x86_64-elf-nm
x86_64-elf-objdump
x86_64-elf-objcopy
...
การพึ่งพา:
วิธีที่ง่ายที่สุดคือการมองเข้าไปใน Vagrantfile และดูว่าต้องติดตั้งอะไร
เพื่อสร้างและทำงานด้วย QEMU:
make all run
Repostiory มีภาพ ISO และ HD ที่สร้างไว้ล่วงหน้าแล้ว วิธีที่เร็วที่สุดในการรันมันจะใช้ QEMU:
qemu-system-x86_64 -cdrom images/klikaos-x86_64.iso -m 128 -drive file=images/disk.img,format=raw,index=0,media=disk -boot order=d -serial stdio
แปลงภาพ QEMU ดิบเป็นภาพ. VDI:
qemu-img convert -O vdi images/disk.img images/disk.vdi
Mount Disk.vdi (Master) และ Klikaos-x86_64.iso (Slave) เครื่องเริ่มต้น
วิธีที่ดีที่สุดในการสร้างแอพใหม่คือการคัดลอก simple_win จากโฟลเดอร์ apps ตัวอย่างสำหรับแอพ GUI:
// See ./apps/simple_win
#include <klikaos.h>
#include <windows.h>
#include <stdlib.h>
#define MSG_USER_WIN (WINDOW_USER_MESSAGE + 1)
#define MSG_USER_BTN1 (WINDOW_USER_MESSAGE + 2)
#define MSG_USER_BTN2 (WINDOW_USER_MESSAGE + 3)
#define MSG_USER_LABEL (WINDOW_USER_MESSAGE + 4)
message_t msg ;
window_t * window ;
window_t * label ;
long counter = 0 ;
void increment_counter ( int add ) {
char buff [ 123 ];
counter += add ;
sprintf ( buff , "Count: %i" , counter );
label_set_text ( label , buff );
}
int main () {
int layout_y = WINDOW_BAR_HEIGHT + 10 ;
window = window_create ( 100 , 100 , 300 , 300 , "Simple Window" , MSG_USER_WIN , WINDOW_ATTR_NONE , WINDOW_FRAME_DEFAULT );
button_create ( window , 10 , layout_y , 100 , 30 , "Click me +" , MSG_USER_BTN1 );
button_create ( window , 120 , layout_y , 100 , 30 , "Click me -" , MSG_USER_BTN2 );
label = label_create ( window , 10 , layout_y + 40 , 200 , 20 , "Number of clicks" , MSG_USER_LABEL );
while ( window_get_message ( window , & msg )) {
switch ( msg . message ) {
case MSG_USER_BTN1 :
increment_counter ( 1 );
break ;
case MSG_USER_BTN2 :
increment_counter ( -1 );
break ;
}
window_dispatch ( window , & msg );
}
return 0 ;
}/apps โฟลเดอร์
ขอบคุณไปที่คนที่ยอดเยี่ยมเหล่านี้ (คีย์อีโมจิ):
ซามีร์ | Ensar Sarajčić | Almir Hamza |
โครงการนี้เป็นไปตามข้อกำหนดทั้งหมดของผู้เข้าร่วม การมีส่วนร่วมทุกชนิดยินดีต้อนรับ!