BLOG ARTICLE os/LINUX | 35 ARTICLE FOUND

  1. 2009.11.18 linux device driver
  2. 2009.11.18 linux device driver 1
  3. 2009.09.08 TypeError: unsubscriptable object
  4. 2008.11.18 프로그램 설치
  5. 2008.11.17 Consider using PASV 2

linux device driver

os/LINUX 2009. 11. 18. 04:22
리눅스에서 디바이스 드라이버 모듈을 동적으로 적재할 수 있기 때문에, 간단한 디바이스 드라이버 예제를 만들어 본다. 다음은 로드와 언로드가 가능한 가장 기본적인 뼈대만을 가지고 있는 적재 가능한 디바이스 드라이버 모듈이다.

-------------------- test.c --------------------
#include <linux/module.h>

static int test_init(void)
{
        printk("test module is loaded \n");

        return 0;
}

static void test_exit(void)
{
        printk("test module is unloaded \n");
}

module_init(test_init);
module_exit(test_exit);

MODULE_LICENSE("GPL");

-------------------- Makefile --------------------
obj-m := test.o

KDIR := /lib/modules/$(shell uname -r)/build/

PWD := $(shell pwd)

default:
        $(MAKE) -C $(KDIR) M=$(PWD) modules

clean:
        rm -rf .*.cmd
        rm -rf .tmp*
        rm -rf *odule*
        rm -rf *.ko
        rm -rf *.mod.*
        rm -rf *.o

$make 를 하게 되면 ko 확장자를 가지는 모듈이 생성된다. 생성된 모듈을 로드하려면 $insmod test.ko 를 실행한다. 모듈을 로드한 뒤에는 아무런 메시지도 뜨지 않는다. 하지만 $dmesg를 하게 되면 test.c에서 모듈로드시 커널메시지로 출력하게되는 test module is loaded. 이라는 메시지를 볼 수 있다. test module is loaded.라는 메시지를 보았다면 정상적으로 모듈이 로드가 된 것이다. 뿐만 아니라, $lsmod를 하게 되면 현재 로드된 모듈이 리스트로 출력되며, test 모듈도 확인할 수 있다. 마지막으로 로드된 모듈을 제거하는 명령어인 $rmmod test.ko를 실행하면 test 모듈은 해제되며, $dmesg에서 모듈이 제거되었다는 메시지를 확인할 수 있다.
AND

linux device driver 1

os/LINUX 2009. 11. 18. 03:21
디바이스 드라이버의 가장 기본적인 목적 중의 하나는 사용자의 프로그램을 커널의 중요한 데이터 구조나 하드웨어 장치에 직접 접근하지 못하도록 따로 분리시키는 것이다. 가령 사용자 프로그램에서 하드 디스크에 데이터를 쓰려고 할 때 하드 디스크의 섹터 크기가 512바이트이니 1024바이트인지 등을 신경쓰지 않아도 된다는 것이다. 사용자는 단순히 파일을 열어서 쓰기 명령을 내리면 된다. 그러면 디바이스 드라이버가 자세한 세부 내용을 모두 처리하고, 사용자에게는 복잡함과 하드웨어 디바이스를 프로그래밍하는 어려운 과정을 숨긴다. 즉, 유명한 UNIX/LINUX 규약에 따라서 모든 것을 하나의 파일로 다룰 수 있는 기반을 제공하는 것이다.

디바이스 드라이버(device driver), 로드 가능한 커널 모듈(LKM:Loadable Kernel Module) 그리고 모듈이라는 각각의 용어들이 모두 '로드 가능한 커널 디바이스 드라이버 모듈'을 가리킨다.

리눅스에서 디바이스 드라이버는 넓은 의미에서 두 가지로 나눌 수 있다. 캐릭터 디바이스와 블록 디바이스가 그것이다. 캐릭터 디바이스는 순차적인 데이터를 직렬 스트림 형식으로 주고 받는 장치라고 볼 수 있다. 캐릭터 디바이스의 예로는 시리얼 포트나 키보드 등을 들 수 있다. 블록 디바이스는 데이터를 블록 단위로 읽거나 쓸 수 있고, 해당 장치의 임의의 위치에 접근할 수 있는 능력을 가지는 장치로 특징지을 수 있다. 블록 디바이스의 예로는 하드 드라이브나 플로피 드라이브를 들 수 있다.
AND


# yum install vsftpd

실행했는데 에러가 난다.

네이뇽은 yum의 에러라고 한다.

해결책은

# yum clean all

위의 명령을 실행하고 나면.. 정상적으로 동작한다
AND

프로그램 설치

os/LINUX 2008. 11. 18. 11:36
Fedora 는
yum install 패키지명

Debian, Ubuntu 는
apt-get install 패키지명
AND

Consider using PASV

os/LINUX 2008. 11. 17. 21:28
colinux를 사용하는 도중 커널 컴파일을 하고 싶은 마음에
ftp.kernel.org에 접속을 해서 커널을 다운 받으려 했다.
기본 ftp 프로그램으로 접속을 하니 정상적으로 접속은 되었으나,
ls 명령이 먹지 않는다.
Consider using PASV 란 메시지와 함께..
패시브 모드로 접속이 되어 있어서 인 것 같아
자세한 이유는 모르고 네이버에 검색해보니
패시브 모드와 데이터 모드가 있다는 걸 알았는데.
하지만 어떻게 다운을 받는지 나와있는 곳은 없다.
...... 젝힐..
영어는 못하지만 가볍게..
# man ftp를 해보니 훗..
간단하게 해결되었다.
-p란 옵션이 Use passive mode for data transfers 란다..+_+
# ftp -p ftp.kernel.org
하니 ls도 잘 먹고 get도 잘 된다~~
어려운 리눅스~~ 성공성공~~
AND