完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
怎么样在uboot使用u*** start与u*** scan命令?
怎么添加u***接口的网卡? 如何利用uboot提供良好的u***接口网络设备框架? 如何写u***接口网卡驱动? |
|
相关推荐
1个回答
|
|
前言:最近折腾下,分析了下uboot的u***接口网卡,就u***模块操作(操作)这些却是可怕的,我也不太懂你。在uboot添加自己的u***接口网卡,自带uboot里已经做好了u***设置的(arch/arm/cpu/arm920t/s3c24x0/u***_ohci.c文件提供了u***的操作函数,发送数据包,初始化等。。。)。
一,怎么样在uboot使用u*** start ,u*** scan命令 uboot里可以列出文档目录,里面的文件README.u***提供了方法: How it works: USB(至少是USB UHCI) 需要一个帧列表 (4k)、传输 描述符和队列头,这些都位于主存储器中。 UHCI 每毫秒分配一次 PCI 总线并读取当前 帧指针。这可能会导致操作系统在引导期间崩溃。所以 在操作系统启动期间USB _MUST_ 被停止。这就是为什么 USB 在启动过程中不会自动启动的原因。如果有人需要USB 他必须启动它,因此应该知道他必须 在启动操作系统之前停止它。 对于 USB 键盘,这可以通过 在 U-Boot 启动并运行后自动启动的脚本来完成。要使用 USB 键盘启动操作系统,还需要另一个脚本,该脚本首先禁用 USB,然后执行启动命令。如果引导命令失败, 脚本可以重新启用 USB kbd。 常用 USB 命令: - USB 启动: - USB 重置:(重新)启动 USB。所有 USB 设备都将被 初始化并为它们构建一个设备树。 - u*** 树:以树状显示所有 USB 设备,如 display - u*** info [dev]:显示设备 dev 或所有的所有 USB 信息 设备 - USB 停止 [f]:停止 USB。如果 f==1,如果 USB 键盘被分配为标准输入,USB 也会停止。然后标准输入 切换到串行输入。 USB 存储命令: - u*** 扫描:扫描 USB 以查找存储设备 。此命令必须运行USB (USB 启动) - u*** 设备 [dev]:显示或设置当前 USB 存储设备 - u*** 部分 [dev]:打印分区一个或所有 USB 存储 设备的表 - u*** read addr blk# cnt: 读取从块 `blk#‘’‘’ 开始到 内存地址 `addr‘’‘’ 的`cnt‘’‘’ 块 - u***boot addr dev:part: Config Switches: 我们去配置文件 /include/configs/xxx.h添加这几个宏就可以了----------------CONFIG_CMD_USB 启用基本的 vmUSB 支持和 u*** 命令 CONFIG_USB_UHCI 定义低级部分。 如果使用 CONFIG_CMD_USB CONFIG_USB_KEYBOARD 启用 USB 键盘,则必须定义低级部分 CONFIG_USB_STORAGE 启用 USB 存储设备 CONFIG_USB_HOST_ETHER 启用 USB 以太网适配器支持 重 编译uboot,烧录,重启uboot 输入 u*** start 就发现 u***b 开始工作了 。怎么添加u***接口的网卡 我们先查代码去一步一步分析,我们在用nfs时,会大概经过这么 几个过程static voidNfsSend (void) { /*nfs发送函数*/ nfs_read_req rpc_req NetSendUDPPacket /*把数据打包成UDP*/ eth_send /×发送数据包×/ eth_current-》send(eth_current, packet, length); /× 用我们注册的eth_device提供的send函数去发送×/ 在net/eth.c提供了一个eth_register(struct eth_device *dev) 这个函数,我们这个只要写一个驱动,在驱动里去分配,设置,注册这个eth_device结构体就了。结构体提供发送数据包,接收数据包,初始化函数等。思想就是这样的。 三。利用uboot提供好的u***接口网络设备框架 实际上uboot里已经写好了一个u***接口网络设备的框架,我们只要去了解,然后写硬件部分就可以 在uboot的cmd_u***.c文件里定了一个 U_BOOT_CMD( u***, 5, 1, do_u***, “USB sub-system”, “ start - 启动(扫描)USB 控制器/n” “u*** reset - 重置(重新扫描)USB 控制器/n” “u*** stop [f] - 停止USB [f]=force stop/n” “ ”u*** info [dev] - 显示可用的 USB 设备/n“ ”u*** storage - 显示 USB 存储设备的详细信息/n“ ”u*** dev [dev] - 显示或设置当前的 USB 存储设备/n“ ”u*** part [dev] - 打印一个或所有 USB 存储器的分区表“ ” devices/n“ ”u*** read addr blk# cnt - 读取从块 `blk#‘’‘’/n“ ”开始的 `cnt‘’‘’ 块到内存地址 ` addr‘’‘’/n“ ”u*** write addr blk# cnt - 从内存地址 `addr‘’‘’“ 从块 `blk#‘’‘’/n” “开始写入 `cnt‘’‘’ 块 ); 结构体。 当我们在uboot下输入u*** 相关命令时会调用 do_u*** do_u*** -- cmd_u***.c u***_host_eth_scan(1) { --u***_ether.c 探针有效驱动程序(开发);--u***_ether.c eth_register(eth); --u***_ether.c 我们分析这个u***_ether.cc文件,我们发现了一个数组:u***_eth_prob_dev prob_dev[]static const struct u***_eth_prob_dev prob_dev[] = { #ifdef CONFIG_USB_ETHER_ASIX { .before_probe = asix_eth_before_probe, .eth_info_get_probe, .eth_get_info, 。 }, #endif #ifdef CONFIG_USB_ETHER_SMSC95XX { .before_probe = smsc95xx_eth_before_probe, .probe = smsc95xx_eth_probe, .get_info = smsc95xx_eth_get_info, }, #endif 。。。。。。,照我们的 END卡* 。。。。; 四。如何写u***接口网卡驱动,实际readme.u***文件里有详细的介绍 USB主机网络 如果您有受支持的 USB 以太网适配器,您可以在 U-Boot 中使用它 来获取 IP 地址并从网络服务器加载内核。 注意:USB 主机网络与使您的电路板充当 USB 客户端不同。在这种情况下,您的电路板会伪装成以太网适配器 ,并将显示为连接计算机的网络接口。在这种 情况下,连接是通过 USB 电缆与作为主机的计算机进行的。 使用 USB 主机网络,您的开发板就是 USB 主机。它控制着 它直接连接的以太网适配器, 与外界的连接是您的适配器的以太网电缆。您的开发板成为 独立的网络设备,能够连接并执行网络操作 独立于您的计算机。 设备支持 当前支持的设备根据 其供应商和产品 ID列在驱动程序中。您可以通过将设备连接 到 Linux 机器并输入 ‘’‘’lsu***‘’‘’来检查您的设备。驱动程序位于 drivers/u***/eth。 例如,这个 lsu*** 输出行显示了一个具有供应商 ID 0x0x95 和产品 ID 0x7720 的 设备:Bus 002 Device 010:ID 0b95:7720 ASIX Electronics Corp. AX88772 如果您查看 drivers/u***/eth/asix.c,您将看到这一行在 支持的设备列表中,所以我们知道支持此适配器。 { 0x0b95, 0x7720 }, /* Trendnet TU2-ET100 V3.0R */ 如果您的适配器未列出,它仍有可能 工作。尝试查找适配器内芯片的制造商。 或拆开适配器并寻找芯片标记。然后将 您的供应商/产品 ID的一行添加到相应驱动程序的表中, 构建 U-Boot 并查看它是否有效。如果不是,则 适配器中的芯片和驱动程序之间可能存在差异。您可以尝试 为您的设备获取数据表,并将对它的支持添加到 U-Boot。这个不是 特别难——你只需要提供对 init、halt、send、recv四个基本功能的支持。(我们添加自己网卡的发送,接收功能。。。) |
|
|
|
只有小组成员才能发言,加入小组>>
物联网工程师必备:怎么选择不同的无线连接技术,本指南帮你忙!
3250 浏览 1 评论
【DFRobot TinkerNode NB-IoT 物联网开发板试用连载】WIFI功能测试
3895 浏览 0 评论
【DFRobot TinkerNode NB-IoT 物联网开发板试用连载】Arduino的替代SublimeText3+STino
3407 浏览 0 评论
使用端口扩展器轻松高效地向IIoT端点添加具有成本效益的子节点
3956 浏览 1 评论
20569 浏览 11 评论
模组有时候复位重启后输出日志为“REBOOT_CAUSE_SECURITY_PMU_POWER_ON_RESET”的原因?
722浏览 2评论
898浏览 2评论
944浏览 1评论
1069浏览 1评论
352浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-13 17:27 , Processed in 1.031839 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号