uboot.2015.07移植之驱动DM9000(8)

移植u-boot-2015.07之修改程序支持 DM9000 网卡

1.添加DM9000的驱动程序

  • 查看 drivers/net/Makefile 文件发现 dm9000x.o 是与 CONFIG_DRIVER_DM9000 这个宏有关的。修改 include/configs/smdk2440.h 如下
#define CONFIG_CS8900       /* we have a CS8900 on-board */
#define CONFIG_CS8900_BASE   0x19000300
#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */

改为

#define CONFIG_DRIVER_DM9000    /* 此项决定编译 DM9000x.c 文件 */

uboot中搜索 CONFIG_DRIVER_DM9000,参考别的板级头文件,添加宏定义如下
#define CONFIG_DRIVER_DM9000    /* 此项决定编译 DM9000x.c 文件 */
#define CONFIG_DM9000_BASE 0x20000000   /* DM9000 的基地址,与 DM9000 与 S3C2440 的物理连接有关,查看原理图得到 DM9000 连接到 S3C2440 的哪一个片上面,这里是 nGCS4,也就是0x20000000起始地址处 */
#define DM9000_IO CONFIG_DM9000_BASE    /* DM9000 的 IO,此处等于 DM9000 的起始基地址 */
#define DM9000_DATA (CONFIG_DM9000_BASE + 4)    /* 与 DM9000 的 CMD 引脚有关,本板子 DM9000 的 CMD 引脚接到 LADDR2,所以要加上 2^2=4 */

2.配置时间参数

配置 BWSCON 以及 BANKCON4 寄存器来对应 DM9000 的设置,这里使用之前的配置 BANKCON4 = 0x00000700,BWSCON = 0x22011110

3.更改驱动程序

  • 在 sourceinsight 里面全局搜索 “Net:”,得到在 arch/arm/lib/board.c 以及 common/board_r.c里面有 eth_initialize(gd->bd);
eth_initialize(gd->bd); /* 前面我们知道 gd->bd 指向的是 bd_t 结构体,里面存有串口波特率以及ip地址等等 */
    board_eth_init(bis)
        int rc = 0;
        #ifdef CONFIG_CS8900
            rc = cs8900_initialize(0, CONFIG_CS8900_BASE);
        #endif
            return rc;
  • 将 board/samsung/smdk2440/smdk2440.c里的board_eth_init函数改为
int rc = 0;
#ifdef CONFIG_CS8900
    rc = cs8900_initialize(0, CONFIG_CS8900_BASE);
#endif
#ifdef CONFIG_DRIVER_DM9000
    rc = dm9000_initialize(bis);    /* 好奇的是实际上并没有使用 bis 参数,不知道传入的目的是什么 */
#endif
    return rc;

4.修改网卡初始化配置

  • 修改 include/configs/smdk2440.h 里面的
#define CONFIG_NETMASK      255.255.255.0
#define CONFIG_IPADDR       10.0.0.110
#define CONFIG_SERVERIP     10.0.0.1

改为

#define CONFIG_NETMASK      255.255.255.0
#define CONFIG_IPADDR       192.168.2.100       //自己根据需要设置
#define CONFIG_SERVERIP     192.168.2.1         //自己根据需要设置
#define CONFIG_ETHADDR      00:08:3e:26:0a:5b   //自己根据需要设置

由于2015.07版本中的 include/env_default.h 里面的 default_environment 数组里面并没有 “ethaddr=” 字样,所以我们添加一行如下

#ifdef  CONFIG_ETHADDR
    "ethaddr="  __stringify(CONFIG_ETHADDR) "\0"
#endif

这里设置完毕之后uboot启动的时候就会自动设置好想要的网络参数了,当然也可以通过uboot内置命令来进行设置

  • 为了解决 “ERROR: resetting DM9000 -> not responding” 与 “could not establish link” 输出信息(其实不管它也没有问题,但是就是看着不舒服,而且速度也比较慢)。将 DM9000x.c 里的 dm9000_reset(void) 函数改为
if ((DM9000_ior(DM9000_PIDL) != 0x0) ||
    (DM9000_ior(DM9000_PIDH) != 0x90))
    printf("ERROR: resetting DM9000 -> not responding\n");
//改变为下面这样
i = 0;
do
{
    if(i == 1000)   //此数字根据具体情况进行赋值,我的是1000就可以了
    {
        break;
    }
    i ++;
}while((DM9000_ior(DM9000_PIDL) != 0x0) || (DM9000_ior(DM9000_PIDH) != 0x90));

dm9000_init 函数里面的

i = 0;
while (!(dm9000_phy_read(1) & 0x20)) {  /* autonegation complete bit */
    udelay(1000);
    i++;
    if (i == 10000) {
        printf("could not establish link\n");
        return 0;
    }
}

全部注释掉,这样就会直接以100M全速运行。改动到这里就不会出现第一次ping不成功,要快速连ping两次才能成功
测试如下:

 
 
U-Boot 2015.07 (Jun 13 2016 - 18:58:30 +0800) CPUID: 32440001 FCLK: 400 MHz HCLK: 100 MHz PCLK: 50 MHz DRAM: 64 MiB Flash: 2 MiB NAND: 256 MiB In: serial Out: serial Err: serial Net: dm9000 SMDK2440 # ping 192.168.2.1 dm9000 i/o: 0x20000000, id: 0x90000a46 DM9000: running in 16 bit mode MAC: 00:0c:29:c1:01:ef operating at 100M full duplex mode Using dm9000 device host 192.168.2.1 is alive
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
make: *** No rule to make target uboot . Stop.错误提示表明在执行make命令时,没有找到对应的目标文件或规则。这种错误通常是由缺少依赖文件或者编译配置错误导致的。 根据引用中的错误信息,可以猜测可能是在执行./configure命令时出现了问题。你可以检查一下是否正确设置了编译环境和相关依赖库。建议仔细阅读编译指南或者参考文档,确保按照正确的步骤进行编译和安装。 另外,引用中的错误信息也指出了可能的问题,即缺少了对应的依赖文件或规则。你可以检查一下是否正确配置了相关组件或者是否缺少必要的文件。 最后,引用中的错误信息也提到了可能存在的依赖问题,并给出了相关提示。你可以查看一下相关的配置文件或者查找相关的文档来解决这个问题。 总结来说,make: *** No rule to make target uboot . Stop.错误可能是由于缺少依赖文件、配置错误或者编译环境问题导致的。你可以根据具体的错误提示和引用内容进行排查和解决。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [执行make出现:make: *** No rule to make target `build', needed by `default'. Stop.](https://blog.csdn.net/qq_43147136/article/details/84824740)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [make[1]: *** No rule to make target ‘.depend.XXXX‘, needed by ‘.XX‘. Stop.解决](https://blog.csdn.net/qq_16933601/article/details/105822062)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [linux全志R16的linux系统编译的资料_20170502_1655.7z](https://download.csdn.net/download/wb4916/9831266)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值