linux-2.6.38到tiny6410的移植手册(连载2)__网卡&NFS

发布者:BlossomJoy最新更新时间:2021-08-30 来源: eefocus关键字:linux-2  6  tiny6410  移植  网卡  NFS 手机看文章 扫描二维码
随时随地手机看文章

上次的nand flash移植 linux-2.6.38到tiny6410的移植手册(连载1)见
http://www.arm9home.net/read.php?tid-14196.html

今天做的是dm9000网卡移植,和nfs文件系统的搭建

1、vi include/linux/dm9000.h
28行增加
unsigned char    param_addr[6];

2、vi arch/arm/mach-s3c64xx/mach-mini6410.c

为方便起见,将他的网卡结构体注释掉
#if 0
static struct resource mini6410_dm9k_resource[] = {
        [0] = {
                .start  = S3C64XX_PA_XM0CSN1,
                .end    = S3C64XX_PA_XM0CSN1 + 1,
                .flags  = IORESOURCE_MEM
        },
        [1] = {
                .start  = S3C64XX_PA_XM0CSN1 + 4,
                .end    = S3C64XX_PA_XM0CSN1 + 5,
                .flags  = IORESOURCE_MEM
        },
        [2] = {
                .start  = S3C_EINT(7),
                .end    = S3C_EINT(7),
             .flags  = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL
        }
};

static struct dm9000_plat_data mini6410_dm9k_pdata = {
        .flags          = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),
};

static struct platform_device mini6410_device_eth = {
        .name           = "dm9000",
        .id             = -1,
        .num_resources  = ARRAY_SIZE(mini6410_dm9k_resource),
        .resource       = mini6410_dm9k_resource,
        .dev            = {
                .platform_data  = &mini6410_dm9k_pdata,
        },
};

#endif

增加

#define S3C64XX_PA_DM9000       (0x18000000)
#define S3C64XX_SZ_DM9000       SZ_1M
#define S3C64XX_VA_DM9000       S3C_ADDR(0x03b00300)

static struct resource dm9000_resources[] = {
        [0] = {
                .start          = S3C64XX_PA_DM9000,
                .end            = S3C64XX_PA_DM9000 + 3,
                .flags          = IORESOURCE_MEM,
        },
        [1] = {
                .start          = S3C64XX_PA_DM9000 + 4,
                .end            = S3C64XX_PA_DM9000 + S3C64XX_SZ_DM9000 - 1,
                .flags          = IORESOURCE_MEM,
        },
        [2] = {
                .start          = IRQ_EINT(7),
                .end            = IRQ_EINT(7),
                .flags          = IORESOURCE_IRQ | IRQF_TRIGGER_HIGH,
        },
};

static struct dm9000_plat_data dm9000_setup = {
        .flags                  = DM9000_PLATF_16BITONLY,
        .dev_addr               = { 0x08, 0x90, 0x00, 0xa0, 0x90, 0x90 },
};

static struct platform_device s3c_device_dm9000 = {
        .name                   = "dm9000",
        .id                             = 0,
        .num_resources  = ARRAY_SIZE(dm9000_resources),
        .resource               = dm9000_resources,
        .dev                    = {
                .platform_data = &dm9000_setup,
        }
};

如果不嫌麻烦,也可以直接在原代码上改,S3C64XX_PA_XM0CSN1的值也为0x18000000的。

增加mac地址设置函数
static int __init dm9000_set_mac(char *str) {
        unsigned char addr[6];
        unsigned int val;
        int idx = 0;
        char *p = str, *end;
        while (*p && idx < 6) {
                val = simple_strtoul(p, &end, 16);
                if (end <= p) {
                        /* convert failed */
                        break;
                } else {
                        addr[idx++] = val;
                        p = end;
                        if (*p == ':'|| *p == '-') {
                                p++;
                        } else {
                                break;
                        }
                }
        }
         if (idx == 6) {
                printk("Setup ethernet address to %pMn", addr);
                memcpy(dm9000_setup.param_addr, addr, 6);
        }

        return 1;
}

__setup("ethmac=", dm9000_set_mac);

    增加IO映射
增加映射结构体
static struct map_desc mini6410_iodesc[] = {
#ifdef CONFIG_DM9000
        {
                .virtual        = (u32)S3C64XX_VA_DM9000,
                .pfn            = __phys_to_pfn(S3C64XX_PA_DM9000),
                .length         = S3C64XX_SZ_DM9000,
                .type           = MT_DEVICE,
        },
#endif
};
然后在static void __init mini6410_map_io(void)函数中
将s3c64xx_init_io(NULL, 0);改成
  s3c64xx_init_io(mini6410_iodesc, ARRAY_SIZE(mini6410_iodesc));

最后在static struct platform_device *mini6410_devices[] __initdata 的初始化设备中
将     &mini6410_device_eth,
改成   &s3c_device_dm9000,

3、vi drivers/net/dm9000.c
大概1586行
将mac_src = "platform data";
memcpy(ndev->dev_addr, pdata->dev_addr, 6);

改成

  mac_src = "param data";
  memcpy(ndev->dev_addr, pdata->param_addr, 6);

大概1598行
增加
   if (!is_valid_ether_addr(ndev->dev_addr) && pdata != NULL) {
                mac_src = "platform data";
                memcpy(ndev->dev_addr, pdata->dev_addr, 6);
        }


4、make menuconfig
        [*] Networking support  --->
                Networking options  ---> 
               <*> Packet socket                                               
                 <*> Unix domain sockets 
                [*] TCP/IP networking
[*] IP: kernel level autoconfiguration
                      [*]     IP: DHCP support                                       
                          [*]     IP: BOOTP support                                       
                      [*]     IP: RARP support
    Device Drivers  --->
        [*] Network device support  --->
            [*]   Ethernet (10 or 100Mbit)  --->
                 <*>   DM9000 support 
            [ ]   Ethernet (1000 Mbit)  --->   去掉
其他的默认

编译出来,在引导信息中就能看到dm9000网卡信息了。

dm9000 Ethernet Driver, V1.31
eth0: dm9000a at d0930000,d0e00004 IRQ 108 MAC: 08:90:90:90:。。。。

5、增加NFS挂载功能
make menuconfig
    File systems  --->
        Network File Systems  --->
            <*>   NFS client support 
             [*]   Root file system on NFS   这个一点要选
            <*>   NFS server support

之后编译出来的内核就能挂载nfs文件系统了
我的是setenv bootargs console=ttySAC0 root=/dev/nfs nfsroot=58.154.51.164:/root/my_root ip=58.154.51.199:58.154.51.164:58.154.51.199:255.255.255.0 :kiss:eth0:off


mmc1: mmc_rescan_try_freq: trying to init card at 100000 Hz
eth0: link down
eth0: link up, 100Mbps, full-duplex, lpa 0xC1E1
IP-Config: Complete:
     device=eth0, addr=58.154.51.199, mask=255.255.255.0, gw=58.154.51.199,
     host=58.154.51.199, domain=, nis-domain=(none),
     bootserver=58.154.51.164, rootserver=58.154.51.164, rootpath=
VFS: Mounted root (nfs filesystem) on device 0:11.
Freeing init memory: 120K


Please press Enter to activate this console. [root@kissBaofish /]#
[root@kissBaofish /]#
[root@kissBaofish /]#
[root@kissBaofish /]#         [*]   Touchscreens  ---> 
              <*>   S3C touchscreen driver for Mini6410          
                <*>   Mini6410 1-Wire host and Touch Screen Driver

lcd好用了,开机出现了那只小企鹅,挂NFS后触摸屏也能用了。

[1] [1]
关键字:linux-2  6  tiny6410  移植  网卡  NFS 引用地址:linux-2.6.38到tiny6410的移植手册(连载2)__网卡&NFS

上一篇:linux-2.6.38到tiny6410的移植手册(连载1)__nand flash
下一篇:ARM7 VS Cortex-M3

推荐阅读最新更新时间:2024-11-20 11:13

文件系统的移植(三):ramdisk文件系统的移植
内 核 版 本:linux-3.0 u-boot版本:u-boot-2010.09 开发板型号:FL2440 1、对根文件系统进行修改 无修改 2、添加内核对 nfs 的支持 2.1、 在内核中为 256M 的nandflash 进行分区,修改文件arch/arm/plat-s3c24xx/common-smdk.c 中第 109 行开始处的代码如下: static struct mtd_partition smdk_default_nand_part = { = { .name = mtdblock0 u-boot 1MB , .size = SZ_1M*1,
[单片机]
文件系统的<font color='red'>移植</font>(三):ramdisk文件系统的<font color='red'>移植</font>
关于解决IPv4网络与IPv6网络的共存及互通问题
目前,业界已达成共识:IPv6技术是当前可行的解决IP地址短缺唯一根本的解决方案。但是由于IPv6与IPv4技术不兼容,而且现网中有大量的IPv4设备和用户存在,需要在网络演进过程中解决异构网络的共存与互通问题。 2011年2月3日,全球互联网数字分配机构(IANA)正式宣布已无新的IPv4地址分配。由于我国运营商已申请到的IPv4地址资源数量有限,而随着物联网、移动互联网等应用的快速发展,将会需求大量的地址资源,这势必会对我国互联网持续稳定的发展产生影响,因此解决IPv4地址短缺的问题迫在眉睫。 从技术本质上讲,解决IPv4地址短缺,可以采用两种不同的技术路线,一种是多级NAT(如NAT444)技术,另一种是IPv
[网络通信]
msp430F5438+CC2520通信
软件的实现主要是对硬件的初始化和简单基于IEEE820.15.4格式的无线收发。 硬件初始化包括时钟的初始化,SPI初始化,UART初始化等。 以下是一个时钟初始化的程序: MSP430F5438 // ----------------- // /|\| | // | | P7.0|-- XT1 37.768K // --| P7.1 |-- // | P5.2|-- XT2 16M // | P5.3|-- // | | 硬件连接方面,P7.0与P7.1连接晶振XTI,P
[单片机]
中国上半年智能手机销量突破3800万台
    根据机构最近发布的《2012年第二季度中国手机终端市场监测报告》显示,二季度,中国手机终端(不含水货和山寨机)销量为6647万台,环比下降1%,同比下降2%。其中,智能手机销量为3819万台,环比增长率高达22.5%,同比增幅更是高达127.1%,当季智能手机渗透率持续飙升至57.5%,以“互联网手机”、“千元智能机”为代表的新锐力量正加速终结“功能机时代”。   另据预测,2012年在全球智能手机市场中,中国市场份额占比达26.5%,美国占17.8%。中国超越美国成为全球最大智能手机市场。IDC分析认为,未来五年除了中国和美国,巴西和俄罗斯将成为智能手机厂商竞争最激烈的市场。(完)
[手机便携]
华为nova 10系列新机将于6月底发布
数码博主 @长安数码君 表示,他的消息源表明新款华为 nova 手机将于 6 月底发布,定位年轻、潮,预计是新款 nova 10 系列,也有可能是 nova9 系列衍生机型。   IT之家曾报道,此前有消息称华为 nova 10 系列可能搭载高通骁龙 778G 和骁龙 7 Gen 1,而且软件和摄像头调校更出色,还可能有特别的手机壳,预计会在 6 月发布。   此外,还有微博博主表示,华为 nova 10 系列处理器不变,卖点不变,据说外观很不错。   华为 nova 9 Pro 系列去年发布,搭载高通骁龙 778G 4G 芯片,支持 100W 华为超级快充,电池容量 4000mAh,20 分钟即可充满电。通信
[手机便携]
华为nova 10系列新机将于<font color='red'>6</font>月底发布
石头扫地机器人T6的功能详细介绍
“嗨 小爱同学 你能帮我唤醒石头扫地机器人T6吗?”每当宅小秘躺在床上的时候,我都会这样召唤石头扫地机器人T6,这也成为我、小爱同学、石头扫地机器人T6之间约定的“小秘密”,有了这个召唤语之后,石头扫地机器人T6就会听从我的语音指令,勤奋工作,而我也可以继续躺在床上看剧玩手机。 智能家居的出现,让人变得越来越“堕落”,原来许多需要自己身体力行的事情,现在通过智能家居产品就能帮你统统搞定。在扫地和拖地这件事情上,扫地机器人可谓是最有发言权,它们的出现也让人们真正解放双手,不用在扫地和拖地上耗费更多时间和精力。 作为石头科技迭代进化的产物,石头扫地机器人T6自然与最初代的扫地机器人有所不同,其中支持语音操作这一功能点
[机器人]
同惠TH2638A高速精密电容测量仪应用于新能源汽车
电机、电池、电机控制技术是新能源汽车的三大核心。 电机控制技术的核心需要高效电机控制的逆变器技术,高效电机控制的逆变器技术需要强大的功能IGBT模块和匹配模块DC-Link电容器。 IGBT模块的重要性不言而喻,DC-Link电容器的性能也不容忽视,因此可靠检测是电容器不可或缺的重要环节。 关于电容,我们知道,由于材料、生产工艺以及其他因素的影响,自然界中不存在纯净的电容,一般会包含寄生参数,如下图所示: 电容串联等效模型图 在电容的串联等效模型中,实际电容是由本身电容Cs、引线电阻Rs(ESR),引线电感Ls(ESL)串联构成。 电容器的阻抗频率特性图 根据阻抗频率图我们可以看到: ①当频率 谐振频率时,Ls
[测试测量]
同惠TH26<font color='red'>38</font>A高速精密电容测量仪应用于新能源汽车
TITPS92010230-VACTRIAC调光6WLED照明方案
TI 公司的TPS92010具有高效率的PWM控制器,采用准谐振模式以降低EMI和开关损耗,起动电流小于25uA,可编程线路和负载过压保护,并提供LED开路保护和超温保护,主要用在A19 E12/E26/27, GU10, MR16, PAR30/38集成灯,结构和显示照明以及走廊和顶灯照明.本文介绍了TPS9201主要特性,框图, 典型应用电路图以及230-VAC TRIAC调光6-W LED驱动器主要特性,电路图,材料清单和布局图. The TPS92010 is a PWM controller with advanced energy features to provide high efficiency driving
[电源管理]
TITPS92010230-VACTRIAC调光<font color='red'>6</font>WLED照明方案
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved