안녕하세요, 임베디드에 막 발을 드려놓은 학생입니다.
ez-pxa270보드를 사용하고 있는데요 스위치 디바이스 드라이버
만들고있는데 의문점이 생겨서요,

테스트 하기위해서 cc라는 변수에다가 
입력레벨검출해주는 레지스터인 GPLR값을 불러와서
직접화면으로 HEX값으로 보고있습니다.
(PXA270보드에 SW가 gp17 이랑 51번에 있습니다.)
32비트값을 다보려고 long으로 해서 보는데요,
오버플로우가 되는건지 제가 잘못하고 있는건지,
화면에 28~30비트 값밖에 안나타남니다. 
대략어떻게 나타나냐면 FFFFFFF (7자리) 1FFFFFFF,9FFFFFFF(8자리)
스위치는 누루면 FFFFEFFF 이렇게 나타나는데,
하드웨어적 포트랑도 안맞게 나타나는거 같습니다.

기타 소스는 생략하겠습니다.
모듈소스중 read 함수입니다. 
module.c
ssize_t gpio_read(struct file *filp, char *buf, size_t count, loff_t *ppos)
{
unsigned long cc;
int idx;
int cnt=-1;
cc=GPLR0;
for(idx=0; idx <200;idx++) cnt = -1;
printk("%x\n",cc);
put_user(cc,buf);
return 1;
}

read함수불러오는 어플소스입니다. 
app.c

 int sw_read(void)
{
char buf[8];
while(1)
{
memset(buf,0,sizeof(buf));
read(fd,buf,sizeof(buf));
sleep(1);
return 0;
}
}
 int main(void)
 {
  int i=0;
         fd=open("/dev/gpio",O_RDWR);
         while(1) sw_read();
}