리눅스 커널단에서 물리적 메모리를 읽어올때 문제입니다 고수님들 도와주세요 ㅎ
글쓴이: jjami1234 / 작성시간: 화, 2010/12/28 - 11:32오전
#include
#include
#include
#include
#define phy 0xFFE00320
int init_module()
{
unsigned long *vir1;
unsigned long vir3;
unsigned long *vir2;
unsigned long *vir4;
vir1 = (unsigned long *)ioremap(phy,8);
printk(" address1 0x%p \n",vir1);
printk(" value = %lx \n", *vir1); 값이 ef
iounmap(vir1);
return 0;
}
void cleanup_module(){
printk("out\n");
}
인텔계열의 타이머 레지스터를 읽어오고 싶은데 제가 알기로는 인텔계열의 타이머의 초기값은 0001 0000h로 알고 있는데
실제적으로 타이머 레지스터의 물리주소를 이용하여 값을 찍어 보게되면 ef가 뜨네요 ㅠㅠ
리눅스 초보입니다 많은 관심과 도움 부탁드립니다.
감사합니다.
Forums:
검색의 생활화
http://www.iamroot.org/xe/QnA/33827
마지막 댓글 내용입니다.
"타이머의 세팅값은 자동으로 변경될 수 없습니다.
아마 변화하는 값이 보이신다면 그 값은 세팅된 값이 아니라 PIT내부의 카운터 값일 겁니다."
라고 합니다.
android 의
android 의 system/core/toolbox/r.c 를 약간 고쳐 사용했습니다.
arch/x86/kernel/apic/apic.c
APIC_LVT_TIMER_PERIODIC 과 LOCAL_TIMER_VECTOR 가 추가 기록된 것 같습니다.
arch/x86/include/asm/irq_vectors.h
arch/x86/include/asm/apicdef.h
감사합니다.
bushi님 덕분에 많은 도움이 되었습니다.
왜 ef를 얻어오는지 알았습니다
혹시
arch/x86/kernel/apic/apic.c 파일은 bushi 님께서 직접 작성하신 건가요?
파일이 존재하지않아서;;
또한 윈도우처럼 timer 레지스터의 가상주소를 얻어와서 그 값을 찍으면 레지스터의 값 (32비트)이 전부 찍히는데
리눅스는 왜 벡터만 찍히는지가 궁금합니다.
리눅스 초보라 많은 양해 부탁 드립니다 ㅠ
그리고 다시 한번 감사합니다 ㅠ
제 데스크탑이 2.6.32 커널을 사용하는지라 주변에
제 데스크탑이 2.6.32 커널을 사용하는지라 주변에 굴러다니던 2.6.32 커널 소스에서 찾았더니 거기에 있었습니다.
찍긴 다 찍었는데 벡터를 제외한 나머지가 전부 0이라 출력되지 않은거죠.
아 그렇군요 ;;;
지금껏 윈도우랑 같은 같이 출력 되는지 알고 고민이 많았습니다 ㅠ
윈도우의 경우 주기 비트만 1로 셋팅되는데 리눅스는 벡터만 0이 아닌 수 인지 이제 알았습니다 ㅠ
감사합니다.
댓글 달기