添加dm9000网卡的驱动

最近跑了一个操作系统,系统是跑起来了,基本命令都有了,但是ifconfig的时候发现,并没有显示,ifconfig -a的时候发现有显示,但是并没有没有自动分配IP地址,

分析:ifconfig没有显示command not found,说明不是命令本身出了问题,要想有ip地址,必须有网卡,网卡必须要有驱动

添加驱动:
vim /arch/arm/mach-s3c2440/mach-smdk2440.c

#include <linux/dm9000.h>
........
/*Add DM9000 ethernet drivers*/
#define DM9000_BASE    (S3C2410_CS4 + 0x300)
static struct resource s3c_dm9000_resource[] = {
        [0] = {
                .start = DM9000_BASE,
                .end   = DM9000_BASE + 3,
                .flags = IORESOURCE_MEM
        },
        [1] = {
                .start = DM9000_BASE + 4,
                .end   = DM9000_BASE + 7,
                .flags = IORESOURCE_MEM
        },
        [2] = {
                .start = IRQ_EINT7,
                .end   = IRQ_EINT7,
                .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
        }
};
/*        
 * The DM9000 has no eeprom, and it's MAC address is set by
 * the bootloader before starting the kernel.
 */
static struct dm9000_plat_data s3c_dm9000_pdata = { 
        .flags      = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),
};
static struct platform_device s3c_device_dm9000 = {
        .name       = "dm9000",
        .id     = -1,
        .num_resources  = ARRAY_SIZE(s3c_dm9000_resource),
        .resource   = s3c_dm9000_resource,
        .dev        = {
                .platform_data  = &s3c_dm9000_pdata,
        },
};


..........
static struct platform_device *smdk2440_devices[] __initdata = {
    &s3c_device_ohci,
    &s3c_device_lcd,
    &s3c_device_wdt,
    &s3c_device_i2c0,
    &s3c_device_iis,
+  	&s3c_device_dm9000,/*添加dm9000网卡支持*/
};

vim include/linux/dm9000.h
添加头文件

#include <linux/io.h>

这样驱动就添加好了

但是编译烧录之后ifconfig -a
并没有分配到ip地址,于是就去检查我的分配地址的脚本S10_network

  1 #!/bin/bash
  2 ifconfig eth0 192.168.1.250 netmask 255.255.255.0 up

刚开始我是这样编写的,用的是bash的脚本解释器,之后发现好像并不能
自启动初始化ip,

~ >: ifconfig -a
eth0      Link encap:Ethernet  HWaddr 08:00:3E:26:0A:5B  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:51 Base address:0x2300 

lo        Link encap:Local Loopback  
          LOOPBACK  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

然后改成了!/bin/sh就可以了,

~ >: ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:3E:26:0A:5B  
          inet addr:192.168.1.250  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:19 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1912 (1.8 KiB)  TX bytes:0 (0.0 B)
          Interrupt:51 Base address:0x2300 

sh是bash的软链接,比较快的执行但是兼容性不好。

猜你喜欢

转载自blog.csdn.net/qq_40215005/article/details/89743291