u-boot网络启动分析(一) 网络初窥

arch/powerpc/cpu/mpc8xx/cpu.c最近做了一个项目,涉及到了u-boot,走了不少弯路。鉴于u-boot在以后的嵌入式开发中的巨大作用,决定对uBoot源码进行剖析。一说起源码,我的小心脏就已经迫不及待了,鉴于能力有限,有些错误可能也在所难免,希望大家能及时斧正。有一句话说的好,失败是成功它妈,错误嘛就是正确它爸;出错了就要把它攻破搞通,这样才能离那个“更高的善”更近一步。

本文准备以PowerPC的8640d CPU结合Marvell公司的88E1111千兆以太网芯片,对u-boot的网络初始化流程进行分析,u-boot源码采用201510的那个版本。

初始化入口:

u-boot中好多设备的初始化的入口是放在board_init_r函数中的,网络也不例外。由于board_init_r时需要执行许多初始化调用,所以该程序的体态比较庞大,为支持多设备的选择或者裁剪还引入了不少的宏进行区分,这无疑给我们的阅读造成了不小的影响。但是不要怕,我们现在只分析网络相关的代码,所以我们只关注网络相关的代码,这样阅读量瞬间就给降下来了。经过查找,会发现有个叫eth_initialize的函数好像跟网络沾点边,猜的没错,他就是网络初始化的入口函数。该函数定义在net/eth.c中,源码如下:

该函数一进去就将两个重要的全局结构体指针初始化为NULL,这两个结构体指针指向的结构体类型相同都是struct eth_device类,顾名思义就是都指向了同一类网络设备,两者的差别在于作用域不同,eth_current定义为static这样它便对模块之外隐藏了,因为它是这个模块内部自己使用的,没必要对全局可见。这个思路很好,用好static这个关键字可以减少全局变量的到处使用,调用就要通过专门的函数来进行,这也正好体现了编码中的封装与隐藏思想。我们来看看这个定义吧:

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值