안녕하세요
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;



제가 아직 맵핑의 이해를 못하여 실수를 했을 수 있습니다.
이해를 해야 응용적용도 할 수 있을것이니 잘못된 점을 지적하고 관계를 설명해 주시면 감사하겠습니다.