dmesg에 있는 정보들은 어디서 얻어오고 출력하나요?
글쓴이: ism2004_bisket / 작성시간: 금, 2004/01/09 - 3:59오후
저는 지금 리눅스를 공부하고 있는 학생입니다..
부팅에 대해 공부를 하고있는데. 여러가지 문서들을 찾아보았지만. 명확하게 이해가 잘 되지 않습니다.
부팅과정에 first.s -> second.s -> setup.s -> head.s -> kernel load..
순으로 되는것인지 님들의 각 파일 마다의 자세한..^^(뭐가 무었을 하는지...) 설명을 부탁드립니다.
그리고 dmesg에 나와있는 각종 정보들은 kernel/setup.c 에 일부분의 출력라인이 있는데 그 정보들은 커널이 시작되면서 체크하여 얻어지는 것인지..
아니면 커널 로드전의 어셈부분에서 체크하여 단순히 레지스터 등에 저장해놓았다가 커널 로드후 단지 프린트만 해주는 것인지... 궁금합니다...
늘 행복하세요..^^*
Forums:
$ ltrace dmesg$ strace dmesg이거 두개 실행
$ ltrace dmesg
$ strace dmesg
이거 두개 실행 시켜 보시면 금방 알 수 있습니다...
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
봐도 잘 모르겠어요...
ltrace 는 버퍼?에 putchar로 한 글자씩 쭈욱 넣어준거 같고..
strace 는 write()를 써서 한라인씩 출력하는거 같다는거 빼고는...
모가 몬지 잘 모르겠습니다..
또한 이 메세지들을 단순히 출력만이 아니라(출력은 syscall이 필요하니? 커널이 로드된 후 할래나?)...
언제 체크하는지 커널이 로드될때 하는지 아니면 커널 로드 전에 하는지 알고 싶습니다. 아니면 커널이 로드되면서 하는지.....
ism__
...
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 부분에 보면은 시스템의 상태를 저장한 파일이 있을겁니다.
그기에서 자료를 읽어 들인 후 출력을 하는것 같네요...
지금 리눅 머신이 있으면 좀 더 정확하게 어떤 파일인지를 말씀을 드리겠지만...
리눅을 공부하는 차원에서...
한번 /proc 부분을 뒤져보세요.
시스템의 거의 모든 정보가 다 들어 있습니다...
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
redhat의 경우는 /var/log/dmesg 파일이 있습니다.dm
redhat의 경우는 /var/log/dmesg 파일이 있습니다.
dmesg를 실행 하면 이 파일을 보여주는 것 같습니다.
다른 시스템의 경우도 비슷하지 않을 까요?
님들의 많은 관심 덕에...boot과정을 대충 이해하고...이제.
님들의 많은 관심 덕에...
boot과정을 대충 이해하고...이제..
/etc/rc.d/rc.sysinit분석으로 들어갑니다..^^
만만치 않을 거 같네요........
근데 한가지 의문사항이....dmesg에서 쭈르륵 나오는 장치정보들은 과연...누가 찾는 건가요? 커널이? 아니면.. BIOS가 수집한 정보들을 그냥 넘겨주는 것인지(BIOS가 그케 많은 일들을......)..........
위에..anfl(무리)님이 BIOS에서 수집한 정보를 넘겨준다고 했는데......"BIOS가 수집한 정보" 라는게 과연 무었일까요? ^^
그래도....... shoveling을 즐기게 되기를 소원하며....
오늘 눈이 와요....모두들..즐눈싸움 하세요.
ism__
...
kernel에서 출력하는 메세지 입니다.
POSIX conformance testing by UNIFIX
위 메세지 까지는 start_kernel 내에서 호출하는 function에서 출력하는 메세지이고 그 밑으로는 init kernel thread의 do_basic_setup()에서 출력하는 메세지 입니다.
기타 하드웨어 관련 메세지는 do_initcalls()에서 kernel에 static으로 설정된 device driver의 초기화 코드를 수행하면서 또는 module이 load 되면서 생기는 메세지입니다.
댓글 달기