도와주세요!!
글 수 15,339
2007.09.03 23:21:51 (*.240.124.147)
7219
ez-x5로 커널모듈 포팅중에 문제가 있어서 문의 드립니다.
32bit 변수를 shift해서 64bit로 형변환해서 사용하려고 합니다.
application에서는 64bit로 확장가능한데 커널모듈에서 문제가 있습니다.
커널모듈에 삽입하여 테스트해보았습니다.
{
unsigned long long tmp_64;
unsigned long tmp1= 0x1234;
unsigned long tmp2= 0x5678;
unsigned long long tmp_64_1= 0x1234567812345678;
unsigned long long tmp_64_2= 0x0987654321987654;
printk("tmp64a 0x%016Lx tmp64b 0x%015Lxn", tmp_64_1, tmp_64_2);
tmp_64=(unsigned long long)tmp1<<16;
printk("tmp64 0x%016Lxn", tmp_64);
tmp_64=(unsigned long long)tmp1<<32;
printk("tmp64 0x%016Lxn", tmp_64);
tmp_64 |=(unsigned long long)tmp2;
printk("tmp64 0x%016Lxn", tmp_64);
}
printk로 결과를 보면..
tmp64a 0x0000000012345678 tmp64b 0x000000021987654
tmp64 0x0000000012340000
tmp64 0x0000000000000000
tmp64 0x0000000000005678
상위 32bit가 0로 밀려버립니다.
컴파일 옵션은.. 다음과 같습니다.
make[2]: Entering directory `/home/pyun/project/ez-x5/linux-2.4.19-x5-v07/drivers/ieee1394'
armv5l-linux-gcc -D__KERNEL__ -I/home/pyun/project/ez-x5/linux-2.4.19-x5-v07/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -Uarm -fno-common -pipe -mapcs-32 -D__LINUX_ARM_ARCH__=5 -mcpu=xscale -mtune=xscale -mshort-load-bytes -msoft-float -Uarm -DMODULE -nostdinc -I /usr/lib/gcc-lib/armv5l-linux/3.2.1/include -DKBUILD_BASENAME=nodemgr
혹시 컴파일 옵션중에 64bit로 읽지 못하게 되있는것이 있는걸까요??
컴파일 옵션은 어디서 변경하는지도 좀 알려주시면 감사하겠습니다..
32bit 변수를 shift해서 64bit로 형변환해서 사용하려고 합니다.
application에서는 64bit로 확장가능한데 커널모듈에서 문제가 있습니다.
커널모듈에 삽입하여 테스트해보았습니다.
{
unsigned long long tmp_64;
unsigned long tmp1= 0x1234;
unsigned long tmp2= 0x5678;
unsigned long long tmp_64_1= 0x1234567812345678;
unsigned long long tmp_64_2= 0x0987654321987654;
printk("tmp64a 0x%016Lx tmp64b 0x%015Lxn", tmp_64_1, tmp_64_2);
tmp_64=(unsigned long long)tmp1<<16;
printk("tmp64 0x%016Lxn", tmp_64);
tmp_64=(unsigned long long)tmp1<<32;
printk("tmp64 0x%016Lxn", tmp_64);
tmp_64 |=(unsigned long long)tmp2;
printk("tmp64 0x%016Lxn", tmp_64);
}
printk로 결과를 보면..
tmp64a 0x0000000012345678 tmp64b 0x000000021987654
tmp64 0x0000000012340000
tmp64 0x0000000000000000
tmp64 0x0000000000005678
상위 32bit가 0로 밀려버립니다.
컴파일 옵션은.. 다음과 같습니다.
make[2]: Entering directory `/home/pyun/project/ez-x5/linux-2.4.19-x5-v07/drivers/ieee1394'
armv5l-linux-gcc -D__KERNEL__ -I/home/pyun/project/ez-x5/linux-2.4.19-x5-v07/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -Uarm -fno-common -pipe -mapcs-32 -D__LINUX_ARM_ARCH__=5 -mcpu=xscale -mtune=xscale -mshort-load-bytes -msoft-float -Uarm -DMODULE -nostdinc -I /usr/lib/gcc-lib/armv5l-linux/3.2.1/include -DKBUILD_BASENAME=nodemgr
혹시 컴파일 옵션중에 64bit로 읽지 못하게 되있는것이 있는걸까요??
컴파일 옵션은 어디서 변경하는지도 좀 알려주시면 감사하겠습니다..