도와주세요!!
안녕하세요? 리눅스 상에서 arm920t(s3c2440)에서 ttb레지스터읽기 위해 인라인 어셈써서 읽어보았는데, 읽을때마다 값이 틀리게 나오네요.. openice로 체크해보면 ttb레지스터는 변하지 않고 가만히 있는데도요..
제 코드에 오류가 있는건가요?? (static, volatile 등등 붙여보고 지지고 볶아도 insmod할때마다 값이 틀리게 나오네요.. )
static inline unsigned int get_ttbr(void)
{
unsigned int val=0;
__asm__("mrc p15, 0, %0, c2, c0, 1":"=r" (val));
printk(" val : %08x\n",val);
return val;
}
insmod 할때마다 새로 프로세스가 생성되죠.
새로운 프로세스마다 mmu table 은 새로 만들어집니다.
매번 새로운 주소가 오는 것이 맞구요.
모든 프로세스를 찾아서 덤프해 보시면 아실겁니다.
insmod 할때마다 새로운 프로세스가 생성되서 mmu table이 새로 만들어진다는게 이해되지 않습니다..
위 코드를 insmod해서 커널레벨에서 print하고, openice로 프로세서를 stop시킨후 디버거프로그램으로 TTB레지스터 및 mmu table
을 덤프해봐도 변한상태가 아닙니다..
오픈 아이스로 스톱시킨 상태에서 디버거프로그램으로 TTB 를 찍을대 어떤 프로세스의 TTB 를 보시는 건가요?
랜덤하겠지만.. 대부분 idle 모드 일 것이고 그럴 경우 init 의 mmu table 을 보셨을 겁니다.
리눅스가 동작할때 여러개의 프로세스가 생성됩니다.
모든 프로세스는 당연히 다른 MMU TABLE 을 갖고 있어야 합니다.
물론 공유하는 부분도 있지만... 기본적으로 다른 프로세스라고 불리는 것은 다른 MMU TABLE을 갖고 있다고 보셔야 합니다.
이 부분이 이해가 안되신다면 좀더 프로세스와 MMU 에 대해 좀더 알아 보시는 것이 좋을 것 같습니다.
위 코드로 컨트롤레지스터, 케시타입레지스터,id코드레지스터는 잘읽히는데, TTB주소만 이상하게 읽히네요...