历史上的今天
返回首页

历史上的今天

今天是:2025年07月30日(星期三)

正在发生

2021年07月30日 | 4.移植uboot-使uboot支持DM9000网卡

2021-07-30 来源:eefocus

本节继续修改让uboot支持DM9000C网卡,便可以通过网络来传输文件


首先uboot已带有dm9000网卡的驱动,位于drivers/net/下的dm9000x.h、dm9000x.c


1.DM9000C介绍


参考之前写的移植DM9000C驱动章节, 我们的DM9000是放在2440的bank4(0X20000000)的片选上面


而DM9000的CMD引脚接在bank4的LADDR2上面


也就是说当向0X20000000地址上读写数据时, 此时CMD为低,则读写的便是DM9000C的地址


向0X20000000+4地址上读写数据时,此时CMD为高,则读写的便是DM9000C的数据


2.修改内存控制器时序


由于之前在start.S里,就调用了board/samsung/smdk2440/lowlevl_init.S来初始化各个bank的配置、时序。所以我们只需要在那里修改bank4的内容即可


(也可以直接在dm9000x.c里的dm9000_initialize()函数设置)


参考之前写的移植DM9000C驱动里的时序


由于兼容DM9000E,所以修改的值尽量大一点,设为:


.long 0x00000740;    //BANKCON4


3.修改宏,通过Makefile把dm9000x编译进uboot


3.1 查找宏


cd drivers/net

vi Makefile


找到:

找到有两个宏: CONFIG_CS8900、CONFIG_DRIVER_DM9000


由于uboot默认定义的是CONFIG_CS8900宏,而我们板子上的网卡是dm9000C,所以我们要修改为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                    /*DM9000*/

#define CONFIG_DM9000_BASE                   0x20000000

#define DM9000_IO                            CONFIG_DM9000_BASE          

#define DM9000_DATA                         (CONFIG_DM9000_BASE + 4)


4. 然后来看看初始化dm9000c的流程


1)uboot重定位后进入第二阶段board_init_r():


void board_init_r(gd_t *id, ulong dest_addr)        //gd    uboot重定位地址

{

  ... ...

  #if defined(CONFIG_CMD_NET)

       puts("Net:   ");

       eth_initialize(gd->bd);                 // 以太网初始化


#if defined(CONFIG_RESET_PHY_R)

       debug("Reset Ethernet PHYn");

       reset_phy();


#endif

#endif    

... ...

}


2)然后进入board_init_r()->eth_initialize():


int eth_initialize(bd_t *bis)

{

 ... ...

if (board_eth_init(bis) < 0)                         //初始化 单板上的以太网

printf("Board Net Initialization Failedn");

... ...


if (!eth_devices) {                                   //初始化失败,打印"No ethernet found.n"

              puts ("No ethernet found.n");

              bootstage_error(BOOTSTAGE_ID_NET_ETH_START);

       }

 ... ...

}


3)进入board_eth_init(), 位于board/samsung/smdk2440/smdk2440.c


int board_eth_init(bd_t *bis)

{

       int rc = 0;

#ifdef CONFIG_CS8900                                                  

       rc = cs8900_initialize(0, CONFIG_CS8900_BASE);        //初始化cs8900

#endif

       return rc;

}


4.1从上面代码看到,单板初始化board_eth_init()函数里,只支持初始化CS8900,没有DM9000C


搜索其它单板的board_eth_init()是如何初始化DM9000C的,如下图所示:

所以,我们修改2440单板的board_eth_init(),使它支持DM9000C


修改代码如下(位于board/samsung/smdk2440/smdk2440.c):


int board_eth_init(bd_t *bis)

{

       int rc = 0;


#ifdef CONFIG_CS8900                                                  

       rc = cs8900_initialize(0, CONFIG_CS8900_BASE);        //初始化cs8900

#endif


#ifdef CONFIG_DRIVER_DM9000                                           

       rc = dm9000_initialize(bis);                               //初始化DM9000C

#endif


       return rc;

}


5.编译测试


使用loady命令重新烧写uboot,打印如下图所示:

然后试验,来ping下PC机,输入:


set ipaddr 192.168.2.103

ping 192.168.2.101


打印如下图所示:

上面表示,MAC(硬件地址)没有设置,我们需要设置ethaddr,来更改MAC地址


输入(参考别人的MAC地址):


set ethaddr 08:00:3e:26:0a:5b    //设置MAC地址

ping 192.168.2.101                 //重新ping


便可以ping通.


5.1 使用tftp工具,通过网卡来下载内核


tftp工具是通过电脑来设置本机为服务器,然后开发板作为客户端,便可以读取到PC机里的文件了


1)PC机打开tftp工具,设置文件根目录,以及PC本机的IP地址


2)进入开发板,输入:


set serverip   192.168.2.101                //设置PC机地址

tftp 30000000    uImage                     //下载PC机设置的tftp根目录下的uImage文件

bootm  30000000                             //使用bootm命令启动内核代码


启动内核时,打印如下图所示:

由于uboot没有配置mtdparts命令,所以启动内核没成功.


推荐阅读

史海拾趣

Deutron Electronics Corp公司的发展小趣事

随着环保意识的日益提高,Deutron Electronics Corp也积极响应环保号召,致力于实现绿色生产和可持续发展。公司采用环保材料和生产工艺,减少了对环境的污染。同时,公司还加大了对节能减排的投入,提高了资源利用效率。这些努力使得Deutron Electronics Corp在行业内树立了良好的环保形象,也为公司的长期发展奠定了坚实基础。

台湾肯尼威(CANNYWELL)公司的发展小趣事

在品质保障的基础上,肯尼威开始积极拓展市场。公司不仅在台湾本地建立了完善的销售网络,还成功进军国际市场。通过与多家国际知名企业的合作,肯尼威的产品逐渐打入电子、机械、医疗器械等多个领域。同时,公司还积极参加国际展会,展示最新的技术和产品,吸引了众多海外客户的关注。

Automatic Connector公司的发展小趣事

面对日益严重的环境问题,Automatic Connector公司积极响应绿色制造的号召。公司投入大量资金研发环保型电子连接器,采用环保材料和节能工艺,减少生产过程中的污染排放。同时,公司还倡导循环经济的理念,推动废弃电子产品的回收和再利用。这一举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实的基础。

Gem Asia Enterprise Co Ltd公司的发展小趣事

随着业务的不断扩展,Gem Asia意识到全球化布局的重要性。公司开始在全球范围内寻找合适的生产基地和市场机会。通过并购海外优质资产、建立海外研发中心和销售网络,Gem Asia成功实现了从本土企业向跨国公司的转变。特别是在亚洲和欧美市场,Gem Asia凭借其高质量的产品和灵活的市场策略,赢得了广泛的客户认可和市场份额。

ETC1公司的发展小趣事

金溢科技是国内ETC行业的领军企业之一。公司自创立之初,就致力于ETC技术的研发与应用。通过不断的技术创新,金溢科技成功推出了多款具有自主知识产权的ETC设备,并在市场中获得了广泛应用。同时,公司还积极参与国家标准的制定和修订工作,推动ETC行业的规范化发展。金溢科技凭借其在ETC领域的卓越表现,逐渐成为了行业的标杆企业。

国炬(GOOGLL)公司的发展小趣事
由于省去了输出电容,OCL电路能够提供相对较高的功率输出,适用于需要大功率输出的音频应用。

问答坊 | AI 解惑

EDA技术应用前景

电子设计的必由之路是数字化, 这已成为共识。在数字化的道路上, 我国的电子设计技术经历了并将继续经历许多重大的变革。从应用小规模集成电路(SS I) 芯片构成电路系统, 到广泛地应用微控制器或单片机(MCU ) , 在电子系统设计上发生了具有里程碑意义 ...…

查看全部问答>

机器人制作宝典

本帖最后由 paulhyde 于 2014-9-15 04:11 编辑  …

查看全部问答>

USB HOST 如何自动挂载外设

s3c2440+windows ce5.0 用host端口去挂载一个usb接口的外设 为什么不能自动挂载(系统起来后,自动识别usb),要热插拔才能识别。…

查看全部问答>

谁有USB2.0协议的具体资料

各位大哥大姐帮下忙,能不能传我一份USB2.0协议的具体内容。谢谢了。 我的邮箱是talentzhouyang@163.com …

查看全部问答>

linux下交叉编译的问题

我是新手刚学习linux下的嵌入式开发,但是配置系统开发环境的时候,有个问题我始终不明白,交叉编译说是当编译器运行在一个为另一系统产生可执行程序的系统上就发生了交叉编译,可是为什么我们需要交叉编译呢,而我们进行交叉编译时所选取的工具是 ...…

查看全部问答>

max16823的使用心得

这次diy应急灯使用了max16823作为led的驱动芯片,实话实说,这款芯片使用的确是方便之极。外围器件可以说是少的可怜,(我的应用中使用了3个电容,1个限流电阻,3个调节电阻)3个调节电阻式用来限制3路leds的流经电流的,换句话说就是调节leds亮度 ...…

查看全部问答>

msp430 IAR 程序运行中被复位

我运行main前面的汇编程序段,单步执行的时候,程序运行到_data16_memcpy中时,在copy了几个数据后程序忽然跳到cstart_begin开始的地方 但是循环还没有结束   另外:   我注释掉程序中一句,貌似就不会跑飞,可以正常进入main()了 ...…

查看全部问答>

430团购板子

数量有限,得早点下手…

查看全部问答>

LWIP不收包,请各位看看程序,小弟有礼了

自己飞线焊的9B96的板子,这两天在看SAFERTOS+LWIP,突然网络就就不正常了,可以发数据,但不能收数据。 为了验证一下什么问题,使用academic在https://bbs.eeworld.com.cn/thread-222963-1-2.html中的程序试了一下,还是不能收数据, 通过udp_re ...…

查看全部问答>

开关稳压器和LDO稳压器对电源的效率了解

在降压转换过程中最常利用的是开关稳压器和LDO稳压器,但缺点在于尺寸太大,LDO如电压偏离值很大时,转换效率就骤降,开关电容稳压器为新兴技术,结合开关电容器和LDO优点,可整合至可携式应用中。设法降低核心处理器的供电电压是手持式装置的全新 ...…

查看全部问答>