반응형

아래 방화벽문제는 아닌거 같아서 우분투를 다시 설치 하고 해보았다.

(설정 또한 안바꿔도됨)

역시 예상대로 패키지 설치만하니까 간단히 연결되었다 .

================================================

Ubuntu 설치를 할때 기본 설치로 진행하였다.


별 다른 설정을 하지 않았기에 기본 상태로 깔린거 같다.


평소와 같이 Xshell이나 putty로 원격으로 붙으려하니 붙지를 않아 방화벽 문제일거라 생각하여


$ sudo ufw disable  // 방화벽 해제

을 해줬다.


결과는 Fail.


22번포트를 열어주어야하나싶어


$ sudo ufw allow 22 // 22번 포트 허용

결과는 역시 fail


맨땅에 헤딩하기가 이렇게 힘들던가...

결국 다른 블로거의 힘을 빌리기로 했다.


/etc/network/interfaces 의 내용을 수정하라고한다


auto lo

iface lo ..... 이런식으로 작성되어있는데


lo -> eth0 으로 수정하였다.


그리고


# sudo apt-get install openssh-server


이 패키지가 안깔려있는데 이놈이 큰 문제였던거 같다. (물론 방화벽 문제도 있었겠지만)


네트워크를 재시작 해주어야한다.

# sudo /etc/init.d/ssh restart

혹은

# service restart

혹은

# service ssh restart 



성공이다.


앞으로 이런 문제는 가볍게 넘기도록해야겠다.

반응형

리눅스에서 콘솔 프로그램을 백그라운드로 실행해야 할 경우 screen 명령어가 굉장히 유용하다.

원격 작업하다보면 여러창을 보고 싶을때도 있어 보통 터미널을 여러개 띄워 사용한다. 하지만 왔다갔다하기 귀찮아 많이 이용한다.

간단히 nohup으로 사용할수 있지만 screen명령어가 더 강력하고 유연하므로 많이 사용된다.


우선 사용하기 위해 screen 명령어를 써보니 라즈비안에선 깔려 있지 않다.


라즈비안은 Ubuntu 기반이므로

sudo apt-get install screen 명령어로 손쉽게 깔 수 있다.


CentOS

yum install screen 으로 설치하면 된다.



=========================================================================

screen 명령어의 메뉴얼로는


1. 쉘모드 명령어
  screen
   : screen 을 시작 하는 기본 명령입니다.
   : 기본 세션명으로 시작합니다.
  screen -S 세션명
   : -S 다음에 주는 세션명으로 시작합니다.
  screen -list
   : -list 옵션을 주고 실행하면 이전에 작업했었던 screen 리스트가 있으면 세션명과 함께 리스트를 보여줍니다.
  screen -R 세션명
   : 이전에 세션이 있을 경우 -R 다음에 오는 세션명으로 이전 작업을 불러옵니다.
   : -R 다음에 세션명을 주지 않았을 경우에는 이전 세션이 한개만 있을 경우 그 작업을 불러옵니다.
   : 이전 작업이 여러개 있을 경우에는 이전 작업 리스트를 보여줍니다.
   : 이 경우에는 원하는 세션명을 주고 시작 하면 되겠죠. ^__^
   
2. screen 실행후 명령어
  screen 실행후의 명령어는 Ctrl-a로 시작합니다:

Ctrl-a, c       : (create) 새로운 쉘이 생기면서 그 쉘로 이동
Ctrl-a, a       : 바로 전 창으로 이동
Ctrl-a, n       : (next) 다음 창으로 이동
Ctrl-a, p       : (previous) 이전 창으로 이동
Ctrl-a, 숫자    : 숫자에 해당하는 창으로 이동
Ctrl-a, '       : 창번호 또는 창이름으로 이동 ( ' => 싱글 쿼테이션 )
Ctrl-a, "       : 창번호를 보여준다. ( " => 더블 쿼테이션 )
Ctrl-a, A       : 현재 창의 title을 수정
Ctrl-a, w       : 창 리스트 보여주기
Ctrl-a, esc     : Copy 모드로 전환. Copy 모드에서는 vi의 이동키로 이동을 할 수 있다.
Crtl-a, [         커서 이동을 할 수 있고 특정 블럭을 복사하는 기능으로 사용한다.
                 먼저 시작 위치에서 space 바를 누르고 끝 위치에서 space 바를 누르면 해당 부분이 buffer로 복사된다.
Ctrl-a, ]       : buffer의 내용을 stdin으로 쏟아 넣는다.
                 이 기능은 vi의 입력모드에서 사용하면 유용하다.
Ctrl-a, :(콜론) : 명령행 모드로 전환
Ctrl-a, d       : (detach) 현재 작업을 유지하면서 screen 세션에서 빠져나옴
                 세션이 종료 되지 않습니다.
Ctrl-a, x       : lock screen

아래 부분은 창을 나눠서 사용하는 명령입니다.

Ctrl-a, S       : (split) 창을 나눔 (region)
Ctrl-a, Tab     : 다른 region으로 이동
Ctrl-a, Q       : 현재 region을 제외한 나머지 숨기기


그리고 마지막 명령으로 세션을 완전히 빠져 나오는 명령입니다.

exit : screen 의 쉘상에서 exit 를 치고 엔터를 하면 세션이 완전히 종료 됩니다.


이상 위의 명령어 들만 알고 있으면 screen 사용시 불편하지 않게 screen 을 사용 할 수 있을 겁니다.

참 고
다른 사용자 분들의 의견을 보면 screen 화면을 2, 3 개정도 띄우고 사용하는게 가장 적당하다고 합니다.
4개 이상 띄우고 사용하다보면 불편하다고 하네요.
여러분들은 어느정도가 적당한지 한번 사용해보시고 판단 하시기 바랍니다.


기타 더욱 자세한 내용을 아시고 싶으시면 man 페이지나 /usr/doc/screen 을 참고하시기 바랍니다. 


참고 : KLTP( http://kltp.kldp.org/ )
      리눅스 사랑넷 ( http://linux-sarang.net )

      [펌] http://blog.naver.com/xinfra/80007388674


반응형

 

-여러 개의 태스크들 중에서 다음번 수행시킬 태스크를 선택하여 CPU라는 자원을 할당하는 과정을 스케줄링 이라고 함

-  리눅스의 태스크는 실시간 태스크와 일반 태스크로 나뉘며 각각 스케줄링 알고리즘이 구현

* 리눅스가 총 140단계의 우선순위 제공

실시간 태스크 (0~99)

일반 태스크 (100~139)

 

(1) 런 큐와 태스크

- 운영체제는 스케줄링 작업 수행을 위해, 수행 가능한 상태의 태스크를 자료구조를 통해 관리

- 이 자료구조를 런 큐(Runqueue)라 함

- 운영체제의 구현에 따라 런큐는 한개 혹은 여러개 존재 가능

- 자료구조의 모양이나 관리 방법도 달라짐

- ~/kernel/sched/sched.h 파일 내에 struct rq라는 이름으로 정의

- 부팅 이후 각 CPU별로 하나씩의 런큐를 유지

복수개의 CPU를 가진 시스템에서 리눅스의 런큐 자료구조와 태스크의 관계

 

- 새로 생성된 태스크는 부모 태스크가 존재하던 런 큐로 삽입 (더 높은 캐시 친화력 (cache affinity)를 얻을 수 있기 때문에)

- 대기 상태에서 깨어난 태스크는 대기전에 수행되던 CPU의 런 큐로 삽입

 

* 스케줄러가 수행되면 해당 CPU의 런큐에서 다음번 수행시킬 태스크를 고를 때 고려사항

1. 어떤 태스크를 선택할 것인가

   - 일반 태스크를 위해 CFS를 사용하며 실시간 태스크를 위해서 FIFO, RR, DEADLINE 정책을 제공

2. 런 큐간의 부하가 균등하지 않은 경우 어떻게 할 것인가

   - 부하 균등 (load balancing)기법을 제공

        # load_balance() 함수 : 특정 CPU가 많은 작업을 수행하고 있느라 매우 바빠 한가한 다른 CPU에 태스크를 이주(migration) 시켜서 성능 향상

 

 

(2) 실시간 태스크 스케줄링 (FIFO, RR and DEADLINE)

  - 가장 급한 태스크를 한가한 태스크보다 먼저 수행될 수 있도록 해줌 -> 높은 반응성을 보임

  - 어떤 기준에 근거하여 태스크를 골라내는지?

         -> task_struct 구조체는 policy, prio, rt_priority 등의 필드가 존재

  - 실시간 태스크 ( SCHED_FIFO, SCHED_RR, SCHED_DEADLINE)

  - 일반 태스크 (SCHED_NORMAL) , 이와 더불어 중요하지 않은 일을 수행하는 태스크가 CPU 점유를 막기 위해 SCHED_IDLE 정책, SCHED_BATCH정책이 존재

     * 리눅스 실시간 태스크란?  sched_setscheduler()등의 함수를 통해 태스크의 스케줄링 정책을 위 세가지 중 하나로 바꾸게 되면 실시간 태스크가 되는 것

  - 우선순위 설정을 위해 task_struct 구조체의 rt_priority 필드를 사용

      -> 0~99까지의 우선순위를 가질 수 있으며 태스크가 수행을 종료하거나 스스로 중지하거나 혹은 자신의 타임 슬라이스를 다쓸때까지 CPU를 사용

           => 즉 RR인 경우 동일 우선순위를 가지는 태스크가 복수개인 경우 타임 슬라이스 기반으로 스케줄링

 

  -

반응형

(1) 상태 전이와 실행 수준 변화

태스크는 생성 뒤 자신에게 주어진 일을 수행하며, 이를 위해 디스크 I/O나 락 등 CPU이외의 자원을 요청

 

특정 태스크가 당장 제공해 줄 수 없는 자원을 요청한다면?

1. 커널은 이 task를 잠시 '대기' 하도록 만듬

2. 다른 태스크를 먼저 수행

3. 태스크가 요청한 자원이 사용 가능해 지면 대기상태의 태스크를 다시 '수행'

 

 

□ EXIT_ZOMBIE 상태

- 말 그대로 죽어있는 상태. Task에게 할당되어 있던 자원을 대부분 커널에게 반납한 상태.

- 자신이 종료된 이유를 부모 태스크에게 알려주기 위해 유지 되고 있는 상태

 

□ EXIT_DEAD 상태

- 부모 Task가 wait()을 호출하면 자식 태스크의 상태가 EXIT_DEAD로 바뀜

- 부모는 자식의 종료 정보를 넘겨받고 자식태스크는 자신이 유지하던 자원을 모두 반환하고 최종 종료됨

 * 부모 task의 wait()함수 호출 전 먼저 사라지게 되면 고아 태스크가 영원히 존재해 시스템의 오버헤드로 작용됨

     --> 이 문제를 해결하기 위해 커널은 고아 task의 부모를 init task로 바꾸어줌 (task_struct 구조체에 real_parent와 parent 2개의 필드가 존재하는 이유)

 

□  TASK_RUNNING 상태

- 실제 수행중인 task의 상태 (running)과 수행되던 task가 자신에게 할당된 CPU 시간을 모두 사용하여 다시 준비중인 상태 (ready)

 

□  TASK_INTERRUPTIBLE 상태

- 실행 상태에 있던 태스크가 특정한 사건을 기다려야 할 대기상태로 전환되어 기다리는 사건에 따라 특정 큐(queue)에 매달려 대기중인 상태

- 대기하는 동안 자신이 기다리는 그 사건 외에는 일체 방해받아선 안 되는 경우가 있을 수 있는데 이 경우가 TASK_UNINTERRUPTIBLE.

- 이후 기다리던 사건 발생 시 대기 상태에 있던 TASK가 다시 준비(ready)상태로 전이하게 되며 다시 다른 태스크들과 함께 스케줄링 되기 위해 경쟁함.

  * TASK_UNINTERRUPTIBLE 상태의 Task가 시그널에 반응하지 않기때문에 생기는 문제

     -> (예> 쉘에서 'kill -9 pid' 등의 명령을 수행해도 태스크가 종료되지 않음)

         => 이를 해결하기 위해 TASK_KILLABLE 상태가 도입

 

(2) TASK_RUNNING(running) 상태의 수준

- 실제로 실행중인 TASK_RUNNING(running) 상태는 다시 사용자 수준 실행 상태와 커널 수준 실행 상태로 구분할 수 있음

 

□ 사용자 수준 실행 (user level running)

- CPU에서 사용자 수준 프로그램의 제작자가 만든 프로그램이나 라이브러리 함수를 수행하고 있는 상태로 사용자 수준의 권한으로 동작

 

□ 커널 수준 실행 (kernel level running)

- CPU에서 커널 프로그램의 일부분을 수행하고 있는 상태로, 사용자 수준 권한보다는 더 강력한 커널 수준 권한으로 동작

 

* 사용자 수준에서 커널수준 실행상태로 전이하는 방법

  1. 시스템 호출

  2. 인터럽트 발생

 

(3) 커널 수준의 프로그램

- 커널 수준의 프로그램은 바로 리눅스 그 자체임

- 리눅스도 C와 어셈블리어로 작성된 S/W이기 때문에 수행되기 위해서는 스택을 필요로 함

 

 

- 리눅스 커널은 태스크가 생성될 때마다 태스크 별로 task_struct 구조체와 8KB의 스택을 할당해 줌

- 8KB의 스택은 thread_union이라 불림, thread_info(프로세스 디스크립터) 구조체도 포함 되어있음.

-Pt_regs는 수행을 마친 task가 사용자 수준 실행상태로 복귀하기 이전 수행 작업에 대한 정보 저장 

반응형

(root 계정에서 수행)

vim 설치

# yum install vim -y

 

gcc 설치

# yum install compat-gcc-34 -y

 

#vim a.c   ( a.c라는 파일을 생성하며 내용 작성 )

 

 

:wq로 저장 후 나옴

 

gcc [옵션] [바이너너리파일] [.c파일]

 

# gcc -o a a.c

a라고 초록색으로 바이너리 파일이 생성됨

 

#./a ( 바이너리파일 a를 실행 )

 

 

* vim 환경을 제작편하도록 변경

 

# vim ~/.vimrc (새파일 생성)

 

 "새로운 행의 인덴트를 현재행과 같게 한다
set autoindent
"백업파일을 만드는 디렉토리
set backupdir=$HOME/vimbackup
"파일 보존 다이얼로그의 초기 디렉토리를 버퍼 파일 위치로 설정
set browsedir=buffer
"클립보드를Windows(와)과 제휴
set clipboard=unnamed
"Vi호환을 오프
set nocompatible
"스ž
set directory=$HOME/vimbackup
"탭 대신에 공백 문자를 삽입한다
set expandtab
"변경중의 파일에서도, 보존하지 않고 다른 파일을 표시
set hidden
"인크리멘탈 서치를 실시한다
set incsearch
"탭 문자, 줄 끝 등 불가시 문자를 표시한다
set list
"list그리고 표시되는 문자의 포맷을 지정한다
set listchars=eol:$,tab:>\ ,extends:<
"행 번호를 표시한다
set number
"시프트 이동폭
"set shiftwidth=4
"닫아 괄호가 입력되었을 때, 대응하는 괄호를 표시한다
set showmatch
"검색시에 대문자를 포함하고 있으면 대/소를 구별
set smartcase
"새로운 행을 만들었을 때에 고도의 자동 인덴트를 실시한다
set smartindent
"줄머리의 여백내에서 Tab (을)를 박으면,'shiftwidth' 의 수만큼 인덴트 한다.
set smarttab
"파일내의 <Tab> 하지만 대응하는 공백의 수
"set tabstop=4
"커서를 줄머리, 줄 끝으로 멈추지 않게 한다
set whichwrap=b,s,h,l,<,>,[,]
"검색을 파일의 선두에 루프 하지 않는다
set nowrapscan

 

 

반응형

 

1. New Virtual Machine을 클릭 후

가상 디스크를 하나로 관리할지 여러개로 분할해서 관리할지 물어보는 창이다

Store virtual disk as a single file 로 설치 

 

Customize Hardware 클릭해서 기본적인 하드웨어 설정을 해줍니다

 

필요없는 device는 삭제해주고 Memory는 성능향상을 위해 2GB로 변경후 CD에 iso파일을 넣어주고 close

 

설치를 하기위해 Install to hard Drive 클릭

 

설치는 한국말로 ~

키보드 레이아웃으로 영어설정을해주고 한글은 따로 설치해서 사용 예정

 



반응형

 1. VM ware 가상공간 생성

 

 

 

 

 

 

불 필요한 장치 제거

 

 

 2. Ubuntu 설치

 

 

 

 

 

 

반응형

리눅스 운영체제에서 기본적으로 최고 관리 권한 계정인 root 계정을 보안상의 이유로 활성화 시켜놓지 않음.

계정이 보안상의 이유로 잠겨 있기 때문입니다.

 

참고로, 일시적 최고 권한을 얻기 위해 터미널 명령에 접두사로 sudo라는 명령어를 씀.

sudo :

 -  Super User do 의 약자. 하나의 명령에 대해서 일시적으로 최고 관리 권한을 가짐

 - 현재 로그인된 계정의 암호를 물음

 

또는 일시적으로 최고 관리자 계정을 사용하기 위해 su 라는 명령어를 사용하기도 함.

su :

 - Super User의 약자

 - 최상의 권한을 갖는 유저

 - 해당 터미널 세션에 한해서 일시적으로 root 계정처럼 사용할 수 있도록 권한을 부여

 

Root 계정 암호 설정하기

초기 root을 사용하기 위해선 계정암호를 설정해야 함

 

passwd [계정명] 으로 passwd로 변경 할 수 있음.

최상위 권한을 얻어 비번을 바꾸기 위해

# sudo passswd root

후 비밀번호 설정하면됨 

 

 

 

'Study Note > OS' 카테고리의 다른 글

[Linux] Vmware 설정 및 fedora 23 설치  (0) 2016.03.23
[Linux] VMware workstation 에 Ubuntu 설치  (0) 2016.03.10
[Linux] Task 관리  (0) 2016.03.07
[Linux] 리눅스 커널 컴파일 (fedora)  (0) 2016.03.07
[Linux] 리눅스 커널 구조  (0) 2016.03.07
반응형

Task 관리

정의

Task :  '자원소유권의 단위'

Thread : '수행의 단위'

Process : '동작중인 프로그램'


사용자 입장에서 프로세스 구조

텍스트 - CPU에서 직접 수행되는 명령어

데이터 - 전역변수 

스택 -  지역변수와 인자 그리고 함수의 리턴 주소  존재

힙 - 동적 할당받은 내용이 존재

 * 이 때 각 영역을 세그먼트 또는 가상 메모리 객체 라고 함


프로세스와 쓰레드의 생성과 수행

1. 새로운 프로세스를 생성하면, 생성된 프로세스(자식 프로세스)와 생성한 프로세스(부모 프로세스)는 서로 다른 주소공간을 갖는다

  반면, 새로운 쓰레드를 생성하면 생성된 쓰레드(자식 쓰레드)와 생성한 쓰레드(부모 쓰레드)는 서로 같은 주소공간을 공유한다.

2. - 같은 프로세스에서 새로운 쓰레드를 생성할 경우 기존 쓰레드와 생성된 다른 쓰레드가 함께 동작하고 있는 것으로 볼 수 있다.

  즉, 한 프로세스에 2개의 쓰레드가 동작하는 것. (한 프로세스에 여러 쓰레드가 동작하는 모델 = 다중 쓰레드 시스템)

   - 쓰레드 생성은 새로이 모든 자원을 생성해 주어야 했던 프로세스에 비해 생성에 드는 비용이 비교적 적다.

3. 자식 쓰레드에서 결함이 발생하면 그것은 부모 쓰레드로 전파된다.

  반면 자식 프로세스에서 발생한 결함은 부모 프로세스에게 전달되지 않음

  결국, 쓰레드 모델은 지원공유에 적합하며, 프로세스 모델은 결함 고립에 적합한 프로그래밍 모델이다.


리눅스의 태스크 모델



프로세스는 자신이 사용하는 자원과 그 자원에서 수행되는 수행 흐름으로 구성.

이를 관리하기 위해 각 프로세스마다 task_struct라는 자료 구조를 생성

리눅스 커널은 프로세스 또는 쓰레드 중에서 어떤 것이 요청될 지라도, 모두 task_struct 자료 구조로 동일하게 관리

즉, 사용자 수준에서 쓰레드를 생성하면 그 쓰레드의 존재를 커널도 안다


태스크 문맥

태스크와 관련된 이러한 '모든' 정보를 문맥이라고 부름.

- 시스템 문맥 : 태스크의 정보를 유지하기 위해 커널이 할당한 자료구조들

  (task_struct, 파일 디스크립터, 파일 테이블, 세그먼트 테이블, 페이지 테이블 등) 

- 메모리 문맥 : 텍스트, 데이터, 스택, heap 영역, 스왑 공간 등이 여기에 포함

- 하드웨어 문맥 : 문맥 교환 할 때 태스크의 현재 실행 위치에 대한 정보를 유지하며, 쓰레드 구조 또는 하드웨어 레지스터 문맥 이라 불림


각 변수를 관련 있는 것 끼리 구분

가. task identification

- 태스크 ID를 나타내는 pid, 태스크가 속해있는 쓰레드 그룹 ID를 나타내는 tgid,

  pid를 통해 해당 태스크의 task_struct를 빠르게 찾기 위해 커널이 유지하고 있는 해쉬 관련 필드 등의 변수가 있음

 (uid[사용자 ID], euid[유효 사용자ID], suid[저장된 사용자 ID], fsuid[파일시스템 사용자 ID], gid, egid, sgid, fsgid)


나. state

- 생성에서 소멸까지 많은 상태를 거치며, 이를 관리하기 위한 state변수가 존재

(TASK_RUNNING(0), TASK_INTERRUPTIBLE(1), TASK_UNINTERRUPTIBLE(2), TASK_STOPPED(4), TASK_TRACED(8), EXIT_DEAD(16), EXIT_ZOMBIE(32))


다. task realationship

- 태스크는 생성되면서 가족 관계를 갖음

- 현재 테스크를 생성한 부모 태스크의 task_struct 구조체를 가리키는 real_parent와 현재 부모 태스크의 task_struct 구조체를 가르키는 parent 필드가 존재


라. scheduling information

- task_struct에서 스케줄링과 관련된 변수 : prio, policy, cpus_allowed


마. signal information

- 시그널은 태스크에게 비동기적인 사건의 발생을 알리는 매커니즘

- 관련 변수 : signal, sighand, blocked, pending


바. memory information

- 태스크는 자신의 명령어와 데이터를 텍스트, 데이터, 스택 그리고 힙 공간 등에 저장

- task_struct엔 이 공간에 대한 위치와 크기, 접근 제어 정보 등을 관리하는 변수 존재


사. file information

- 태스크가 오픈한 파일들은 task_struct에서 files_struc구조체 형태인 files라는 이름의 변수로 접근 가능

- 루트 디렉터리의 inode와 현재 디렉터리의 inode는 fs_struct 구조체 형태인 fs라는 변수로 접근 가능


아. thread structure

- 문맥 교환을 수행할 때 태스크가 현재 어디까지 실행되었는지 기억해놓는 공간


자. time information

- 태스크 시간 정보를 위한 변수로는 태스크가 시작된 시간을 가리키는 start_time, real_start_time 이 있음

- 사용한 CPU 시간의 통계를 담는 필드도 있음


차. format

- 리눅스는 Linux exec 도메인뿐만 아니라 BSD나 SVR4 exec 도메인도 지원

  * BSD나 SVR4 커널에서 컴파일 된 프로그램도 리눅스에서 재 컴파일 없이 수행 될 수 있다는 의미

- personality 변수 사용

- 이진 포맷을 지원하기 위한 필드가 thread_info 내에 존재


카. resource limits

- 태스크가 사용할 수 있는 자원의 한계를 의미

- rlim_max : 최대 허용 자원의 수

  rlim_cur : 현재 설정된 허용 자원의 수

- 자원의 한계가 배열로 구현되어 있으며, 현재 리눅스 커널에는 최대 16개의 자원에 대한 한계를 설정

반응형

리눅스 커널 컴파일

리눅스 커널을 만드는 과정(3단계)

1. 커널 구성(Kernel configuration)

2. 커널 컴파일(Kernel compile)

3. 커널 인스톨(Kernel installation)


1. 커널 구성(Kernel configuration)

- 커널 구성이란 새로 만들어질 리눅스 커널에게 현재 시스템에 존재하는 하드웨어 특성, 커널 구성 요소, 네트워크 특성 등의

  정보를 알려주는 과정

- 시스템 하드웨어 정보들에 대한 사전 지식이 필요

- 수행 방법

  make config

  make menuconfig

  make xconfig 등의 방법이 있음


2. 커널 컴파일(Kernel compile)

- 커널 소스 파일을 이용해 실행 가능한 커널을 만드는 과정

- "make bzImage"나 "make zImage" 등의 명령으로 생성될 수 있다. (bzImage와 zImage는 커널 이미지 크기만 차이가 있을 뿐 커널 자체는 동일)

- 커널 2.6 버전 이후 부터는 "make"만 타이핑 해도 됨


3. 커널 인스톨(Kernel installation)

- 생성된 커널로 시스템이 부팅될 수 있도록 만드는 과정

- 커널 인스톨은 생성된 커널 이미지를 루트 파일시스템으로 복사, 모듈 인스톨, 그리고 부트로더(grub) 수정 등의 과정으로 이루어짐


리눅스 커널 컴파일 수행

* root 계정에서 수행 해야한다.


커널 컴파일을 위한 패키지 설치

 

현재 커널 버전 확인

$ uname -r

 

 

 

커널 소스 다운로드

커널 소스는 http://kernel.org 에서 다운로드 가능

 

 

저 하이퍼링크 마우스 오른쪽을 누른후 링크 copy후

 

# wget [링크 주소] 를 입력하면 다운로드를 받게된다.

 

tar.xz로 다운 받았으므로

# tar xvf linux-4.4.5.tar.xz

를 이용하여 다운로드 받은 파일을 압축풀기

(tar.gz일경우 tar xzvf로 풀면됨)

 

필요 패키지 설치

 

$ sudo apt-get install build-essential libncurses5 libncurses5-dev bin86 kernel-package -y

 


Configuration 파일 복사

 

현재 커널의 configuration 파일을 복사


cp /boot/config-현재커널명 ./.config



$ sudo make menuconfig


Load 를 클릭


OK 후 Save


이후 Exit로 터미널로 빠져나옴


커널 컴파일 (커널 설치 이미지 생성)

$ sudo make-kpkg --initrd --revision=1.0 kernel_image

* 이 명령어 수행시 컴퓨터 상태에 따라 시간이 오래 걸릴 수 있다.

'Study Note > OS' 카테고리의 다른 글

[Linux] root 계정 초기 패스워드 설정  (0) 2016.03.10
[Linux] Task 관리  (0) 2016.03.07
[Linux] 리눅스 커널 구조  (0) 2016.03.07
[Linux] Shell Script  (0) 2016.02.15
[Linux] Shell & Shell 내장 명령어  (0) 2016.02.15

+ Recent posts