Busan IT/로봇제어2015. 10. 16. 16:07

==================================Outline==================================== 

모듈 파라미터

장치 드라이버의 형식

----------------------------------------------------------------------------

//모듈을 위한 프로그래밍 시 코딩 파일의 이름을 'main'으로하면 에러가 난다.

 

 

모듈 파라미터

 

make up, down도 마저 작성한 후 모듈을 올리고 내려 본다.

 

//모듈 상태를 보는 명령어 ‘lsmod'

 

 

 

모듈 사용 시 인자를 선언하여 그 값을 바꿔줄 수 있다.

 

이를 사용하기 위해서는 아래의 매크로를 등록해야 한다.

 

module_param(name, type, perm);

name => 변수 이름type   => 변수 타입perm  => 퍼미션

 

int iNum과 문자열 “Hello"를 선언해주고 모듈 인자에 넣어 값을 변동한 뒤 출력해본다.

 

insmod smart.ko iNum=999

insmod smart.ko cpT="Hello"

 

//‘dmesg’로 출력할 수 있다..

 



[smart.c]

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

MODULE_LICENSE("GPL");

static int rp_init(void);
static void rp_exit(void);
module_init(rp_init);
module_exit(rp_exit);
int iNum = 100;
char * cpT = "Test Message";
module_param(iNum, int0);//charp = char *

static int rp_init(void)
{
  printk("Welcome to Smart World!\n");
  printk("[%d]\n", iNum);
  printk("[%s]\n", cpT);
  return 0;
}

static void rp_exit(void)
{
  printk("Farewell Dear\n");

  return;
}  

[makefile]

obj-m = smart.o

#KDIR = /lib/modules/$(shell uname -r)/build
KDIR = /usr/src/linux

PWD = $(shell pwd)

all:
  @clear
  $(MAKE) -C $(KDIR) M=$(PWD) modules
  @ls -al smart.ko

up:
  @clear
  @insmod smart.ko
  @echo ================== dmesg =================
  @dmesg | tail
  @echo ================== dmesg =================

down:
  @clear
  @rmmod smart
  @echo ================== dmesg =================
  @dmesg | tail
  @echo ================== dmesg =================

clean:
  @clear
  @rm -rf *.ko
  @rm -rf *.mod.*
  @rm -rf .*.cmd
  @rm -rf *.o
  @rm -rf modules.order
  @rm -rf Module.symvers
  @rm -rf .tmp_versions
  @ls -al
  @echo Clean :Done.

 

장치 드라이버의 형식

 

Unix방식을 물려받은 linux는 모든 장치들을 파일로 관리한다.

노란색 폴더가 장치를 의미한다.

 

장치 드라이버의 형식

 

장치 드라이버는 3개로 나눈다. 

 

c: c for character : 데이터 전송 단위 1byte(크기가 고정되어 있지 않다)

ex) 마우스, 키보드

 

b: b for block: 블록은 데이터 크기가 고정되어 있다. 데이터를 보낼 때 고정된 크기만큼 보낸다.

ex) 하드드라이브

 

n: n for network: ???

 

Q: 하드드라이브가 일정한 크기(블록으)로 조각나 있는 이유?

반응형
Posted by newind2000