Linux 간단한 모듈 프로그램 맛보기Linux 간단한 모듈 프로그램 맛보기

Posted at 2010.12.09 00:53 | Posted in About Programing/06. Linux
크리에이티브 커먼즈 라이선스
Creative Commons License
OS : Ubuntu-10.10-desktop-i386
Linux kernel version : 2.6.35-22-generic

Ubuntu 나 Linux kernel Version에 따라 구조가 다를 수 도 있습니다.

1. Module Source



2. Makefile
 Option만 추가하면 gcc 명령으로 Compile 할수도 있지만, Compile 명령을 입력할 때 실수를 줄이고, 이후에도 계속 사용하기 위해서는 Makefile을 만들어 사용하는 것이 편리하다.


 rm -rf *o 와 같은 Makefile 실행 명령은 앞에 꼭 <TAB> 문자로 띄워야 한다. 공백 문자로 띄우면 Make는 해당 명령을 실행하지 않는다.

3. 실행 방법

위의 make 명령을 실행하면 test.ko 라는 Module file이 생성 된다.


이 Module file을 실행하려면 다음 명령을 사용해 Kernel에 적재해야 한다.


하지만 위 명령을 실행해도, 원하는 Message가 출력되지 않는다. 그러므로 실행된 Messge를 확인하기 위해서는 다음 명령을 실행해야 한다.


실행 결과, 정상적으로 Message가 출력된 것을 확인할 수 있다.


Module을 제거하고 싶을 땐 아래와 같이 하면 된다.


마찬가지로 dmesg를 이용하여 정상적으로 내려졌는지 확인해보자.


위와 같이 정상적으로 내려진 것을 확인 할수있다.
저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Linux System call 함수 만들기 (작성중)Linux System call 함수 만들기 (작성중)

Posted at 2010.11.25 03:59 | Posted in About Programing/06. Linux
크리에이티브 커먼즈 라이선스
Creative Commons License
OS : ubuntu-10.04.1-desktop-i386
Linux kernel version : 2.6.32.25

Ubuntu 나 Linux kernel Version에 따라 구조가 다를 수 도 있습니다.

1. 준비과정

(2) Package 설치
Kernel을 build하기 위해서는 다음의 Package들이 필요하다. 아래 명령어를 통해 Package를 Download 받아 설치한다.


(3) libncurses5-dev와 libqt3-mt-dev, grub2 Package 설치
  Ubuntu에서는 [시스템]-[관리]-[시넵틱꾸러미 관리자]에서 검색을 통해 매우 간단하게 설치 할 수 있다.





2. Kernel source download
(1) Kernel 최신 Version download


3. Kernel source 압축 풀기
(1)일단 Download 받은 File을 확인후 압축을 푼다.


(2) Linux directory로 Link를 건다.


4. System call 추가하기
(1)System call을 등록한다.
/usr/src/linux-source-2.6.32/arch/x86/include/asm/unistd_32.h 파일에서 내가 만들 함수를 추가한다.


다음에는 /usr/src/linux-source-2.6.32/arch/x86/kernel/syscall_table_32.s File에 System call 이름을 적어준다.
Syscall_tables_32.h 에 System call을 추가 함으로서 Linux에 System call을 추가 할 수 있다. 


(2) System call 처리 함수 구현
 다음 경로에 System call을 처리할 함수를 구현한다. 간단히 Message를 출력하는 Program을 작성한다.
/user/src/linux-2.6.32/kernel/



(3) Object 추가
 /usr/src/linux-2.6.32.25/kernel/Makefile 에 Object를 추가해준다.
Kernel compile을 실행하면 compiler는 Makerfile에 명시된 순으로 File들을 Compile하기 시작한다.



그리고 다음 경로에 작성한 System call 함수를 선언해준다.
/usr/src/linux-2.6.32.25/arch/x86/include/asm/syscalls.h


(4) System call을 이용할 Program을 작성한다 
 새로운 Linux version에 System call을 추가 하였으므로 그 System call을 호출할 Test program을 작성한다.
경로는 아무곳에나 해도 상관없다.


5. Kernel build하기 
(1) 새로운 Kernel을 만들 준비를 한다.
 Kernel을 설정하는데는 여러가지 방법이 있지만 menuconfig를 사용하여 설정 할 수 있다. 우선 /usr/src/linux Directory로 이동한 후 다음의 명령들을 실행한다.


 make xconfig 를 입력하면 다음과 같은 창이 뜬다.


빨간 줄 친 부분에 Check를 해주고, 저장 한 뒤 닫자.

(2) Kernel을 Build한다.
 드디어 지금까지 만들었던 Kernel을 Build한다. Ubuntu에서는 Kernel을 바로 Package file로 Build해 Image를 편리하게 Linux에 추가할 수 있다.



실행 하는 순간 대망의 Build가 시작된다. 몇시간은 족히 걸리니, 다른것 좀 하다 오자.
Build가 완료되면, Kernel module을 설치해야 한다.


설치가 완료되면 재부팅을 하자.

재부팅이 완료 되면, 4-(4)에서 만들었던, System call 함수를 호출하는 Source를 Compile일 하고 실행해보자.



실행을 해도 아무 반응이 없어서 허무할 수 도있다.

하지만 printk 를 이용하여 Message를 출력했기 때문에, Kernel에서 따로 Message를 확인 해 줘야 한다.


저작자 표시 비영리 변경 금지
신고
  1. svu3
    좋은 정보 정말 감사합니다.
    제 블로그에 하이퍼 링크했습니다. 제가 티스토리가 아니라서.......
    좋은 한 주 되십시오. ^^
  2. RootMan
    안녀하세요.. 이대로 똑같이 실행했으나 재부팅시 커널패닉이 발생하네요.

    Kernel panic - not syscing : VFS : Unable to mount root fs on unknown-block(0,0)

    ubuntu-10.04.4-desktop-i386 이 이미지를 설치하고 시작했습니다. 혹시 해결방법을 아시나요?
  3. prismatic
    관리자의 승인을 기다리고 있는 댓글입니다
  4. hk
    관리자의 승인을 기다리고 있는 댓글입니다
  5. 비밀댓글입니다

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Ubuntu 에서 root 계정으로 Login 하기Ubuntu 에서 root 계정으로 Login 하기

Posted at 2010.11.23 20:00 | Posted in About Programing/06. Linux
크리에이티브 커먼즈 라이선스
Creative Commons License
OS : ubuntu-10.04.1-desktop-i386
Linux Kernel : 2.6.32-24-generic

 원래 우분투 리눅스는 root (관리자 계정)로 로그인할 수 없습니다. 설치할 때 사용자 ID를 root 로 정하면 로그인이 아예

불가능하게 됩니다. 다음은 우분투에 root 계정과 암호를 만들어 주는 방법입니다.

프롬프트에서

sudo passwd root

라고 합니다. 주의! 위에서 "passwd"라는 문자열은 진짜 암호가 아니라 문자 그대로 입력해야 합니다.

만약 패스워드가 foo 라고 해서

sudo foo root

이렇게 하면 안됩니다. 정확히 sudo passwd root 이렇게 적어 주어야 합니다.

그러면 현재 암호를 먼저 묻습니다. 현재 로그인한 ID의 암호를 한번 입력해 주면 이제

Enter new UNIX password:

라고 나오며 root 의 암호를 2번 묻습니다. 새 암호를 만들어 적어 주면 됩니다.

그러면 이제 root 로 로그인할 수 있습니다. root 계정이 생기는 것입니다.

Ctrl+D키를 눌러, 로그아웃한 후 root 로 로그인해 봅니다.

그런데 root 의 패스워드가 짧고 간단하다면 해커들의 표적이 됩니다. 되도록 길고 복잡해야 합니다.
저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Linux Kernel Source code 얻기Linux Kernel Source code 얻기

Posted at 2010.11.23 11:50 | Posted in About Programing/06. Linux
크리에이티브 커먼즈 라이선스
Creative Commons License
http://www.kernel.org
저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

티스토리 툴바