= Kernel API 4 - Porting(ARM) = -- [김도집] [[DateTime(2005-09-28T08:37:04)]] * [wiki:KernelApi Kernel API 1 - Core(1/2)] * [wiki:KernelApi1 Kernel API 1 - Core(2/2)] * [wiki:KernelApi2 Kernel API 2 - Extension] * [wiki:KernelApi3 Kernel API 3 - Linux Driver Model] * [wiki:KernelApi4 Kernel API 4 - Porting(ARM)] [[TableOfContents]] == Co-processor == === Instruction === ARM은 Core 외에도 Co-processor로 그 기능을 확장 가능하도록 하고 있다. 일반적으로 알고 있는 MMU 및 Cache 관련 Co-processor의 CP15가 바로 그것이다. 이러한 Co-processor를 위하여 ARM에서는 특별한 intstruction을 정의하고 있다. 그 포맷은 다음과 같다. {{{ MCR/MRC{cond} P15, opcode_1, Rd, CRn, CRm, opcode_2 }}} == 인터럽트 == === struct irqchip === {{{#!vim c struct irq { void (*ack)(unsigned int); void (*mask)(unsigned int); void (*unmask)(unsigned int); int (*retrigger)(unsigned int); int (*type)(unsigned int, unsigned int); int (*wake)(unsigned int, unsigned int); #ifdef CONFIG_SMP void (*set_cpu)(struct irqdesc *desc, unsigned int irq, unsigned int cpu); #endif }}} === set_irq_chip === 함수 원형은 다음과 같다. {{{#!vim c void set_irq_chip(unsigned int irq, struct irqchip *chip); }}} === set_irq_handler === 함수 원형 {{{#!vim c void set_irq_handler(unsigned int irq, irq_handler_t handler); }}} irq_handler_t는 에 다음과 같이 선언되어 있다. {{{#!vim c typedef void (*irq_handler_t)(unsigned int, struct irqdesc *, struct pt_regs *); }}} 유사 함수: set_irq_chained_handler 커널 소스내에서 본 함수는 __set_irq_handler(irq, handler, 0)을 호출한다. === set_irq_chained_handler === 함수 원형은 다음과 같다. {{{#!vim c void set_irq_chained_handler(unsigned int irq, irq_handler_t handler); }}} irq_handler_t는 에 다음과 같이 선언되어 있다. {{{#!vim c typedef void (*irq_handler_t)(unsigned int, struct irqdesc *, struct pt_regs *); }}} 유사 함수: set_irq_handler 커널 소스 내에서 본 함수는 __set_irq_handler(irq, handler, 1)을 호출한다. === set_irq_flags === 함수 원형은 다음과 같다. {{{#!vim c void set_irq_flags(unsigned int irq, unsigned int iflags); }}}