Zynq-Linux移植学习笔记之七-网络驱动
参考网址:http://www.openhw.org/module/forum/thread-657608-1-1.html
这一篇讲一讲u-boot里面的网络驱动以及Linux内核里面的网络驱动,以及u-boot和linux的启动流程。
1、u-boot启动流程
u-boot启动是从start.s开始的,一直到进入main_loop结束。过程用下面一个表格表示,这里只列出几个重要的过程函数:
[td]
在上面过程中init_sequence_r是一个function list,里面包括对所有用到的设备进行初始化。 [td]
对于网络来说,在init_sequence_r中能够找到一个函数initr_net,这个函数内部能进一步看到网络是如何初始化的。 initr_net内部包含过程如下表:
对于eth_initialize又可以分为下面几个步骤
[td]
这就是zynq上u-boot加载网络设备的过程
2、linux内核启动过程
linux内核过程如下,这里只列举重要过程
[td]
最后调用了initcall.init函数 [td]
由于subsys_initcall(fn)=_initcall_fn4被放入了section initcall4.init中,在执行initcall.init函数时被调用 又由于subsys_initcall=module_init等于调用驱动加载函数,加载了设备驱动。 在zynq上linux加载网络驱动分为两个方面,一方面是控制器方面的驱动,另一方面是phy驱动。 控制器方面驱动位于Macb.c (drivers\net\ethernet\cadence)中,重要的函数为macb_probe,其中包括三个主要函数
phy操作调用marvell_drivers[](Marvell.c (drivers\net\phy))根据不同的phy选择对应的驱动进行操作。
作者:Felven
|
Zynq-Linux移植学习笔记之七-网络驱动
最新推荐文章于 2024-01-24 15:21:20 发布
本文详细记录了Zynq-Linux系统中进行网络驱动的移植过程,包括驱动配置、网络设备初始化、数据包收发等关键步骤,旨在帮助读者理解嵌入式Linux环境下网络驱动的工作原理和实现方法。
摘要由CSDN通过智能技术生成