dmesg ( boot message analysis )

woodsmen의 이미지

http://blog.naver.com/orion_203 에서 펌..

이 글의 바탕이 되는 커널 버전은 2.6.7이며 시스템은 펜티엄 셀러론 2.4Ghz, 512RAM이다.
참고로, 부팅메시지는 커널 컴파일과 구성된 하드웨어에 따라서 다르게 출력된다는 것을 명심하라.

-- boot message confirm

#dmesg | less

리눅스는 부팅하는 순간에 syslogd를 구동하여 부팅 메시지를 저장한다. 저장되는 파일의 경로는 /var/log/dmesg 혹은 /var/log/messages파일도 기록이 된다.

BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 000000001fff0000 (usable)
BIOS-e820: 000000001fff0000 - 000000001fff8000 (ACPI data)
BIOS-e820: 000000001fff8000 - 0000000020000000 (ACPI NVS)
BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved)
BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
BIOS-e820: 00000000fff00000 - 0000000100000000 (reserved)
511MB LOWMEM available.
found SMP MP-table at 000fba20
On node 0 totalpages: 131056
DMA zone: 4096 pages, LIFO batch:1
Normal zone: 126960 pages, LIFO batch:16
HighMem zone: 0 pages, LIFO batch:1

처음에 보여지는 메시지는 메모리에 관한 내용이다. 바이오스 메모리 맵, 사용할수 있는 용량, DMA 영역의 페이지수와 일반 영역의 페이지수등을 보여주고 있다.

DMI 2.3 present.
ACPI: RSDP (v000 AMI ) @ 0x000f9f40
ACPI: RSDT (v001 AMIINT INTEL845 0x00000010 MSFT 0x00000097) @ 0x1fff0000
ACPI: FADT (v001 AMIINT INTEL845 0x00000011 MSFT 0x00000097) @ 0x1fff0030
ACPI: MADT (v001 AMIINT INTEL845 0x00000009 MSFT 0x00000097) @ 0x1fff00c0
ACPI: DSDT (v001 INTEL BROKDLEG 0x00001000 MSFT 0x0100000d) @ 0x00000000
ACPI: Local APIC address 0xfee00000
ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled)
Processor #0 15:2 APIC version 20
ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] disabled)
Using ACPI for processor (LAPIC) configuration information
Intel MultiProcessor Specification v1.4
Virtual Wire compatibility mode.
OEM ID: INTEL Product ID: I845G APIC at: 0xFEE00000
I/O APIC #2 Version 32 at 0xFEC00000.
Enabling APIC mode: Flat. Using 1 I/O APICs

ACPI(Advanced Configuration and Power Interface)는 컴퓨터의 전원관리규격이다. 지금도 그렇긴하지만 APM이라고 하여 바이오스 레벨에서 절전기능을 수행한다. 문제는 바이오스 레벨이 아닌 운영체제 레벨에서 어떻게 효과적으로 전원관리를 하는가 인데 이 대한으로 ACPI가 나오게 된것이다. 그런데 문제는 아직 표준이 아니라는 것이다. 그래서 지금은 거의 다 ACPI를 지원하지만 예전에는 지원하는 것도 있었고 지원하지 않는 메인보드로 두 종류가 공존하기도 했다. 커널 컴파일시에는 배터리, CPU쿨린팬까지 제어할수 있는 옵션을 제공한다. 절전기능을 다루는만큼 초기 커널 인식시에 패닉(Panic)현상을 일으키는 요인이 되기도 한다.

APIC(Advanced Programmable Interrupt Controller)A은 기존의 PC-AT기반의 인터럽트 관리 기능의 한계를 넘기 위해서 새로 만들어진 규격이다. 프로세서의 속도가 AT 시절 이후로 몇 백배 이상 빨라졌지만, 기본적인 구조는 크게 바뀌지 않았다. 예를들어, 일반 PC에서 가질수 있는 장치의 수는 15개 정도이다. 왜냐? 장치마다 인터럽트를 할당받아야 하는데 PC-AT기반의 인터럽트에서는 최대 15개까지만 할당할수 있었다. 하지만 시간이 흐르고 컴퓨터가 발전하면 보다 많은 주변장치를 장착하게 되었는데 문제는 인터럽트 충돌로 인해서 많은 장치를 장착하기가 쉽지 않았다. 그외에도 여러가지 한계들이 드러나게 된다.그래서, 새로운 개념의 인터럽트 컨트롤러가 필요하게 되고, APIC이란게 제시됩니다. APIC은 로컬 APIC이라는 것과 I/O APIC이라는 것으로 나눈다. 로컬 APIC은 각각의 프로세서에 인터럽트 신호를 전달하고, 멀티 프로세서 시스템도 고려해서 설계되어 있다. I/O APIC은 시스템당 최대 8개까지 있을 수 있고, 각종 입출력 장치로부터 인터럽트 신호를 모아서 로컬 APIC으로 전달한다. 인텔의 경우 시스템 당 보통 24개의 인터럽트를 가지도록 설계하고 있지만, 여러개의 I/O APIC을 사용할 경우 시스템 하나가 수백개의 IRQ를 가지게 설계할 수도 있다.

마지막 메시지에서 보았듯이 1개의 I/O APIC을 찾았다고 나온다.

Processors: 1
Built 1 zonelists
Kernel command line: auto BOOT_IMAGE=linux4 ro BOOT_FILE=/boot/bzImage-2.6.7
Initializing CPU#0
PID hash table entries: 2048 (order 11: 16384 bytes)
Detected 2406.281 MHz processor.
Using tsc for high-res timesource
Console: colour VGA+ 80x25
Memory: 516012k/524224k available (1910k kernel code, 7448k reserved, 808k data,
356k init, 0k highmem)
Checking if this processor honours the WP bit even in supervisor mode... Ok.
Calibrating delay loop... 4751.36 BogoMIPS

Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
Mount-cache hash table entries: 512 (order: 0, 4096 bytes)

CPU는 1개 동작클럭은 2406.281 MHz 라고 정확이 나오고 있다. 그리고 콘솔(Console)은 colour VGA+ 로서 가로 80라인 세로 25라인이 세팅되어 있다고 나오고 있다. 메모리에 대한 정보도 보이는데 524224k에서 516012k를 사용할수 있다고 나오는데, 차이가 나는 부분은 커널부분이 소모하고 있다. 나머지 부분은 캐쉬 해쉬 테이블에 대한 내용이다.

CPU: After generic identify, caps: bfebfbff 00000000 00000000 00000000
CPU: After vendor identify, caps: bfebfbff 00000000 00000000 00000000
CPU: Trace cache: 12K uops, L1 D cache: 8K
CPU: L2 cache: 128K
CPU: After all inits, caps: bfebfbff 00000000 00000000 00000080
Intel machine check architecture supported.
Intel machine check reporting enabled on CPU#0.
CPU0: Intel P4/Xeon Extended MCE MSRs (12) available
CPU0: Thermal monitoring enabled
CPU: Intel(R) Celeron(R) CPU 2.40GHz stepping 07
Enabling fast FPU save and restore... done.
Enabling unmasked SIMD FPU exception support... done.
Checking 'hlt' instruction... OK.
enabled ExtINT on CPU#0

ESR value before enabling vector: 00000000
ESR value after enabling vector: 00000000

위의 부분은 CPU에 대한 내용이다. 일단 눈데 들어 오는 것은 L1, L2캐쉬가 눈에 뛴다. 그리고 각종 CPU내의 기능과 정보를 함께 출력해주고 있다.

ENABLING IO-APIC IRQs
Setting 2 in the phys_id_present_map
...changing IO-APIC physical APIC ID to 2 ... ok.
init IO_APIC IRQs
IO-APIC (apicid-pin) 2-0, 2-10, 2-11, 2-20, 2-21, 2-22 not connected.
..TIMER: vector=0x31 pin1=2 pin2=0
number of MP IRQ sources: 24.
number of IO-APIC #2 registers: 24.
testing the IO APIC.......................
IO APIC #2......
.... register #00: 02000000
....... : physical APIC id: 02
....... : Delivery Type: 0
....... : LTS : 0
.... register #01: 00178020
....... : max redirection entries: 0017
....... : PRQ implemented: 1
....... : IO APIC version: 0020
.... register #02: 00000000
....... : arbitration: 00
.... register #03: 00000001
....... : Boot DT : 1
.... IRQ redirection table:
NR Log Phy Mask Trig IRR Pol Stat Dest Deli Vect:
00 000 00 1 0 0 0 0 0 0 00
01 001 01 0 0 0 0 0 1 1 39
02 001 01 0 0 0 0 0 1 1 31
03 001 01 0 0 0 0 0 1 1 41
04 001 01 0 0 0 0 0 1 1 49
05 001 01 0 0 0 0 0 1 1 51
06 001 01 0 0 0 0 0 1 1 59
07 001 01 0 0 0 0 0 1 1 61
08 001 01 0 0 0 0 0 1 1 69
09 001 01 0 0 0 0 0 1 1 71
0a 000 00 1 0 0 0 0 0 0 00
0b 000 00 1 0 0 0 0 0 0 00
0c 001 01 0 0 0 0 0 1 1 79
0d 001 01 0 0 0 0 0 1 1 81
0e 001 01 0 0 0 0 0 1 1 89
0f 001 01 0 0 0 0 0 1 1 91
10 001 01 1 1 0 1 0 1 1 99
11 001 01 1 1 0 1 0 1 1 A1
12 001 01 1 1 0 1 0 1 1 A9
13 001 01 1 1 0 1 0 1 1 B1
14 000 00 1 0 0 0 0 0 0 00
15 000 00 1 0 0 0 0 0 0 00
16 000 00 1 0 0 0 0 0 0 00
17 001 01 1 1 0 1 0 1 1 B9
IRQ to pin mappings:
IRQ0 -> 0:2
IRQ1 -> 0:1
IRQ3 -> 0:3
IRQ4 -> 0:4
IRQ5 -> 0:5
IRQ6 -> 0:6
IRQ7 -> 0:7
IRQ8 -> 0:8
IRQ9 -> 0:9
IRQ12 -> 0:12
IRQ13 -> 0:13
IRQ14 -> 0:14
IRQ15 -> 0:15
IRQ16 -> 0:16
IRQ17 -> 0:17
IRQ18 -> 0:18
IRQ19 -> 0:19
IRQ23 -> 0:23
.................................... done.
Using local APIC timer interrupts.
calibrating APIC timer ...
..... CPU clock speed is 2405.0128 MHz.
..... host bus clock speed is 100.0213 MHz.

APIC에 대해 활성화 시키는 모습이다. 위에서 언급했듯이 총 IRQ개수가 24로 늘어나 있다.

PCI: PCI BIOS revision 2.10 entry at 0xfdb81, last bus=2
PCI: Using configuration type 1
mtrr: v2.0 (20020519)
SCSI subsystem initialized
PCI: Probing PCI hardware
PCI: Probing PCI hardware (bus 00)
PCI: Ignoring BAR0-3 of IDE controller 0000:00:1f.1
PCI: Transparent bridge - 0000:00:1e.0
PCI: Using IRQ router PIIX/ICH [8086/24c0] at 0000:00:1f.0
PCI->APIC IRQ transform: (B0,I29,P0) -> 16
PCI->APIC IRQ transform: (B0,I29,P1) -> 19
PCI->APIC IRQ transform: (B0,I29,P2) -> 18
PCI->APIC IRQ transform: (B0,I29,P3) -> 23
PCI->APIC IRQ transform: (B0,I31,P0) -> 18
PCI->APIC IRQ transform: (B0,I31,P1) -> 17
PCI->APIC IRQ transform: (B0,I31,P1) -> 17
PCI->APIC IRQ transform: (B1,I0,P0) -> 16
PCI->APIC IRQ transform: (B2,I1,P0) -> 17
PCI->APIC IRQ transform: (B2,I2,P0) -> 18
PCI->APIC IRQ transform: (B2,I2,P0) -> 18

PCI의 버스 시스템에대해 설정하는 부분이다. IRQ를 APIC IRQ로 전환하고 있다.

Machine check exception polling timer started.
IA-32 Microcode Update Driver: v1.13
apm: BIOS version 1.2 Flags 0x03 (Driver version 1.16ac)
udf: registering filesystem
Initializing Cryptographic API
Real Time Clock Driver v1.12
hw_random: RNG not detected
Linux agpgart interface v0.100 (c) Dave Jones
agpgart: Detected an Intel 845G Chipset.
agpgart: Maximum main memory to use for agp memory: 439M
agpgart: AGP aperture is 128M @ 0xe0000000
[drm] Initialized radeon 1.11.0 20020828 on minor 0: ATI Technologies Inc RV280
[Radeon 9200]
Using anticipatory io scheduler
Floppy drive(s): fd0 is 1.44M
FDC 0 is a post-1991 82077
loop: loaded (max 8 devices)
nbd: registered device at major 43
8139too Fast Ethernet driver 0.9.27
eth0: RealTek RTL8139 at 0xe0826f00, 00:02:2a:d5:2a:54, IRQ 17
eth0: Identified 8139 chip type 'RTL-8139C'

흥미로운게 많이 보이는데 MCE(Machine Check Exception)과 IA-32 Microcode, apm등이 눈에 뛴다. MCE는 CPU상의 잘못된 연산이나 오류들을 탐지하는 기능을 한다. 또한 IA-32는 CPU에게 직접적인 실행코드를 입력하거나 할수 있다. 모두 펜티엄 프로 이상에서 지원되기 시작한 것이다.

밑으로 내려오면서 그래픽에 관한 내용이 조금 보인다. AGP GART인데, 그냥 AGP에 대한 인터페이스라고 보면된다. AGP를 지원하는 칩셋(845)도 보인다. 그리고 그래픽 카드에 대한 정보도 나오고 있다.(RV280 GPU를 장착한 Radeon 9200이라는 사실. ㅡ.ㅡ;)

그리고 플로피드라브와 루프(loop) 디바이스, 네트워크 어댑터(RealTek RTL8139)가 설정되어 있음을 보이고 있다.

Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
ICH4: IDE controller at PCI slot 0000:00:1f.1
ICH4: chipset revision 2
ICH4: not 100% native mode: will probe irqs later
ide0: BM-DMA at 0xfc00-0xfc07, BIOS settings: hda:DMA, hdb:DMA
ide1: BM-DMA at 0xfc08-0xfc0f, BIOS settings: hdc:DMA, hdd:DMA
hda: WDC WD600JB-00CRA1, ATA DISK drive
hdb: QUANTUM FIREBALL EX6.4A, ATA DISK drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
hdc: SAMSUNG CD-R/RW DRIVE SW-212B, ATAPI CD/DVD-ROM drive
hdd: SAMSUNG CD-ROM SC-152A, ATAPI CD/DVD-ROM drive
ide1 at 0x170-0x177,0x376 on irq 15
hda: max request size: 128KiB
hda: 117231408 sectors (60022 MB) w/8192KiB Cache, CHS=65535/16/63, UDMA(33)
hda: hda1 hda2 < hda5 hda6 hda7 >
hdb: max request size: 128KiB
hdb: 12594960 sectors (6448 MB) w/418KiB Cache, CHS=13328/15/63, UDMA(33)
hdb: hdb1 hdb2 hdb3
hdc: ATAPI 32X CD-ROM CD-R/RW drive, 8192kB Cache, DMA
Uniform CD-ROM driver Revision: 3.20
hdd: ATAPI 52X CD-ROM drive, 128kB Cache, DMA
ide-floppy driver 0.99.newide
mice: PS/2 mouse device common for all mice
serio: i8042 AUX port at 0x60,0x64 irq 12
input: ImPS/2 Generic Wheel Mouse on isa0060/serio1
serio: i8042 KBD port at 0x60,0x64 irq 1
input: AT Translated Set 2 keyboard on isa0060/serio0
Advanced Linux Sound Architecture Driver Version 1.0.4 (Mon May 17 14:31:44 2004
UTC).
specify port
PCI: Setting latency timer of device 0000:00:1f.5 to 64
intel8x0_measure_ac97_clock: measured 49373 usecs
intel8x0: clocking to 48000
ALSA device list:
#0: Intel 82801DB-ICH4 at 0xdffffa00, irq 17

위의 메시지는 IDE장치와 ODD장치, 입력장치, 사운드 장치에 관한것이다. IDE장치에 대한 제조사, 모델, 물리적인 능력(용량, 실린더, 섹터, UDMA등), 그리고 파티션 현황등을 보여주고 있다. ODD장치도 마찬가지로 여러정보를 보여주고 있다. 여기서 한가지 IDE장치와 ODD장치에 관한 것을 자세히 보면 리눅스에서 이들 장치들을 어떻게 부르고 있는 알수 있다. hda, hdb, hdc, hdd등으로 부르고 있으며 파티션이 존재할 경우 hda1, hda2등으로 부르고 있다는 사실이다. (전에 한번 말 했었다.)입력장치로는 PS/2와 Serial장치가 준비되어 있으며 마우스(mice)는 PS/2타입이며 키보드는 AT호환 키보드로 나와 있다. 사운드는 커널 2.6으로 올라오면서 새롭게 바뀐 내용인데 ALSA(Advanced Linux Sound Architecture) 드라이버가 설치되어 있고 사운드 하드웨어는 인텔칩셋에 내장된 AC97이다.

대충 커널 부팅 메시지를 살펴 봤다. 정말 간단히 알아본 것이다. 중간에 나왔던 CPU관련 기능(MCE, MSR, MTRR, HLT, FPU)과 APIC, ACPI등은 좀더 자세히 알아들 필요가 있다. 리눅스는 사용자에게 최대한 정보를 알려주려고 한다. 사용자들은 이러한 정보를 잘 알아들 필요가 있다. 특히 커널 부팅 메시지는 커널의 설정 상태를 극명히 보여는 것이서 새로운 커널을 이식했을 경우 부팅 메시지를 먼저 살펴봐야한다. 커널 설정에 따라서 위의 메시지들이 모두 다르게 출력되기 때문이다. (사운드 카드가 있어도 커널 설정시 사운드를 Enable하지 않으면 부팅 메시지에도 나타나지 않는다.)

이렇게 커널이 메시지를 뿌리고 나면 커널은 이제 완전히 메모리에 올라오게 되고 시스템을 장악한다. 그리고나서 최초의 프로세스이자 모든 프로세스의 부모 프로세스인 'init'을 가동하면서 사용자에게서 멀어지며 모습을 감춘다.

댓글

wariua의 이미지

링크를 기억해 두려다가 잘못된 글에서 트랙백을 날려 버렸습니다. 위의 "test" 삭제해 주셔도 괜찮습니다;;

언제 한번 살펴봐야지 하고 미루고만 있던 내용인데 이렇게 정리가 되어 있으니 참 탐스럽네요. 좋은 포스팅 감사드립니다 :)
----
$PWD `date`

$PWD `date`

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.