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 هي تثبيت برنامج التحويل البرمجي Cross 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 RAW إلى .vdi صورة:
qemu-img convert -O vdi images/disk.img images/disk.vdi
Mount Disk.vdi (Master) و Klikaos-X86_64.iso (Slave). بدء الجهاز.
أفضل طريقة لإنشاء تطبيق جديد هي مجرد نسخ simple_win من مجلد apps . مثال على تطبيق واجهة المستخدم الرسومية:
// 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ć | المير حمزة |
يتبع هذا المشروع مواصفات جميع المساهمين. مساهمات من أي نوع ترحيب!