新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于3c2410的linux2.6.22移植(5)

        基于3c2410的linux2.6.22移植(5)

        作者: 時(shí)間:2016-11-20 來源:網(wǎng)絡(luò) 收藏
        三、 網(wǎng)卡和LCD驅(qū)動(dòng)的移植1. 網(wǎng)卡驅(qū)動(dòng)移植:
        這塊板使用的是DM9000的網(wǎng)卡芯片,驅(qū)動(dòng)的源代碼在內(nèi)核源代碼的目錄中可以找到:
        arm/%23">$root@host:/home/arm/# cd kernel/linux-2.6.22
        $root@host:/home/arm/kernel/linux-2.6.22# cd drivers/net
        $root@host:/home/arm/kernel/linux-2.6.22/drivers/net# ls dm*
        dm9000.c dm9000.h
        修改dm9000.c:
        $root@host:/home/arm/kernel/linux-2.6.22# vi dm9000.c
        找到函數(shù):
        static int dm9000_probe(struct platform_device *pdev)
        {
        ……….
        int ret=0;
        int iosize;
        int i;
        u32 idval
        //添加下面數(shù)組,前6個(gè)數(shù)作為網(wǎng)卡的mac地址,注意不能和現(xiàn)有的網(wǎng)卡沖突
        unsigned char ne_defethadder[]={0x08,0x08,0x08,0x08,0x12,0x27,0}
        ………………………….
        ………………………….

        for (i = 0; i < 6; i++)
        ndev->dev_addr[i] = db->srom[i];

        if (!is_valid_ether_addr(ndev->dev_addr)) {


        for (i = 0; i < 6; i++)
        //修改mac地址
        // ndev->dev_addr[i] = ior(db, i+DM9000_PAR);
        ndev->dev_addr[i]=ne_defethaddr[i];
        ………………………
        ……………………….
        }
        退出保存。
        修改smdk2410.c:
        $root@host:/home/arm/kernel/linux-2.6.22# cd arch/arm/mach-s3c2410
        $root@host:/home/arm/kernel/linux-2.6.22/arch/arm/mach-s3c2410#
        vi mach-smdk2410.c
        在mach-smdk2410.c中添加如下內(nèi)容:
        …………
        #include
        //添加:
        #include
        …………
        ………….
        #define UCON S3C2410_UCON_DEFAULT
        #define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB
        #define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE
        //添加:

        static struct resource s3c_d9k_resource[]=
        {
        [0]={
        .start =0x10000000,
        .end =0x10000000,
        .flags=IORESOURCE_MEM
        },
        [1]={
        .start =0x10000000+0x2,
        .end =0x10000000+0x2,
        .flags=IORESOURCE_MEM
        },
        [2]={
        .start =IRQ_EINT2,
        .end =IRQ_EINT2,
        .flags =IORESOURCE_IRQ
        }
        };
        static struct dm9000_plat_data s3c_device_d9k_platdata = {
        .flags= DM9000_PLATF_16BITONLY
        };

        struct platform_device s3c_device_d9k = {
        .name= "dm9000",
        .id= 0,
        .num_resources= ARRAY_SIZE(s3c_d9k_resource),
        .resource= s3c_d9k_resource,
        .dev= {
        .platform_data = &s3c_device_d9k_platdata,
        }
        };
        ………………….
        ………………….
        static struct platform_device *smdk2410_devices[] __initdata = {
        &s3c_device_usb,
        //啟動(dòng)lcd
        &s3c_device_lcd,
        &s3c_device_wdt,
        &s3c_device_i2c,
        &s3c_device_iis,
        //添加
        &s3c_device_d9k
        //&s3c_device_ts,
        };
        需要注意的是起始地址和中斷號(hào)的選擇。這塊板上DM9000芯片的INT引腳接的是EINT2,CMD引腳接的是A1,CS引腳接的是nGCS2,所以DM9000的index端口地址是0x10000000,data端口地址是0x10000000+0x00000002,據(jù)此設(shè)置結(jié)構(gòu)resource s3c_d9k_resource中的參數(shù)。最后在內(nèi)核編譯時(shí)加上對(duì)DM9000驅(qū)動(dòng)的支持就可以了,具體見內(nèi)核配置和編譯。



        關(guān)鍵詞: 3c2410linux2.6.22移

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 饶阳县| 左权县| 高邮市| 汽车| 滦平县| 绥滨县| 彰化县| 政和县| 建水县| 城步| 宁河县| 阿拉善盟| 蓬溪县| 邵东县| 修文县| 札达县| 美姑县| 临澧县| 沙洋县| 邓州市| 青冈县| 策勒县| 贵德县| 合川市| 安溪县| 丰原市| 古丈县| 藁城市| 黄平县| 西乌珠穆沁旗| 陇川县| 确山县| 都兰县| 昌黎县| 阳新县| 贵州省| 元谋县| 六盘水市| 昌吉市| 正蓝旗| 光泽县|