도와주세요!!
글 수 15,339
2009.04.03 08:44:24 (*.130.115.67)
10168
안녕하세요
EZ-S2410 보드를 사용중입니다.
DIO 소스를 분석하고 응용하여 다른 프로그램 및 디바이스 드라이버에 적용하려 작업 있습니다.
책과, 제공된 소스코드가 설명이 맞지 않습니다.
책에 제공된 내용그대로 적용시에 커널 이미지가 보드에 올라가서 IP 가 잡히지 않습니다.
책에서는 (kernel) arch/arm/mach-s3c2410.c 의 소스를 고쳐 다음과 같이 사용하라 되어 있습니다.
static struct map_desc ez_s2410_iodesc[] __initdata = {
/* virtual physical length domain */
{ 0xf1000000, S3C2410_CS1 +0x000000, 0x00100000, MT_DEVICE }, // nCS1 CS8900 -- slow RD/WR
{ 0xf1200000, S3C2410_CS1 +0x800000, 0x00100000, MT_DEVICE }, // nCS1 REV1
{ 0xf1300000, S3C2410_CS1 +0xc00000, 0x00100000, MT_DEVICE }, // nCS1 REV2
{ 0xf2000000, S3C2410_CS2 +0x000000, 0x00100000, MT_DEVICE }, // nCS2
{ 0xf3000000, S3C2410_CS3 +0x000000, 0x00100000, MT_DEVICE }, // nCS3
{ 0xf4000000, S3C2410_CS4 +0x000000, 0x00100000, MT_DEVICE }, // nCS4
{ 0xf5000000, S3C2410_CS5 +0x000000, 0x00100000, MT_DEVICE }, // nCS5
};
본래 커널(제공된 커널linux-2.6.13.5-s2410-v03) 소스는 이렇게 되어 있습니다.
static struct map_desc ez_s2410_iodesc[] __initdata = {
/* virtual physical length domain */
{ 0xf4000000, S3C2410_CS1 +0x000000, 0x00100000, MT_DEVICE }, // nCS1 CS8900 -- slow RD/WR
};
고민이 되더군요.
책과 커널본래 소스에서 가상메모리 부분과 바로 뒤에 오는 피지컬 주소와 다르기 때문에 고쳐도 되는것일까?
일단 고쳤습니다.
커널을 새로 컴파일하고 zImage 를 EZ-S2410 보드에 올렸습니다.
nfs 설정을 잡고 노트북 리눅스 공유 디렉토리를 끌어 오려고 하는데 안되더군요.
이상해서 시도하다가 ifconfig 해보니.. 네트워크가 안잡혀 있었습니다.
로컬만 있더군요. (127.0.0.1)
전에는 nfs 로 사용했었습니다. 그래서 원래 제공된 커널로 변경 했더니 ip가 잘 잡힙니다.
제공된 소스코드를 열어 보았습니다. 책이랑 다른 내용의 주석과..
소스내용이 보입니다.
< app_port.c 제공된 소스코드 >
//------------------------------------------------------------------------------
// 설명 : main
// linux/arch/arm/mach-s3c2410/mach-ez-s2410.c 참조
// REV0 0xf4200000
// REV1 0xf4300000
// nCS2 0xf5000000
// nCS3 0xf6000000
// nCS4 0xf7000000
// nCS5 0xf8000000
// 주의 :
//------------------------------------------------------------------------------
set_port.virport = 0xf7000100; // nCS4
set_port.size = 0x100;
< app_port.c 책 >
set_port.virport = 0xf4000100; // nCS4
set_port.size = 0x100;
제가 아직 맵핑의 이해를 못하여 실수를 했을 수 있습니다.
이해를 해야 응용적용도 할 수 있을것이니 잘못된 점을 지적하고 관계를 설명해 주시면 감사하겠습니다.
EZ-S2410 보드를 사용중입니다.
DIO 소스를 분석하고 응용하여 다른 프로그램 및 디바이스 드라이버에 적용하려 작업 있습니다.
책과, 제공된 소스코드가 설명이 맞지 않습니다.
책에 제공된 내용그대로 적용시에 커널 이미지가 보드에 올라가서 IP 가 잡히지 않습니다.
책에서는 (kernel) arch/arm/mach-s3c2410.c 의 소스를 고쳐 다음과 같이 사용하라 되어 있습니다.
static struct map_desc ez_s2410_iodesc[] __initdata = {
/* virtual physical length domain */
{ 0xf1000000, S3C2410_CS1 +0x000000, 0x00100000, MT_DEVICE }, // nCS1 CS8900 -- slow RD/WR
{ 0xf1200000, S3C2410_CS1 +0x800000, 0x00100000, MT_DEVICE }, // nCS1 REV1
{ 0xf1300000, S3C2410_CS1 +0xc00000, 0x00100000, MT_DEVICE }, // nCS1 REV2
{ 0xf2000000, S3C2410_CS2 +0x000000, 0x00100000, MT_DEVICE }, // nCS2
{ 0xf3000000, S3C2410_CS3 +0x000000, 0x00100000, MT_DEVICE }, // nCS3
{ 0xf4000000, S3C2410_CS4 +0x000000, 0x00100000, MT_DEVICE }, // nCS4
{ 0xf5000000, S3C2410_CS5 +0x000000, 0x00100000, MT_DEVICE }, // nCS5
};
본래 커널(제공된 커널linux-2.6.13.5-s2410-v03) 소스는 이렇게 되어 있습니다.
static struct map_desc ez_s2410_iodesc[] __initdata = {
/* virtual physical length domain */
{ 0xf4000000, S3C2410_CS1 +0x000000, 0x00100000, MT_DEVICE }, // nCS1 CS8900 -- slow RD/WR
};
고민이 되더군요.
책과 커널본래 소스에서 가상메모리 부분과 바로 뒤에 오는 피지컬 주소와 다르기 때문에 고쳐도 되는것일까?
일단 고쳤습니다.
커널을 새로 컴파일하고 zImage 를 EZ-S2410 보드에 올렸습니다.
nfs 설정을 잡고 노트북 리눅스 공유 디렉토리를 끌어 오려고 하는데 안되더군요.
이상해서 시도하다가 ifconfig 해보니.. 네트워크가 안잡혀 있었습니다.
로컬만 있더군요. (127.0.0.1)
전에는 nfs 로 사용했었습니다. 그래서 원래 제공된 커널로 변경 했더니 ip가 잘 잡힙니다.
제공된 소스코드를 열어 보았습니다. 책이랑 다른 내용의 주석과..
소스내용이 보입니다.
< app_port.c 제공된 소스코드 >
//------------------------------------------------------------------------------
// 설명 : main
// linux/arch/arm/mach-s3c2410/mach-ez-s2410.c 참조
// REV0 0xf4200000
// REV1 0xf4300000
// nCS2 0xf5000000
// nCS3 0xf6000000
// nCS4 0xf7000000
// nCS5 0xf8000000
// 주의 :
//------------------------------------------------------------------------------
set_port.virport = 0xf7000100; // nCS4
set_port.size = 0x100;
< app_port.c 책 >
set_port.virport = 0xf4000100; // nCS4
set_port.size = 0x100;
제가 아직 맵핑의 이해를 못하여 실수를 했을 수 있습니다.
이해를 해야 응용적용도 할 수 있을것이니 잘못된 점을 지적하고 관계를 설명해 주시면 감사하겠습니다.
현재 배포된 커널은 2.6 으로 배포되어 있어 차이가 발생하였습니다
커널은 2.6 을 사용하시는 것이므로 커널을 수정하실 이유는 없습니다.
저희가 배포한 커널 2.4 와 2.6 에서 map 이 차이가 있습니다.
2,4 에서는 nCS 를 모두 강제 맵핑하였지만 2.6 에서느 디바이스 드라이버에서 ioreamp 을 사용하도록 하였습니다.
2.6 커널의 규칙이라면 규칙입니다.
ioreamp 은 물리주소를 가상주소로 변경하는 함수이며 이렇게 얻어진 주소를 직접사용하시면 됩니다.