×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-08-26 发布时间:
|
三、  网卡和LCD驱动的移植1.  网卡驱动移植:
这块板使用的是DM9000的网卡芯片,驱动的源代码在内核源代码的目录中可以找到:
$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
      找到函数:
static int dm9000_probe(struct platform_device *pdev)
{
       ……….
       int ret=0;
       int iosize;
       int i;
       u32 idval
//添加下面数组,前6个数作为网卡的mac地址,注意不能和现有的网卡冲突
       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中添加如下内容:
…………
#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,
       //启动lcd
       &s3c_device_lcd,
       &s3c_device_wdt,
       &s3c_device_i2c,
       &s3c_device_iis,
       //添加
       &s3c_device_d9k
       //&s3c_device_ts,
};
需要注意的是起始地址和中断号的选择。这块板上DM9000芯片的INT引脚接的是EINT2,CMD引脚接的是A1,CS引脚接的是nGCS2,所以DM9000的index端口地址是0x10000000,data端口地址是0x10000000+0x00000002,据此设置结构resource s3c_d9k_resource中的参数。最后在内核编译时加上对DM9000驱动的支持就可以了,具体见内核配置和编译。

关键字:3c2410  linux2.6.22  移植 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
如何为单片机选择合适的负载电容