dmesg에 있는 정보들은 어디서 얻어오고 출력하나요?

ism2004_bisket의 이미지

저는 지금 리눅스를 공부하고 있는 학생입니다..

부팅에 대해 공부를 하고있는데. 여러가지 문서들을 찾아보았지만. 명확하게 이해가 잘 되지 않습니다.

부팅과정에 first.s -> second.s -> setup.s -> head.s -> kernel load..

순으로 되는것인지 님들의 각 파일 마다의 자세한..^^(뭐가 무었을 하는지...) 설명을 부탁드립니다.

그리고 dmesg에 나와있는 각종 정보들은 kernel/setup.c 에 일부분의 출력라인이 있는데 그 정보들은 커널이 시작되면서 체크하여 얻어지는 것인지..

아니면 커널 로드전의 어셈부분에서 체크하여 단순히 레지스터 등에 저장해놓았다가 커널 로드후 단지 프린트만 해주는 것인지... 궁금합니다...

늘 행복하세요..^^*

서지훈의 이미지

$ ltrace dmesg
$ strace dmesg
이거 두개 실행 시켜 보시면 금방 알 수 있습니다...

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

ism2004_bisket의 이미지

ltrace 는 버퍼?에 putchar로 한 글자씩 쭈욱 넣어준거 같고..

strace 는 write()를 써서 한라인씩 출력하는거 같다는거 빼고는...

모가 몬지 잘 모르겠습니다..

또한 이 메세지들을 단순히 출력만이 아니라(출력은 syscall이 필요하니? 커널이 로드된 후 할래나?)...

언제 체크하는지 커널이 로드될때 하는지 아니면 커널 로드 전에 하는지 알고 싶습니다. 아니면 커널이 로드되면서 하는지.....

ism__

anfl의 이미지

first.s -> second.s -> setup.s -> head.s -> kernel load..

lilo로 부팅시 위 순서가 맞습니다.
BIOS에서 first.S를 메모리(0x7C00)에 올리고 제어가 first.S의 시작 부분으로 넘어갑니다. first.S는 second.S를 로드하고 제어를 second.S에게 넘깁니다.

그러면 second.S는 시리얼 설정을 하고 키보드 버퍼를 비우고 키보드 변환 테이블을 로드하는등의 잡스러운 일을 하고 최종적으로 kernel을 로드합니다.
물론 그전에 setup.S도 로드합니다.

setup.S는 확장 메모리 사이즈를 구하고 키보드를 설정하며 vga를 설정합니다. 그리고 가장 주요한 역활은 보호모드로 전환을 하는것입니다.

head.S는 kernel의 압축을 해제하고 메모리의 특정한 위치(0x100000)로 옮기는 일을 수행하고 페이징을 활성화하고 BIOS에서 수집된 정보를 kernel 뒷부분으로 옮기고 제어를 kernel로 넘깁니다.

말씀하신 arch/i386/kernel/setup.c의 출력 메세지는 아마도 e820 map 출력 메세지를 말씀하는것 같습니다. 그부분은 kernel에서 BIOS function 0xe820으로 메모리를 체크하고 나서 memory map을 출력해주는 부분입니다.

그리고 나머지 각 메세지는 kernel의 각부분 부분에서 printk로 출력해주는 것입니다.

dmesg에서 나오는 모든 메세지는 kernel에서 나오는 메세지이고 그 이전에 나오는 메세지가 에셈 코드에서 나오는 메세지 입니다.


서지훈의 이미지

아마 /proc 부분에 보면은 시스템의 상태를 저장한 파일이 있을겁니다.
그기에서 자료를 읽어 들인 후 출력을 하는것 같네요...
지금 리눅 머신이 있으면 좀 더 정확하게 어떤 파일인지를 말씀을 드리겠지만...
리눅을 공부하는 차원에서...
한번 /proc 부분을 뒤져보세요.
시스템의 거의 모든 정보가 다 들어 있습니다...

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

dreamer의 이미지

redhat의 경우는 /var/log/dmesg 파일이 있습니다.
dmesg를 실행 하면 이 파일을 보여주는 것 같습니다.
다른 시스템의 경우도 비슷하지 않을 까요?

ism2004_bisket의 이미지

님들의 많은 관심 덕에...

boot과정을 대충 이해하고...이제..

/etc/rc.d/rc.sysinit분석으로 들어갑니다..^^

만만치 않을 거 같네요........

근데 한가지 의문사항이....dmesg에서 쭈르륵 나오는 장치정보들은 과연...누가 찾는 건가요? 커널이? 아니면.. BIOS가 수집한 정보들을 그냥 넘겨주는 것인지(BIOS가 그케 많은 일들을......)..........
위에..anfl(무리)님이 BIOS에서 수집한 정보를 넘겨준다고 했는데......"BIOS가 수집한 정보" 라는게 과연 무었일까요? ^^

그래도....... shoveling을 즐기게 되기를 소원하며....

오늘 눈이 와요....모두들..즐눈싸움 하세요.

ism__

anfl의 이미지

kernel에서 출력하는 메세지 입니다.
POSIX conformance testing by UNIFIX
위 메세지 까지는 start_kernel 내에서 호출하는 function에서 출력하는 메세지이고 그 밑으로는 init kernel thread의 do_basic_setup()에서 출력하는 메세지 입니다.

기타 하드웨어 관련 메세지는 do_initcalls()에서 kernel에 static으로 설정된 device driver의 초기화 코드를 수행하면서 또는 module이 load 되면서 생기는 메세지입니다.


댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.