2010년 9월 25일 토요일

myadd 프로그램을 수정하기

목표:  
myadd 프로그램을 수정하여
                                음수 입력도 가능하게 만들기.


1. myadd 파일의 이해

- cmdlines.tar.gz의 압축을 해제하고, 본격적으로 수정할 소스가 있는
  cmdlines  폴더에 들어갑니다.
- RCS 폴더만이 있고 #make myadd를 입력합니다.
- 수업중에 간단하게 작성한 Makefile에 의해서 myadd 및 기타파일을 생성
  되고,  다시 #make clean을 입력하면 clean 설정된 모든 파일을 삭제합니다.
  (결국, myadd를 제외한 모든 파일은 삭제됩니다. )


2. myadd 파일 수정.
- 수업중에 수정한 음수 입력이 되지 않는 상태의  options.h options.c myadd.c
   파일을 활용하였습니다.
- RCS로 버전관리를 하면서 소스를 수정하였습니다.
-  음수를 인식 할 수 없는 이유는,  숫자가 (-)와 함께 들어오면
   알수 없는 인자로 판단이 되기 때문입니다.
-  while 문의 조건절에서 getopt_long 함수의 인자 중 숫자 이용해 음수도
    인식하게 하였습니다.


3. Makefile 생성.

-  Makefile이란?
  보통 라인 수가 많아지면 여러 개의 파일로 나누어 (모듈로 나누어)
개발을 하게 됩니다. 이들은 알게 모르게 서로 관계를 가지고 있는데,
어느 하나를 필요에 의해 바꾸게 되었을 때 그 파일에 있는 함수를 이용
하는 다른 파일도새롭게 컴파일되어야 합니다.  하지만 파일 수가 많은
경우 이를 일일이 컴파일을 하게 될 때, 그 불편함과 함께 컴파일하지
않아도 될 것도 컴파일을 하게 될 수도 있고, 컴파일해야 할 것도 미처
못하게 되는 경우가 있습니다. 이런 상황에서 지능적으로 관계 있는 것만
새롭게 갱신을 할 필요가 있을 때 make파일은 사용하게 됩니다. 하지만
make 명령은 내장된 지식을 많이 가지고 있지만 스스로 응용프로 그램을
빌드하는 방법을 알지는 못하기 때문에 make가 응용프로그램을 어떻게
생성하는지 알려줘야하는데 이 파일을 Makefile이라고 합니다.

- myadd가 만들어지기 위해서는 myadd.o, options.o가 필요하고 각각의 목적
  파일들은 모두 자신의 소스 파일과 *.h 에 의존을 합니다.
  그러므로, 다으과 같이 Makefile을 작성하였습니다.
   myadd: myadd.o options.o
   myadd.o: myadd.c options.h
   options.o: options.c options.h

- clean을 설정하여 #make clean을 입력하면 myadd를 제외한 모든파일이
  삭제되도록 하였습니다.
  
# TIP #  매크로의 사용

Makefile을 보면 교수님이 작성한 것과 같이 간단한 매크로 기능을 사용할 수
있습니다.

예) main.o read.o write.o라는 것을 OBJECTS 라는 매크로로 바꾸기.

OBJECTS = main.o read.o write.o

test : $(OBJECTS)
                gcc -o test $(OBJECTS)

main.o : io.h main.c
                gcc -c main.c
read.o : io.h read.c
                gcc -c read.c
write.o: io.h write.c
                gcc -c write.c


 위에서 보다시피 매크로는 그냥 프로그램 짤 때와 같이 사용해서 값을
대입합니다.  대신 사용할 때는 반드시 $(..) 안에 넣어서 사용합니다.


4. 압축하기

 tar cvf myadd.tar RCS/
  (RCS폴더에 있는 파일들을 myadd.tar로 압축하였습니다.)
- gzip myadd.tar
  (myadd.tar 압축파일을 myadd.tar.gz의 형태로 압축하였습니다.)


# 압축풀기gunzip filename.tar.gz
 ( tar.gz에서 gz를 풉니다..)
tar xvf filename.tar  
( tar를 풀어냅니다.  x : 압축풀기, v : 압축푸는 상태 보기, f : 파일 이름)
tar xvzf filename.tar.gz  
( tar.gz를 한번에 풉니다. 안될 경우 위의 순차적인 방법으로 합니다.)

# 압축하기
tar cvf filename.tar file1 file2   
( file1 file2 등의 파일이나 폴더를 filename.tar로 묶습니다.)
gzip filename.tar                    
( filename.tar를 filename.tar.gz로 압축합니다.)
tar cvzf filename.tar.gz file1 file2  
( file1 file2 등의 파일이나 폴더를 filename.tar.gz로 한번에 묶고 압축합니다.)
 
 
5. 동작확인
- tar xvzf myadd.tar.gz 을 입력하여 압축을 해제합니다.
- 압축을 풀면 RCS폴더 하나가 생성된것을 볼 수 있습니다.
- RCS폴더에 들어가지 말고 들어가기 전에 #make를 입력합니다.
   (myadd를 포함한 *.o, *.c *.h등의 파일들이 생성된것을 볼 수 있습니다.)
- ./myadd를 통하여 프로그램을 실행시키면 음수가 계산되는 것을 볼 수
   있습니다.
 
 
# make clean
 
 
 
 
 
 
 
- make clean을 입력하면 myadd 파일을 제외한 모든  파일이 삭제되는
 것을 볼 수 있습니다.
 
 
# 파일첨부 #  ( myadd.tar.gz )

mycmd 프로그램 작성하기

학습목표:
Linux 명령어, System Call, 디버깅 등에 대한 이해

 1. mycmd의 동작 이해

- mycmd 실행 결과: (1.clock  2.Processes  3.Editor  4.Exit ) 출력.
- 각 해당번호 입력 입력시 프로그램 실행.
- 1, 2, 3, 4 이외의 번호 입력시 (1.clock  2.Processes  3.Editor  4.Exit ) 재출력.
- 하나의 프로그램 실행 후 다른 해당번호를 입력하면 프로그램 실행 가능.
- 하나의 프로그램 실행 후 다른 해당번호를 입력하지 않으면 프로그램 종료.

2. emacs를 실행하여 위의 동작을 할 수 있는 코드작성.


※ 작성한 코드는 파일로 첨부.

- geetchar()를 이용하여 문자를 입력받고 이에 따라서 각각 동작하도록 if-else
  문 형태를 활용하였습니다.
- swich문을 이용하면 좀 더 간단했겠지만 알 수 없는 오류가 발생해서
  if - else if 문을 사용하였습니다.

※ 주요함수

 forc() 함수

 fork()함수는 호출한 프로세스의 복사본 프로세스를 생성합니다.
실패할 경우 -1을 리턴합니다. 성공할 경우 프로세스가 둘로 나뉘어서
원본 프로세스와  복사본 프로세스에게 전달되는 리턴값이 다릅니다.
원본 프로세스의 리턴값은 복사본 프로세스 ID이고, 복사본 프로세스의
리턴 값은 0입니다. fork() 함수 호출 성공시, 부모 프로세스는 자식 프
세스의 ID를 리턴받고 fork 함수 호출 이후를 실행하게 되고 자식 프로
세스역시 0을 리턴받고 fork함수 호출 이후를 실행하게 됩니다. 실행의
흐름이 두 갈래로 나뉩니다. 그러나 부모프로세스와 자식 프로세스는
같은 프로그램 코드를 서로 다른 공간에서 실행하므로 데이터의 공유는
일어나지 않습니다. 독립된 두 개의 프로그램이 실행되는 것입니다.

  exec() 함수
- 호출하는 프로세스를 새로운 프로세스로 변경시키는데 사용합니다,
- exec후, 프로세스의 개수는 그대로 이면 그 프로세스의 PID 번호도
  변경되지 않지만, 프로세스의 내용이 변경됩니다.
- 복귀값
  exec()는 성공적으로 마쳐진 경우에는 제어가 복귀되지 않고, 오류
  발생시만  -1값을 복귀시킵니다.
형식
  execl (char*path, char*argo, char*arg1,………,NULL)
  execv (char*path, char**argv)
  execlp(char*filename, char*argo, char*arg1,………,NULL)
  execvp(char*filename, char**argv)
 
  path        실행화일이 있는 곳까지의 전체 경로 이름
  argo         실행하고자 하는 프로그램 이름
  arg1~argn 실행하고자 하는 프로그램의 인수들
  avgv         실행하고자 하는 프로그램의 인수들의 배열
  filename    실행하고자 하는 프로그램 이름
3. RCS를 통한 버전관리 및 작성 프로그램 실행.

4. gdb를 이용한 디버깅 실행.





































 먼저 컴파일 시 디버깅 정보를 삽입하기 위해서 반드시 -g 옵션을 추가하도록 하며 gdb의 인자로 디버깅할 파일 이름을 적어줍니다.
 cc -g -o gdb_test (파일명)
 gdb  gdb_test
그럼 gdb 정보와 함께 (gdb) 콘솔 command로 바뀝니다.
일단 gdb상에서 이 프로그램을 돌려봅니다. 명령어는 run 입니다.

5. Makefile 작성
- Makefile은 명령(command)부분에 정의된 명령들은 의존 관계(depenency)부분에 정의된 파일의 내용이 바뀌었거나, 목표 부분에 해당하는 파일이 없을 때 이곳에 정의된 것들이 차례대로 실행이 됩니다. 가령, mcmd.c를 고쳤다고 생각한다면 mycmd.o가 컴파일되어 다시 생기고, mycmd 도 다시 링크되어 갱신됩니다.

- mycmd: mycmd.o ( mycmd.o 를 통해 mycmd.를 만들게 됩니다. )
- mycmd.o: mycmd.c ( mycmd.c 를 통해 mycmd.o.를 만들게 됩니다. )

- clean을 이용하여 지우고자 하는 파일을 설정할 수 있습니다.

※ 가끔 Makefile을 통한 make 잘 안된다는 분.
- 정확히 이해가 가지 않는 부분이지만 본인의 경우에는 Makefile을 RCS를 통해서
  버전 관리를 하지 않을 경우 make가 제대로 동작하지 않는 경우가 발생하였습니다.
ex)
- RCS를 통한 버전관리:
 압축되어있는 파일을 압축을 푼 후 처음 보이는 폴더에서 바로 make입력시 실행파일 생성.
-버전관리를 안한 Makefile
 압축되어있는 파일을 압축을 푼 후 처음 보이는 폴더에서 바로 make되지 않고 그 폴더안에 들어간 후 make입력 시 실행파일 생성.

6. 압축하기




































- 압축풀기

gunzip filename.tar.gz
 ( tar.gz에서 gz를 풉니다..)
tar xvf filename.tar   
( tar를 풀어냅니다.  x : 압축풀기, v : 압축푸는 상태 보기, f : 파일 이름)
tar xvzf filename.tar.gz  
( tar.gz를 한번에 풉니다. 안될 경우 위의 순차적인 방법으로 합니다.)

- 압축하기
tar cvf filename.tar file1 file2   
( file1 file2 등의 파일이나 폴더를 filename.tar로 묶습니다.)
gzip filename.tar                    
( filename.tar를 filename.tar.gz로 압축합니다.)
tar cvzf filename.tar.gz file1 file2  
( file1 file2 등의 파일이나 폴더를 filename.tar.gz로 한번에 묶고
                                                     압축합니다.)

7. 동작여부 확인

- 압축을 풀면 압축되어있던 폴더가 생성되고 그 상태에서 make를 입력하면
   사전에 만들어놓은 Makefile에 의해서 mycmd라는 실행파일이 생성됩니다.


make clean이라고 입력을 하게되면 Makefile에서 clean에 설정해 놓은 파일들이 모두 삭제됩니다.



- mycmd라는 실행파일과 mycmd.c를 제외한 모든 파일들이 삭제된 것을 볼 수 있습니다.


# 첨부파일 #   ( mycmd.tar.gz )

2010년 8월 30일 월요일

( 역피라미드를 그리는 별 ) 코딩 과정.

( 역피라미드를 그리는 별 ) 코딩.


- 1.1 버전 -

-  파란칸을 보면 1.1버전의 경우 입력한 숫자보다 별의 갯수가 1개가 부족하고
   역피라미드의 형태가 아닌 한쪽에 쏠린 삼각형의 모양을 하고 있습니다.



 - 피라미드가 한줄씩 내려갈수록 한칸씩 띄우는 부분이 어려워서 마직막
   최종 성공 버전과 비교해보면 알겠지만 1.1버전은 아직 칸을 띄우는 코드는
   작성하지 않은 상태입니다.



- 1.2 버전 -
 

-  1.2버전의 경우 여전히 입력한 숫자보다 별의 갯수가 1개가 부족하고
   여전히 역피라미드의 형태가 아닌 한쪽에 쏠린 삼각형의 모양을 하고 있습니다.
   하지만, 각줄 첫부분 일정하게 칸을 띄우는 것은 성공한 것을 볼 수 있습
   니다.



- 위의 코드와 비교해 보면 변수 j를 이용하여 각 줄 첫부분이 일정한 칸을
  띌 수 있도로 코드를 작성하였습니다.



- 1.3 버전 -

- 입력한 별의 갯수와 출력되는 별의 갯수가 일치하는 것을 볼 수 있고
  별의 배열 또한 완벽한 역피라미드의 형태를 띄고 있는 것을 볼 수 있습니다.



- 얼핏 보면 앞 버전의 코드와 거의 다른 것이 없어보이지만 눈에 띄지 않은
  작은 차이가 가장 큰 오류를 발생시키고 있었습니다. 
  파란색 표시된 부분이 지금껏 별의 갯수와 모양이 제대로 출력되지 않았던
  주원인으로 k = 1을 k = i 라고 바꿔주면서 모든 문제가 해결되었습니다.



- 최 종 확 인 -


 
- 알 고 리 즘 -


- 가장 외부의  for문은 피라미드의 행과 관계가 있습니다.
 예를 들어,입력 값이 9인데 행의 개수가 5개 라는 것은 입력값을 반으로 나눈
 것보다도 수치가 1  더 큰 수가 외부 for문의 회전수라는 의미입니다.
 그래서 입력값 a/2 보다 작다가 아닌 N/2 이하일 때까지 순환하여 입력 값의
 반보다 1회 더 순환 할 수 있습니다.
 내부 for문은 "  " 를 출력하는 for문과 " * " 을 출력하는 for문으로 나누었습니다.
 빈칸을 찍는 for문은 외부 for문의 i값에 의하여 1개씩 증가합니다.
 첫 행에는 빈칸을 찍으면 안되므로 외부 for문의 i값에 미만으로 합니다.
 외부 for문의 i가 0일 때는 안찍고 1일 때는 1개 찍고 2일 때 2개 찍히게 됩니다.
 " * "를 찍는 for문은 " * "가 매번 2개씩 줄어들게 됩니다.
 그림으로 볼 경우 앞에서 하나씩 뒤에서 하나씩 줄어듭니다.
 j의 시작은 i로 인하여 행마다 그 시작값이 증가합니다.
 그만큼 행마다 그 순환하게 되는 횟수가 감소하게 됩니다.
 마찬가지로 a-i 미만으로 한 것은 역시 i가 증가할 때 마다 그 순환하는 횟수가
 감소하게 되기 때문입니다.

# Linux에서 main 함수에  int argc과 char *argv[], 그리고 return은 반드시
 사용되어야 합니다.

RCS 사용법 정리

RCS 사용법.

1단계.
- RCS 파일을 저장할 디렉토리를 만듭니다. (필수사항은 아님!)
   ( 예: # mkdir  RCS(파일명) )

2단계.
- 위의 그림과 같이 emacs를 이용하여 RCS 디렉토리에 적절한 프로그램을
   작성합니다.
   ( emacs가 실행되지 않는 경우는 리눅스에 설치가 되어 있지 않은 경우일
      수도 있으므로 #yum install emacs 명령어를 사용하여 emacs를 설치합니다. )
 # 위에서 /* $Log:$ */ 라는 쓴 부분은 원래는 없어도 됩니다. 하지만 각 버전의
    특징을 소스 파일에 기재함으로써 사용자에게 정보를 제공해 주기 때문에  
    사용하는 것이 좋습니다. 참고로 이 부분이 만약 없다고 가정한다면 RCS
    파일은 원래 소스 파일에 아무런 표시도 하지 않기 때문에 사용자가 보기엔
    어느 버전인지 이해하기 어렵습니다.


3단계.
- #make (파일명)을 입력.(emacs를 이용하여 만든 프로그램을 컴파일 시킵니다.)
  ( 예: #make test1 )

- ./(파일명)을 입력. ( 컴파일 된 프로그램의 동작을 확인할 수 있습니다. )
   ( 예: # ./test1 - Hello World란 문장이 출력되는것을 확인할 수 있습니다.)

4단계. ( 주 요 부 분 )
 - 파일을 RCS에 올리는 명령어가 바로 ci(check in)입니다.
   처음 버전은 1.1부터 시작합니다.
   ( 예: ci test(파일명).c 와 같은 형태로 입력합니다. ) 
-  RCS 에서는 버전 1.1 의 특징을 기록할 수 있도록 메시지를 출력합니다.
   저는 그냥 This is our First test File 이라고 기록했습니다. 메시지를 마치려면
   '.' 을 입력하면 됩니다. 그러면 RCS/exam.c,v 라는 파일이 만들어집니다.
   초기 버전은 이미 말씀드린 것과 같이 1.1 버전 입니다.


5단계 ( 주 요 부 분 )
- 파일을 RCS에 올리는 명령어 ci(check in)와 반대로 chek in 한 파일을 다시
  꺼내는 명령어는 co(check out)입니다.
  ( 예: co test(파일명).c 와 같은 형태로 입력합니다. )
- 위와 같이 아무런 옵션을 붙이지 않고 그냥 co ( 파일명 ).c만 하면 읽기
   전용(read only)모드로  만들어집니다.

- 위의 그림은 check out을 해주고 vi ( 파일명 ).c 를 입력한 형태로 원래의
   파일에는 없던 메시지가 생긴것을 볼 수 있습니다. 이것은 RCS에서 자동적
  으로 생성시켜 주는 정보들입니다. 로그 파일(log file) 이름과 버전이 1.1, 시간
  등도 확인이 가능합니다.


- co 의 옵션중에 -l 이 있습니다. ( lock를 의미함. )
  ( 예: co -l test1( 파일명 ) 의 형태로 입력. )
-  -ㅣ 붙이게 되면  읽기 뿐만아니라 쓰기도 가능하해집니다.



- co -l ( 파일명 ).c 의 형태는 앞서 말한바와 같이 쓰기가 가능하기 때문에
  원래의 파일에 보완할 부분이나 잘못된 부분을 수정할 수 있습니다.
6단계. ( 주 요 부 분 )
-  전단계 처럼 파일을 수정하였을 경우 다시 #make ( 파일명 ) 명령어를
   사용하여 다시 컴파일을 시켜줍니다.
   (./ ( 파일명 )으로 동작시켜보면 위에서 수정한것과 같이 "Hello World"와
    "Hello Incheon"이 출력되는 것을 볼 수 있습니다. )
- 컴파일을 마치고 다시 한번 수정한 파일을 ci(check in)하면 버전이 1.1에서
  1.2로 바뀌게 되고 버전 1.2 의 특징을 기록할 수 있도록 메시지를 1.1과 같이
  출력됩니다.

- 앞서 제시한 방법처럼 check out을 해주고 vi ( 파일명 ).c 를 입력하여 파일을
  살펴보면  1.1이였던 버전이 1.2버전이 된 것을 볼 수 있습니다.

# 파일을 수정, 보안하면서 위의 단계를 계속 반복하면 더 높은 버전이
   생성할 수가 있습니다.

2010년 8월 29일 일요일

최신 커널을 다운로드 받아 컴파일 하는 방법.

1.최신 커널 다운

( www.kernel.org )에 접속하면 최신버전의 커널을 다운 받을 수 있습니다.
- 최신버전의 커널을 Full Source를 눌러 다운받습니다.

- Fedora 13은 기본적으로 다운받은 것은 다운로드 폴더안에 저장됩니다.


2. 최신 커널 컴파일 과정

1단계.
- 터미널을 실행 시킵니다.

※ 터미널의 위치
- Fedora 13 바탕화면의 상단 메뉴에서 ( 프로그램 > 시스템 도구 > 터미널 ) 순서.

2단계.
-터밀널을 실행 시키면 우선 슈퍼 사용자[슈퍼 유저]가 되어야 합니다.
-터미널 첫 화면에서  #su를 치면, 슈퍼 사용자의 암호를 입력하라고 출력되고,
 Fedora 13 설치지 설정한 암호를 입력합니다.
- 그 다음,  터미널에 #yum install gcc를 입력하여 gcc를 설치합니다.

3단계.
- #ls를 입력하면 현재 슈퍼유저의 폴더 목록이 출력됩니다.
- 다운받은 최신커널이 저장되어 있는 폴더를 선택해줍니다.
  ( 예: 다운로더에 최신 커널이 설치 되어있을 경우 "#cd 다운로드" 라고 입력함.)
- #mv linux-2.6.35.3.tar.bz2  /usr/src 입력.
               ( 파일명 )                ( 복사할 경로 )
- #cd /usr/src 입력.
- #pwd 입력.
  ( /usr/src가 출력됨.)
- #ls 입력.
  다운로드 받은 최신커널의 파일 명칭이 출력됩니다.
  ( 예: linux-2.6.36-rc2.tar.bz2 )
- #tar jxvf linux-2.6.36-rc2.tar.bz2
  압출을 풀때 사용하는  명령어로 위와 같이 입력하면 #tar jxvf 입력하고 파일명
  을 적어주면 해당파일의 압축을 풀기 시작합니다.

 4단계.
- #make mrproper 입력.
( 이전에 설정한 정보를 지우거나 새로운 커널 소스를 가져다 컴파일 할 때에는
  이 명령을 먼저 사용해야 합니다. make mrproper 명령은 이전 커널을 컴파일할
  때 만들어진 오브젝트 파일(*.o)과 의존성 설정, 컴파일 환경 설정값, 버전 정보
  등 새로 시작하는 컴파일에 영향을 주는 이전 정보들을 삭제합니다.)
- 이전에 설정된 컴파일환경을 재사용한다면 이 과정을 건너뜁니다. -

- #make menuconfig 입력. ( 또는 make config, make xconfig )
  ( 커널 이미지에 포함될 내용을 선택하는 부분입니다 )
     - 아래는 메뉴식 설정화면의 한 예입니다. -
- 메뉴방식의 화면에서 단축키와 방향키로 메뉴 사이를 옮겨 다닐 수 있습니다.
- "---->" 표시가 있는 곳에서 Enter를 누르면 하위 메뉴가 열립니다.
- <ESC>를 두번 누르거나 <Exit>를 선택하면 상위 메뉴로 올라갑니다.
- <h>를 누르면 도움말을 볼 수 있습니다. <Tab> 키를 누르면 컨트롤 사이를
  옮겨다닙니다.
- 질문에 대해 Y는 커널에 포함, N은 제외, M은 모듈을 뜻합니다.
  설정 상태는 [ ] 또는 < > 안에*(선택), M(모듈), 빈칸(제외)로 표시됩니다.
  모듈기능(M)은 "< >"으로 표시된 질문에만 쓸 수 있습니다.
- 설정이 끝났다면 메인 메뉴에서 "Save Configration to an ALternate FiLe"을
  선택하여 설정 내용을 파일로 저장합니다. 저장된 파일을 읽어들일 때에는
  "Load an ALternate Configration FiLe" 메뉴를 선택합니다.

- 위의 작업을 끝냈으면 다시 터미널로 돌아갑니다.
  ( ncurses.devel and try again 이라는 메시지가 떳으면
   #yum install ncures-devel을 입력하여 설치해줍니다.)

※ make menuconfig는 ncurses(new-curses) Library를 사용합니다.
 ncurses는 화면 입출력에 쓰이는 라이브러리입니다. ncurses가 설치되지
 않았다면 make menuconfig 명령 뿐만 아니라 설정 프로그램 대부분이
 실행되지 않으므로 반드시 설치합니다.

5단계.
- #make를 입력.
  ( 1~2시간 정도 소요가 된다. )

6단계.
- #make modules 입력 ( 모듈들을 생성합니다. )

※ 모듈 : 부팅시 메모리에 적재되는 것이 아니라 부팅 과정 이후 설정에 따라
     혹은 해당 장치 혹은 기능을 사용할 경우에만 메모리에 올려서 사용한 후
     사용하지 않을 경우 메모리에서 삭제하므로 효과적으로 메모리를 관리
     할 수 있습니다.

- make modules_install 입력. ( 만들어진 모듈들을 설치합니다. )
- 모듈이 위치할 디렉토리(/lib/modules/<커널버전>)으로 이동시켜주는
  역할도 합니다.

※ 커널 버전마다 지원하는 장치나 기능이 다르므로 모듈의 경우 /lib/modules
     디렉토리에 해당 커널 버전 디렉토리를 생성하여 커널 버전별로 관리하게
     됩니다.

- make install 입력.
( make install: initrd 이미지를 생성해주고, vmlinuz 커널이미지와 System.map
  맵핑 파일을 /boot에 복사하고 심볼릭 링크 파일 생성, 그리고 grub.conf를
  알맞게 수정합니다. )

※ 위의 모든 명령어 한번에 실행.
- #make bzImage modules modules_install install 과 같이 한번에 끝낼수도
  있습니다.
- #make bzImage && make modules && make modules_install && make install
 ( 두번째 방법 역시 위의 명령어를 한번에 실행시키는 방법으로써 이 방법은
    전단계에서 에러가 없을시에만 다음 단계로 넘어가게 됩니다. )

- #ls /boot을 입력. (새로컴파일된 커널의 버전을 확인할 수 있습니다.)


# 추가내용

- hiddenmenu : 커널 2.6대로 들어오면서 Grub 화면이 2개로 구성되었습니다.
  예전에는 부팅 가능한 운영체제를 모두 보여주는 화면이 나타났으나,
  이제는 기본으로 선택되어 있는 운영체제의 제목만을 간단하게 보여주는
  화면이 나타나서 사용자의 별도 입력이 없으면 바로 해당 운영체제로 부팅해
  버리는 구조입니다.
     물론 이 화면이 나타났을때 아무키나 누르면 종전의 기본 화면이 나타나서
  사용자의 운영체제 선택을 기다리므로 크게 달라진건 없지만, 사용자에
  따라서는 이러한 hiddenmenu가 불편할 수도 있으므로,  이 경우 터미널에
  #vi /etc/grub.conf 를 입력하여 에디트모드로 들어간 후, hiddenmenu 앞에
  "#"을 달아 주석처리 해주면 다음번 부팅부터는 hiddenmenu가 뜨지 않고,
 운영체제를 선택할 수 있는 기본 화면이 바로 뜨게 됩니다.

- 커널 설치 4단계에서 #make mrproper 입력시에 에러가 나는 경우가 있습니다.
  이러한 경우에는 터미널 창의 ( 편집 - 프로파일 )에 들어가서 위의 그림과 같이
  설정해주면 됩니다.

2010년 8월 24일 화요일

Linux(Fedora13) 설치 및 네트워크 설정

파티션 나누기

wnidow와 linux(fedora13) 두개의 OS를 함께 사용하기 위해서는 파티션을 나누어 주어야 한다.

- 대용량 하드디스크 드라이브가 1개의 파티션으로 이루어져 있어 파티션을 분할 해줘야 하는 경우에는 파티션 관리용 소프트웨어를 이용하거나 Windows에 내장되어 있는 Diskpart 명령어를 이용하는 방법 등이 있는데, Windows 7에는 조금 더 간단하게 '컴퓨터 관리'의 '디스크 관리' 옵션을 이용해서 파티션을 분할하거나 합쳐줄 수 있습니다.

 
- 시작을 클릭하고 '프로그램 및 파일 검색' 란에 '컴퓨터 관리'를 입력합니다.

- 컴퓨터 관리 창에서 저장소 > 디스크 관리 순으로 선택합니다.  

 (예: window7)

Linux를 설치하려는 드라이브를 선택하여 파티션을 나눕니다,
(예: C 파티션을 마우스 오른쪽 버튼으로 클릭하고 '볼륨 축소'를 클릭!)


축소할 공간 (새로 만들 파티션의 크기)를 입력하고 '축소'를 클릭합니다.
- 1=1MB / 1024MB=1GB
  
 파티션 축소가 완료되면 '할당되지 않음'이라는 빈공간이 생깁니다.
 Linux를 설치하기 위해서는 '파티션을 할당되지 않음' 상태로 해야합니다.
( Linux를 설치하시려면 NTFS 라고 잡혀있는 공간이 아닌 드라이브명이 지정이 되지 않은 아예 텅빈. 공간이 필요합니다. 포맷이라는 것은 한마디로 자기가 사용할 파일 시스템으로 만드는 것입니다. 따라서 윈도우즈에서 포맷을 하면 window 파일 시스템으로 잡히게 됩니다. 그렇기 때문에 아예 포맷을하지 않고, 드라이브로도 잡히지 않은 텅빈 공간이 필요합니다.
기본적으로 Linux 파일시스템 형태가 다르기 때문입니다.
 (Linux는 EXT3 or EXT4등을 사용)



Linux(Fedora13 설치)

- Linux (Fedora 13)을 DVD로 제작하여 설치함 - 

1단계.
 
Linux (Fedora 13) DVD를 넣고 부팅한 첫번째 화면입니다.
몇 가지의 메뉴가 보이지만 Linux(Fedora 13)를 처음 설치하는 경우,
"Install or upgrade an existing system"을 선택합니다.


2단계.
 
DVD의 오류검사를 합니다.
검사를원하면 Yes를 원치않으면 Skip을 선택하여 넘어갑니다.


3단계.

Fedora 13의 설치의 첫 화면입니다. 하단에 있는 "Next"를 눌러 넘어갑니다.


4단계.


설치를 할 동안만 사용할 언어를 선택하는 것입니다.
기본적으로 English로 되어있지만 여러 국가의 언어를 선택할 수 있습니다.


5단계.
 

 Keyboard 시스템의 언어를 선택합니다. 
이것도 기본은 U.S.English로 되어있지만 여러 국가의 언어로 선택하여 설치할 수 있습니다.


6단계.

설치할 divice가 어떤 것인지를 묻는 단계인데, 일반 하드디스크에 설치를 한다면
"Basic Stoage Divices"를 서택하면 됩니다.


7단계.

 호스트명을 설정합니다.
(기본으로 해도 설치에는 지장이 없습니다.)


8단계.


본인이 속한 시간대에 근접한 도시를 선택하시면 됩니다.


9단계.

Root의 암호를 설정합니다.
( Root란 관리자 계정을 말하는 것으로써 관리자 계정의 암호를 설정하는 단계입니다.)


10단계.

Installation type을 결정하는 단게입니다.
- 하드디스크 모두를 Linux로 이용할 것이라면 첫번째 "Use All Space"를 선택.
- 기존에 Linux가 설치되어 있고 그거만 지우고 싶다면 "Replace Existing Linux System"을 선택.
- 빈 공간을 사용하여 Linux를 설치하고자 한다면 "Use Free Space" 선택.
- 직접 파티션을 하여 설치를 하고자 한다면 "Creat Custom Layout" 선택.
 ( "Use Free Space"와  "Creat Custom Layout"는 앞서 window에서 파티션하여
생성한  "할당되지 않음"이란 빈공간을 활용하게 됩니다. )


- 아래 설명은 "Use Free Space"를 선택했을 경우입니다. -


11단계.

설정한 파티션을 디스크에 기록하는 부분입니다.
"디스크에 변경 사항 기록"을 선택합니다.


12단계.

현재 시스템에 Windows7과 Linux(Fedora 13)의 두가지 OS가 설치 되어있기 때문에 부트로더를
설정해 주어야 합니다.

- Other는 여기서 Windows7을 의미하는 것입니다.
( 반드시 해야 하는 건 아니지만 Other클릭 후 편집을 눌러 레이블을 Windows 7로 바꾸어
 주는 것이 나중에 부팅시에 부팅을 원하는 OS의 구분이 쉽습니다. )

- 기본부팅을 설정은 본인이 원하는 OS를 선택하면 됩니다.
( 저같은 경우엔 Windows7을 기본으로 할 것이므로 Windows 7부분을 체크하여 기본으로
 설정하였습니다. )


13단계.

패키지 설치 타입을 선택하는 단계입니다.
본인에게 맞는 것을 선택하시면 됩니다. ( 설치 후에도 추가로 설치가능. )

- 그림에서 보면 지금 사용자 설정이라는 메뉴가 있는데 이 메뉴를 선택하면 Fedora13의 전체
패키지 리스트를 볼 수 있고, 가가에 대하여 설치를 할 것인지 선택할 수 있습니다.


14단계.

Linux(Fedora13)과 패키지의 설치가 진행됩니다.


15단계.

-설치가 끝나게 되면 재부팅을 하게 되고 ,
 재부팅이 이루어진 다음 Fedora 13 설정 메뉴들이 나옵니다.



환영 메세지와 라이센스 정보가 나오는데 간단히 한번 읽어 보고 넘어가면 됩니다.


사용자 생성 메뉴가 나오게됩니다.
사용자 이름과, 성명, 암호등을 입력하면 됩니다.
- 이번 단계에서 User를 추가할 수 있습니다, ( 나중에 User는 언제든지 추가할 수 있습니다. )


날짜와 시간을 설정하는 메뉴입니다. 현재의 시간과 날짜를 설정하면 됩니다.


하드웨어 프로파일을 Fedora project 사이트로 전송하는 메뉴인데, 전송을 해도되고 안해도 됩니다.


설정을 모두 마치면 Linux(Fedora 13)에 접속한 모습입니다.
앞서 설정한 사용자 계정을 선택하고 암호를 입력하면 오른쪽 그림과 같이
OS를 사용할 수 있습니다.



Linux(Fedora 13) 네트워크 설정

1단계.



시스템  >>  네트워크 선택

2단계.



네트워크를 실행시키면 아래와 같은 화면이 나옵니다. 그 다음 "편집 버튼" 선택합니다.


편집 버튼을 클릭하면 위와 같은 화면이 나오게 됩니다.
"NetworkManger에 의해 관리" 라는 메뉴를 활성화 시킵니다.
( 이 옵션을 활성화 시키면  NetworkManager가 이더넷 장치를 관리 하게 되고, 시스템 리부팅 시에도 NetworkManager에 의하여 이더넷 장치가 활성화 되게
됩니다. )

- "정적으로 설정된 IP주소"를 사용하려면 네트워크 구성 정보에 맞게 IP어드레스를 설정함.
- "IP 주소 설정을 자동으로 얻기" 사용하면 IP어드레스를 따로 설정할 필요없음.