'Education'에 해당되는 글 58건

  1. 2009.11.24 oops 강제 발생 by 초상큼발랄 1
  2. 2009.11.18 vim 설정 by 초상큼발랄
  3. 2009.11.18 커널 소스 트리 by 초상큼발랄
  4. 2009.11.04 madplayer by 초상큼발랄 4
  5. 2009.11.03 mount by 초상큼발랄 7
  6. 2009.10.28 root passwd by 초상큼발랄
  7. 2009.10.28 명령어 by 초상큼발랄
  8. 2009.10.22 명령어 수행 by 초상큼발랄 2
  9. 2009.10.22 Interrupt by 초상큼발랄 2
  10. 2009.10.22 Scheduling by 초상큼발랄

< Kernel 상에서 oops 메시지를 띄우고(강제 발생) 분석>

 

1.     수동 커널 트랩 추가

리눅스에서, 시스템 충돌을 디버깅하는 전통적인 방법은 Oops 메시지의 상세를 분석하는 것이었다. 상세를 포착하면 메시지는 ksymoops 유틸리티로 전달된다. 이것은 코드를 명령어로 변환하고 스택 값을 커널 심볼로 변환한다. 많은 경우에, 오류의 원인을 파악할 수 있는 충분한 정보가 된다. Oops 메시지에는 코어 파일이 포함되어 있지 않다.

 

Oops 메시지: 기본적으로 커널이 심각한 문제를 직면했을 때, 커널이 생성한 정보이다.

        ` NULL 포인터 역참조벗어난 메모리 영역 참조와 같은 버그와 관련된 코드

 

A.     수동 커널 트랩 추가 과정

* Version: Kernel 2.6.29.3 원시 코드를 사용 (경로: /usr/src/ 폴더에 저장)

 

$ vi /usr/src/linux-2.6.29.3/kernel/sysct1.c

// kern_table 배열에 추가 내용

           {

             .ctl_name = KERN_TRAP_KERNEL,

             .procname = "trap_kernel",

             .data     = &trap_kernel_value,

             .maxlen   = sizeof (int),

             .mode     = 0644,

             .proc_handler = &proc_dointvec_trap_kernel,

          },

$ vi /usr/src/linux-2.6.29.3/kernel/sysct1.c

// 파일 수정 추가

        EXPORT_SYMBOL (proc_dointvec_trap_kernel);

 

$ vi /usr/src/linux-2.6.29.3/include/linux/sysctl.h

//헤더 파일에 선언 추가

        KERN_TRAP_KERNEL = 77;

         





 

$ vi /usr/src/linux-2.6.2/kernel/sysct1.c

           // “proc_dointvec_trap_kernel기존에 사용하는 proc_dointvec를 수정한 처리기추가




2.     커널 Oops 메시지 분석

 

A.     oops 기본 자료

                   /usr/src/linux-2.6.29.3/Documentation

 

B.     oops 출력

- 커널에 대한 오류 발생시, oops를 보낸다.

커널은 비정상적(inconsistent)인 상태

                  #oops가 발생하고 나면 커널은 더 이상 진행하지 못하고 패닉(panic)상태가 됨

                  #시스템 즉시 정지

                              idle 태스크 (pid 0) , init 태스크 (pid 1)

패닉상태, 더 이상 진행 못함

                              그 밖의 다른 프로세스에서 oops발생하면

커널은 프로세스 종료, 계속 일 진행

- 콘솔에 오류 메시지 출력

- 레지스터의 내용을 덤프

- 백트레이스(back trace)를 제공하는 것과 관련

 

C.     oops 출력 결과

$ echo 1 > /proc/sys/kernel/trap_kernel

   // write 플래그가 1로 설정

$ echo 0 > /proc/sys/kernel/trap_kernel

  // write 플래그가 0으로 설정

$ cat /proc/sys/kernel/trap_kernel

// 현재 write 플래스 표시

 

$ echo 3 > /proc/sys/kernel/trap_kernel

 

그림 4 write 플래그 설정 화면

 

 

$ vi /var/log/messages

그림 5 /var/log/messages 결과 화면

                    

$ vi /var/log/messages

                                // 출력 결과 확인

그림 6 echo 9 /var/log/messages 결과 화면

  

D.     oops 출력 결과 분석

I.       Oops: 0002 [#3] SMP - 분석

     페이지 결함 오류 코드 (page fault error code)를 나타내는 16진수

     0002 = 0010(16)

                       0: 결함이 명령어 패치 단계에서 일어나지 않음

                                    0: 커널 모드

                                    1: 쓰기

                                    0: 페이지 발견 못함

1페이지 결함 오류 코드

 

비트

0

1

0

페이지 발견 못함

보호 결함

1

읽기

쓰기

2

커널 모드

사용자 모드

3

결함이 명령어 단계에서 일어나지 않음

결함이 명령어 패치 단계에서 일어남

 

     [#3]: 마지막 재시동 이후부터 발생한 oops 숫자를 추적하는 사망 카운터 (die counter)

 

II.       Pid: 2930, comm: bash Trained: GD(2.6.29.3 #4) System Product Name분석

 

     Pid: 2930

pid 는 문제를 일으킨 사용자 영역 프로세스 ID를 알려줌

    comm.: bash Trained

          comm: 은 프로세스 이름이 bash 라는 것을 알려줌

                             trained:

 

III.     EIP: 0060: [<c043bf31>] EFLAGS: 00210246 CPU: 0 – 분석

  EIP: 32비트 x86 시스템에서 사용하는 명령 포인터

  RIP: AMD64 에서 사용하는 명령 포인터

  “0060”: CS 레지스터의 내용

 

IV.     EIP is at proc_dointvec_trap_kerenl+0x35/0x7d – 분석

  proc_dointvec_trap_kerenl+0x35/0x7d

: 커널이 EIP 주소를 사람이 이해하기 쉬운 형식으로 변환 결과

V.      Process bash (pid: 2680, ti=f5904000 task=f3050000 task.ti=f5904000)– 분석

  “Process bash (pid: 2680 “

 

3.     기타

 

A.     실습 시 문제 해결

 

* 오류 해결:

scripts/kconfig/mconf.c:91: error: static declaration of? ’current_menu’??follows non-static declaration

$ vi /usr/src/linux-2.6.2/scripts/kconfig/mconf.c

                                       // static struct menu *current_menu; 부분에 static 을 없애줌

 

헤더파일 선언

extern int do_sysctl(int __user *name, int nlen, void __user *oldval, size_t __user * oldlenp, void __usr * newval, size_t newlen)

 

< 컴파일 순서 >

$ make mrproper

$ make menuconfig

$ make

$ make modules

$ make modules_install

$ make install

 

zImage 2.6.29.3 으로 실행.

'Education > Linux Kernel' 카테고리의 다른 글

vmware 키보드 먹통  (2) 2010.07.07
인터럽트  (0) 2010.02.05
vim 설정  (0) 2009.11.18
커널 소스 트리  (0) 2009.11.18
root passwd  (0) 2009.10.28
Posted by 초상큼발랄
l

vim 설정

Education/Linux Kernel 2009. 11. 18. 17:17

$ vi ~/.vimrc


  1 set nu //소스의 왼쪽에 LineNumber 설정
  2 set ts=4 //탭 공간을 4로 지정
  3 syntax on //Highlight를 줄것인가에 대한 내용 구문마다 다른 색깔
  4 set autoindent
  5 set cindent
  6 set smartindent
  7 set ruler
  8 set hlsearch
  9 set modeline
 10 set showmatch
 11 set nobackup

'Education > Linux Kernel' 카테고리의 다른 글

인터럽트  (0) 2010.02.05
oops 강제 발생  (1) 2009.11.24
커널 소스 트리  (0) 2009.11.18
root passwd  (0) 2009.10.28
명령어  (0) 2009.10.28
Posted by 초상큼발랄
l

디렉토리

설명

arch

아키텍쳐 종속적 소스

crypto

암호화 API

Documentation

커널 소스 문서

driver

디바이스 드라이버

fs

VFS와 그 밖의 파일 시스템

include

커널 헤더 파일들

init

커널 부트와 초기화 관련

ipc

프로세스간 통신 코드

kernel

스케줄러 등 핵심 하위 시스템

lib

유틸리티 루틴

mm

메모리 관리 하위시스템과 VM

net

네트워킹 하위시스템

script

커널을 빌드하는데 사용되는 스크립트

security

리눅스 보안 모듈

sound

사운드 서브 시스템

usr

초기 유저공간 코드(initramfs)


표. 커널 소스 트리의 루트에 있는 디렉토리 목록 

'Education > Linux Kernel' 카테고리의 다른 글

oops 강제 발생  (1) 2009.11.24
vim 설정  (0) 2009.11.18
root passwd  (0) 2009.10.28
명령어  (0) 2009.10.28
Samba 설치  (0) 2009.09.24
Posted by 초상큼발랄
l

madplayer

Education/QT programming 2009. 11. 4. 20:11


리눅스 Fedora 11 에서 320B Target board 로 사용

 

1. 크로스 컴파일러

/usr/local 에 arm-linux-4.1.1 버전 복사하고 path 지정

2. zlib-1.2.3 설치

압축 풀고 ./configure

Makefile 수정
  CC=cc 를 CC=arm-linux-gcc 로 수정
  AR=ar rc 를 AR=arm-linux-ar rc 로 수정
  RANLIB=ranlib 를 RANLIB=arm-linux-ranlib 로 수정
  prefix = /usr/local 를 prefix = /usr/local 로 수정
수정후 make
  arm-linux-gcc: installation problem, cannot exec `cpp0': No such file or directory  <<  make중 에러 발생시
$ arm-linux-gcc -print-search-dirs   << 이 명령어로 경로 확인

3. madplayer 설치

  export CC=arm-linux-gcc
  export CXX=arm-linux-gcc
  export CPPFLAGS='-I../libmad-0.15.1b -I../libid3tag-0.15.1b -I../zlib-1.2.3'
  export LDFLAGS='-L../libmad-0.15.1b -L../libid3tag-0.15.1b -L../zlib-1.2.3'


libid3tag-0.15.1b 컴파일
  ./configure --host=arm-linux
  make
  cp .libs/libid3tag.a  ./

libmad-0.15.1b 컴파일
  ./configure --host=arm-linux
  make
  cp .libs/libmad.a  ./

madplay-0.15.2b 컴파일
  ./configure --host=arm-linux
  make
  file madplay(확인 부분)
  cp madplay ../bin

madplay의 라이브러리를 미리 만들어 놓은 lib 로 복사
  cd libid3tag-0.15.1b/.libs
  cp -dpR libid3tag.so* ../../lib
  cd ../../
  cd libmad-0.15.1b/.libs
  cp -dpR libmad.so* ../../lib
  cd ../../

타겟보드로 복사해서 실행!
Illegal instruction   << 이라고 뜨며 실행이 안되는경우!!
크로스 컴파일러 라이브러리와 타겟보드의 라이브러리가 맞지 않아서 생기는 문제이다
크로스 컴파일러의 라이브러리를 타겟 보드에서 수행이 되도록 맞춰주어야 한다.

4. nfs를 통해 lib bin 디렉토리를 이동

5. 노래를 bin 디렉토리에 추가

6. ./madplay 노래제목.mp3

'Education > QT programming' 카테고리의 다른 글

mount  (7) 2009.11.03
Signal 과 Slot 예제  (0) 2009.09.04
QT designer 4  (0) 2009.09.04
Posted by 초상큼발랄
l

mount

Education/QT programming 2009. 11. 3. 15:12

mount 방법

1. 우선 설정을 한다.

나는 /work/qt 폴더를 생성하여 이곳에 마운트를 시킬 것이다.

# vi /etc/exports

/work/qt *(rw, no_root_squash)

2. Host PC 설정

# cd /work/qt

/work/qt 경로로 들어갈 것이다.

# ls /usr/local/

/usr/local/ 폴더에 복사할 내용을 확인

#cp -rf /usr/local/ts-1.0 /work/qt

/usr/local/에 존재하는 ts-1.0 폴더를 /work/qt/폴더에 복사

#ls /usr/local/Trolltech/QtopiaCore-4.3.3-arm/

/usr/local/Trolltech/폴더 안에 QtopiaCore-4.3.3-arm존재유무확인

#cp -rf /usr/local/Trolltech/QtopiaCore-4.3.3-arm/lib /work/qt

/usr/local/Trolltech/QtopiaCore-4.3.3-arm/ 폴더에 있는 lib 폴더를 /work/qt 폴더에 복사

3. Target Board 설정

#mount

#mkdir /tmp

#ping 192.168.100.41

host pc의 ip address

#mount -t nfs -o nolock, rsize=1024, wsize=1024, 192.168.100.41:/work/qt /tmp

host pc의 /work/qt 폴더를 tartget board의 /tmp 폴더와 마운트

#cd /tmp

'Education > QT programming' 카테고리의 다른 글

madplayer  (4) 2009.11.04
Signal 과 Slot 예제  (0) 2009.09.04
QT designer 4  (0) 2009.09.04
Posted by 초상큼발랄
l

root passwd

Education/Linux Kernel 2009. 10. 28. 19:15

< grub 부트 로더를 사용하는 경우 >

  

   - 리눅스를 재부팅 합니다.

    - 부팅 전 ctrl+x 로 grub 화면에서 부팅할 os 에 커서를 위치 e키를 누른다.

    - 다음 화면에서 kernel 로 시작하는 곳 커서 위치 e키를 누른다.

    - 끝에 한칸 띄우고 single 를 쓰고 엔터.

    - single 이 추가된 것이 보인다. 커서 위치시키고 b를 누른다.

    - single 로 부팅되고 프롬프트가 나온다.

    - passwd (or password) 명령어로 비밀번호 변경

    - 재부팅

'Education > Linux Kernel' 카테고리의 다른 글

vim 설정  (0) 2009.11.18
커널 소스 트리  (0) 2009.11.18
명령어  (0) 2009.10.28
Samba 설치  (0) 2009.09.24
Fedora11 ( linux-2.6.29.4 ) Compile 과정  (0) 2009.09.07
Posted by 초상큼발랄
l

명령어

Education/Linux Kernel 2009. 10. 28. 17:55

` 화면 clear
ctrl + L
$ clear

` Network
(UI mode)
$ system-config-network
(Text mode)
$ setup

` 색깔 바꾸기
$ vi .bashrc  =  $ vi ~/.bashrc
$ source ~/.bashrc (우선 현재창에 임시 저장)

`  root 계정
$ cd /etc/pam.d
$ ls
$ cp gdm gdm.orgin
$ vi gdm
" != " 라인 주석 처리

# auth required pam_succeed_if.so user != root quiet

$ vi /etc/pam.d/gdm-password 주석 처리 

# auth required pam_succeed_if.so user != root quiet

` Stand alon 독립적 수행 (Memory 상주 요청 후 바로 처리)
$ service sshd restart  =  $ /etc/rc.d/init.d/sshd restart

` 항상 메모리에 떠 있어야 함 ( 관리하는 demon들의 요청을 받아 들이기 위함)
$ /etc/xinetd.d/cvs
                      rsync
` 자동 설치
$ yum -y install tftp
RPM(Redhat package Manager) : yum 의 모든 필요한 package들을 의존관계가 있는 것을 설치 해 준다.
` 해상도 조절
$ system-config-display

`
$ vi /etc/selinux/config

` 방화벽 해제
$ iptable -F
$ service iptable stop ( restart ) 

'Education > Linux Kernel' 카테고리의 다른 글

커널 소스 트리  (0) 2009.11.18
root passwd  (0) 2009.10.28
Samba 설치  (0) 2009.09.24
Fedora11 ( linux-2.6.29.4 ) Compile 과정  (0) 2009.09.07
root 계정  (0) 2009.09.07
Posted by 초상큼발랄
l

명령어 수행

1) 명령어 처리 두 단계

(1) 메모리로 부터 한 번에 하나의 명령어를 읽어 들임(fetch)(2) 읽어 들인 명령어 수행

(a)명령어 형식

0                                  3

4                                                                                                                                            15

연산 코드

주소

 

(b)정수 형식

0        1

2                                                                                                                                                                       15

부호

절대값


명령어와 데이터의 길이가 16비트일 때, 명령어 형식은 연산코드(opcode)를 위해 4비트를 할당할 경우 최대 ( 24 = 16 개 )의 서로 다른 연산코드사용 가능할 수 있으며, 명령어 형식으로 나머지 12비트를 사용할 경우 최대 ( 212 = 4,096(4K) ) 워드 까지 직접 주소 지정 가능하다.

'Education > Operating System' 카테고리의 다른 글

geekos  (3) 2010.06.27
chapter 7. Memory  (2) 2009.12.11
Interrupt  (2) 2009.10.22
Scheduling  (0) 2009.10.22
Scheduling(1)  (1) 2009.10.22
Posted by 초상큼발랄
l

1. 중첩인터럽트 처리 방법

1) 하나의 인터럽트를 처리하는 동안 다른 인터럽트를 금지(disable)시킨다.

· 금지된 인터럽트: 단순히 처리기가 인터럽트 요구 신호를 무시한다는 의미

ex) 인터럽트 금지 기간 동안에 발생한 인터럽트는 처리되지 않은 채 남겨져 있게 되고, 처리기가 인터럽트 발생을 허용한 후에 처리된다.

· 단점: 우선순위나 시간 긴급(time-critical) 요구를 고려하지 않고 있다.

2) 인터럽트 간의 우선순위를 정하고 높은 우선순위 인터럽트가 낮은 우선순위 인터럽트를 인터럽트 할 수 있도록 허용하는 것이다.

'Education > Operating System' 카테고리의 다른 글

chapter 7. Memory  (2) 2009.12.11
명령어 수행  (2) 2009.10.22
Scheduling  (0) 2009.10.22
Scheduling(1)  (1) 2009.10.22
Trace of Process  (2) 2009.10.12
Posted by 초상큼발랄
l

* First-Come-First-Served(FCFS)

- 비선점형(Non-preemptive)

- 가장 단순한 형태의 스케줄링 정책이며, FIFO(First-Input-First-Output)라고도 불린다.

- 짧은 프로세스보다는 긴 프로세스에 유리하다.

* Round-Robin(RR)

- 선점형(Preemptive)

- 시간 할당량(Time Slicing 또는 Time Quantum) 기법

- 모든 프로세스는 한 번에 정해진 시간 조각만큼만 실행 한 후 강제적으로 CPU를 빼앗는다.

* Shortest Process Next(SPN)

- 비선점형(Non-preemptive)

- 가장 짧은 프로세스를 먼저 수행

- 구현 불가능(각 프로세스가 요구하는 총 실행시간을 미리 알아야 함)

* Shortest Remaining Time(SRT)

- 선점형(Preemptive)

- 예상되는 남아 있는 실행시간이 가장 짧은 프로세스가 선택

* Highest Response Ratio Next(HRRN)

- 비선점형(Non-preemptive)

- 반환 시간(TAT) : 프로세스가 시스템에 진입한 후 대기한 시간과 실행한 시간을 모두 합쳐 결국 시스템 내에서 머문 총 시간을 의미한다.

실제 서비스 시간 대비 반환시간의 비율을 나타낸다.

- R(응답 비율) = ( time spent waiting(처리기를 기다리며 대기한 시간) + expected service time(예상되는 서비스 시간) ) / expected service time(예상되는 서비스 시간)

- 대기시간이 길어지면 R값이 커지기 때문에 스케줄러에게 보상 받는다.

- 계산시간이 복잡하고 증가면 이 알고지름의 시간 복잡성이 증가하여 오버헤드가 발생할 가능성이 크기 때문에 고려해야한다.

* 스케줄링 정책들의 비교 분석 *

프로세스

A

B

C

D

E

도착시간

0

2

4

6

8

서비스시간(Ts)

3

6

4

5

2

<FCFS>

평균

종료시간

3

9

13

18

20

반환시간(Tr)

3(3-0)

7(9-2)

9(13-4)

12(18-6)

12(20-8)

8.60

Tr/Ts

1.00

1.17

2.25

2.40

6.00

2.56

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

A

B

C

D

E

<RR q=1>

평균

종료시간

4

18

17

20

15

반환시간(Tr)

4(0-4)

16(18-2)

13(17-4)

20(20-6)

7(15-8)

10.80

Tr/Ts

1.33

2.67

3.25

2.80

3.50

2.71

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

A

B

C

D

E

<RR q=4>

평균

종료시간

3

13

11

20

19

반환시간(Tr)

3(3-0)

11(13-2)

7(11-4)

14(20-6)

11(19-8)

10.00

Tr/Ts

1.00

2.5

1.75

2.80

5.50

2.71

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

A

B

C

D

E

<SPN>

평균

종료시간

3

9

15

20

11

반환시간(Tr)

3(0-3)

7(9-2)

11(15-4)

14(20-6)

3(11-8)

7.60

Tr/Ts

1.00

1.17

2.75

2.80

1.50

1.84

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

A

B

C

D

E

<SRT>

평균

종료시간

3

15

8

20

10

반환시간(Tr)

3(0-3)

13(15-2)

4(8-4)

14(20-6)

2(10-8)

7.20

Tr/Ts

1.00

2.17

1.00

2.80

1.00

1.59

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

A

B

C

D

E

<HRRN>

평균

종료시간

반환시간(Tr)

Tr/Ts

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

A

B

C

D

E

<Feedback>

평균

종료시간

반환시간(Tr)

Tr/Ts

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

A

B

C

D

E

 

'Education > Operating System' 카테고리의 다른 글

명령어 수행  (2) 2009.10.22
Interrupt  (2) 2009.10.22
Scheduling(1)  (1) 2009.10.22
Trace of Process  (2) 2009.10.12
HAL(Hardware Abstraction Layer)  (0) 2009.10.07
Posted by 초상큼발랄
l