نمایش نتایج 1 تا 7 از 7

نام تاپیک: مشکل با کرنل

  1. #1
    کاربر تازه وارد آواتار tanzadeh7
    تاریخ عضویت
    اردیبهشت 1393
    محل زندگی
    بوشهر
    پست
    98

    Exclamation مشکل با کرنل

    سلام من یک کرنل Hello world در C نوشتم که در گراب ارور can't execute file رو میده

    اینم سورس کرنل

    MyOS.zip

  2. #2

    نقل قول: مشکل با کرنل

    دوست عزیز، اگر واقعا دنبال جواب واقعی (ونه کسانی که دو خط کرنل زدن فک میکنن خدای کرنل و ... هستن) بگیری و زبانت خوبه، برو OSDev و امثال اون :)

  3. #3
    کاربر تازه وارد آواتار tanzadeh7
    تاریخ عضویت
    اردیبهشت 1393
    محل زندگی
    بوشهر
    پست
    98

    نقل قول: مشکل با کرنل

    مشکل حل شد یه سوال دیگه هم برام پیش اومده اونم اینه که چجوری از کیبورد ورودی بگیرم آیا میتونم از توابع gets و scanf استفاده کنم
    آخرین ویرایش به وسیله tanzadeh7 : پنج شنبه 06 شهریور 1393 در 16:54 عصر

  4. #4

    نقل قول: مشکل با کرنل

    آیا میتونم از توابع gets و scanf استفاده کنم
    سلام
    نه نمی تونید باید خودتون این توابع رو بنویسید. البته زمان زیادی نمی بره و زیاد پیچیده نیستن.

  5. #5
    کاربر تازه وارد آواتار tanzadeh7
    تاریخ عضویت
    اردیبهشت 1393
    محل زندگی
    بوشهر
    پست
    98

    نقل قول: مشکل با کرنل

    جحوری باید این توابع رو بنویسم من وبسایت زیر رو هم مطالع کردم ولی هنوز نفهمیم میشه سورس بزارید.

    http://wiki.osdev.org/PS2_Keyboard

  6. #6
    کاربر دائمی آواتار yassersajjadi
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    مشهد
    پست
    104

    نقل قول: مشکل با کرنل



    typedef unsigned int uint;
    typedef unsigned short ushort;
    typedef unsigned char uchar;

    static inline uchar
    inb(ushort port)
    {
    uchar data;

    asm volatile("in %1,%0" : "=a" (data) : "d" (port));
    return data;
    }

    static inline void
    outb(ushort port, uchar data)
    {
    asm volatile("out %0,%1" : : "a" (data), "d" (port));
    }

    static inline void
    stosb(void *addr, int data, int cnt)
    {
    asm volatile("cld; rep stosb" :
    "=D" (addr), "=c" (cnt) :
    "0" (addr), "1" (cnt), "a" (data) :
    "memory", "cc");
    }

    static inline void
    stosl(void *addr, int data, int cnt)
    {
    asm volatile("cld; rep stosl" :
    "=D" (addr), "=c" (cnt) :
    "0" (addr), "1" (cnt), "a" (data) :
    "memory", "cc");
    }

    void*
    memset(void *dst, int c, uint n)
    {
    if ((int)dst%4 == 0 && n%4 == 0){
    c &= 0xFF;
    stosl(dst, (c<<24)|(c<<16)|(c<<8)|c, n/4);
    } else
    stosb(dst, c, n);
    return dst;
    }

    void*
    memmove(void *dst, const void *src, uint n)
    {
    const char *s;
    char *d;

    s = src;
    d = dst;
    if(s < d && s + n > d){
    s += n;
    d += n;
    while(n-- > 0)
    *--d = *--s;
    } else
    while(n-- > 0)
    *d++ = *s++;

    return dst;
    }





    #define KBSTATP 0x64 // kbd controller status port(I)
    #define KBS_DIB 0x01 // kbd data in buffer
    #define KBDATAP 0x60 // kbd data port(I)

    #define NO 0

    #define SHIFT (1<<0)
    #define CTL (1<<1)
    #define ALT (1<<2)

    #define CAPSLOCK (1<<3)
    #define NUMLOCK (1<<4)
    #define SCROLLLOCK (1<<5)

    #define E0ESC (1<<6)

    // Special keycodes
    #define KEY_HOME 0xE0
    #define KEY_END 0xE1
    #define KEY_UP 0xE2
    #define KEY_DN 0xE3
    #define KEY_LF 0xE4
    #define KEY_RT 0xE5
    #define KEY_PGUP 0xE6
    #define KEY_PGDN 0xE7
    #define KEY_INS 0xE8
    #define KEY_DEL 0xE9

    // C('A') == Control-A
    #define C(x) (x - '@')

    static uchar shiftcode[256] =
    {
    [0x1D] CTL,
    [0x2A] SHIFT,
    [0x36] SHIFT,
    [0x38] ALT,
    [0x9D] CTL,
    [0xB8] ALT
    };

    static uchar togglecode[256] =
    {
    [0x3A] CAPSLOCK,
    [0x45] NUMLOCK,
    [0x46] SCROLLLOCK
    };

    static uchar normalmap[256] =
    {
    NO, 0x1B, '1', '2', '3', '4', '5', '6', // 0x00
    '7', '8', '9', '0', '-', '=', '\b', '\t',
    'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', // 0x10
    'o', 'p', '[', ']', '\n', NO, 'a', 's',
    'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', // 0x20
    '\'', '`', NO, '\\', 'z', 'x', 'c', 'v',
    'b', 'n', 'm', ',', '.', '/', NO, '*', // 0x30
    NO, ' ', NO, NO, NO, NO, NO, NO,
    NO, NO, NO, NO, NO, NO, NO, '7', // 0x40
    '8', '9', '-', '4', '5', '6', '+', '1',
    '2', '3', '0', '.', NO, NO, NO, NO, // 0x50
    [0x9C] '\n', // KP_Enter
    [0xB5] '/', // KP_Div
    [0xC8] KEY_UP, [0xD0] KEY_DN,
    [0xC9] KEY_PGUP, [0xD1] KEY_PGDN,
    [0xCB] KEY_LF, [0xCD] KEY_RT,
    [0x97] KEY_HOME, [0xCF] KEY_END,
    [0xD2] KEY_INS, [0xD3] KEY_DEL
    };

    static uchar shiftmap[256] =
    {
    NO, 033, '!', '@', '#', '$', '%', '^', // 0x00
    '&', '*', '(', ')', '_', '+', '\b', '\t',
    'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', // 0x10
    'O', 'P', '{', '}', '\n', NO, 'A', 'S',
    'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', // 0x20
    '"', '~', NO, '|', 'Z', 'X', 'C', 'V',
    'B', 'N', 'M', '<', '>', '?', NO, '*', // 0x30
    NO, ' ', NO, NO, NO, NO, NO, NO,
    NO, NO, NO, NO, NO, NO, NO, '7', // 0x40
    '8', '9', '-', '4', '5', '6', '+', '1',
    '2', '3', '0', '.', NO, NO, NO, NO, // 0x50
    [0x9C] '\n', // KP_Enter
    [0xB5] '/', // KP_Div
    [0xC8] KEY_UP, [0xD0] KEY_DN,
    [0xC9] KEY_PGUP, [0xD1] KEY_PGDN,
    [0xCB] KEY_LF, [0xCD] KEY_RT,
    [0x97] KEY_HOME, [0xCF] KEY_END,
    [0xD2] KEY_INS, [0xD3] KEY_DEL
    };

    static uchar ctlmap[256] =
    {
    NO, NO, NO, NO, NO, NO, NO, NO,
    NO, NO, NO, NO, NO, NO, NO, NO,
    C('Q'), C('W'), C('E'), C('R'), C('T'), C('Y'), C('U'), C('I'),
    C('O'), C('P'), NO, NO, '\r', NO, C('A'), C('S'),
    C('D'), C('F'), C('G'), C('H'), C('J'), C('K'), C('L'), NO,
    NO, NO, NO, C('\\'), C('Z'), C('X'), C('C'), C('V'),
    C('B'), C('N'), C('M'), NO, NO, C('/'), NO, NO,
    [0x9C] '\r', // KP_Enter
    [0xB5] C('/'), // KP_Div
    [0xC8] KEY_UP, [0xD0] KEY_DN,
    [0xC9] KEY_PGUP, [0xD1] KEY_PGDN,
    [0xCB] KEY_LF, [0xCD] KEY_RT,
    [0x97] KEY_HOME, [0xCF] KEY_END,
    [0xD2] KEY_INS, [0xD3] KEY_DEL
    };





    int
    getc(void)
    {
    static uint shift;
    static uchar *charcode[4] = {
    normalmap, shiftmap, ctlmap, ctlmap
    };
    uint st, data, c;

    st = inb(KBSTATP);
    if((st & KBS_DIB) == 0)
    return -1;
    data = inb(KBDATAP);

    if(data == 0xE0){
    shift |= E0ESC;
    return 0;
    } else if(data & 0x80){
    // Key released
    data = (shift & E0ESC ? data : data & 0x7F);
    shift &= ~(shiftcode[data] | E0ESC);
    return 0;
    } else if(shift & E0ESC){
    // Last character was an E0 escape; or with 0x80
    data |= 0x80;
    shift &= ~E0ESC;
    }

    shift |= shiftcode[data];
    shift ^= togglecode[data];
    c = charcode[shift & (CTL | SHIFT)][data];
    if(shift & CAPSLOCK){
    if('a' <= c && c <= 'z')
    c += 'A' - 'a';
    else if('A' <= c && c <= 'Z')
    c += 'a' - 'A';
    }
    return c;
    }









    #define BACKSPACE 0x100
    #define CRTPORT 0x3d4
    static ushort *crt = (ushort*)P2V(0xb8000); // CGA memory

    static void
    cgaputc(int c)
    {
    int pos;

    // Cursor position: col + 80*row.
    outb(CRTPORT, 14);
    pos = inb(CRTPORT+1) << 8;
    outb(CRTPORT, 15);
    pos |= inb(CRTPORT+1);

    if(c == '\n')
    pos += 80 - pos%80;
    else if(c == BACKSPACE){
    if(pos > 0) --pos;
    } else
    crt[pos++] = (c&0xff) | 0x0700; // black on white

    if((pos/80) >= 24){ // Scroll up.
    memmove(crt, crt+80, sizeof(crt[0])*23*80);
    pos -= 80;
    memset(crt+pos, 0, sizeof(crt[0])*(24*80 - pos));
    }

    outb(CRTPORT, 14);
    outb(CRTPORT+1, pos>>8);
    outb(CRTPORT, 15);
    outb(CRTPORT+1, pos);
    crt[pos] = ' ' | 0x0700;
    }



    حالا اینطوری استفاده کن


    int c;
    while((c = getc()) >= 0){
    cgaputc(c)
    }

  7. #7
    کاربر دائمی آواتار yassersajjadi
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    مشهد
    پست
    104

    نقل قول: مشکل با کرنل

    البته واسه استفاده از کیبورد باید idt داشته باشی و اینتراپت کیبرد رو در اون ثبت کرده باشی یکم بگردی اونم زیاد پیچیده نیست

تاپیک های مشابه

  1. حرفه ای: مشکل در لود کردن یک مادول به کرنل لینوکس
    نوشته شده توسط sheervin در بخش توسعه‌ی هسته‌ی سیستم عامل
    پاسخ: 1
    آخرین پست: سه شنبه 26 آذر 1392, 15:03 عصر
  2. مشکل در اجرای کرنل
    نوشته شده توسط yassersajjadi در بخش توسعه‌ی هسته‌ی سیستم عامل
    پاسخ: 6
    آخرین پست: شنبه 07 بهمن 1391, 21:31 عصر
  3. مشکل با کد سطح کرنل
    نوشته شده توسط r00tkit در بخش توسعه‌ی هسته‌ی سیستم عامل
    پاسخ: 10
    آخرین پست: یک شنبه 25 مهر 1389, 10:43 صبح
  4. سوال: مشکل نمایش رشته در کد کرنل من
    نوشته شده توسط behzad24be در بخش توسعه‌ی هسته‌ی سیستم عامل
    پاسخ: 0
    آخرین پست: چهارشنبه 09 مرداد 1387, 22:51 عصر
  5. مشکل با آپدیت کرنل جدید
    نوشته شده توسط tux-world در بخش توسعه‌ی لینوکس و نرم افزارهای آزاد
    پاسخ: 0
    آخرین پست: پنج شنبه 29 فروردین 1387, 10:40 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •