轉載 | Uboot DM9621網卡移植之路

2021-02-20 迅為電子

原文連結:https://blog.csdn.net/Jason_416/article/details/103691302

作者:Jason416

CSDN博客: Jason416就是我

前言

    根據前面文章USB和Ethernet協議了解與原理圖分析、DM_USB和DM_ETH模型簡介所介紹,想必大家已經知道移植的流程應該是如何了,這裡再簡單的給出大致步驟,如下。

移植USB Host Controller驅動使能USB3503 Hub移植DM9621驅動測試驗證功能性

    接下來就按照這幾個步驟進行Uboot中DM9621網卡的移植之路,最終實現在Uboot中使用網絡命令進行內核的加載等操作。

移植開始

移植USB Host Controller驅動

    該部分驅動已經有三星官方提供到Uboot主線中,我們下載的源碼包裡面已經有對應的代碼,drivers/usb/host/ehci-exynos.c文件包含了其實現。我們要做的只是將其編譯選項打開,編譯進Uboot最終bin文件中即可,下面給出詳細的步驟。

打開編譯選項

Kconfig中打開主機驅動宏,對應路徑如下

為Device Drivers ---> [*] USB support ---> 見下圖

打開Exynos4412對應的宏CONFIG_USB_EHCI_EXYNOS

diff --git a/include/configs/itop4412.h b/include/configs/itop4412.hindex c071e02..5bd5fdc 100644@@ -35,6 +35,9 @@ /* #define MACH_TYPE_ITOP4412          0xffffffff */ #define CONFIG_MACH_TYPE                       MACH_TYPE_ITOP4412 +/* USB */+#define CONFIG_USB_EHCI_EXYNOS+ /* select serial console configuration */ #define CONFIG_SERIAL2

Command line interface ---> Device access commands ---> [*] usb

設備樹修改

加入ehci設備描述信息,如下:



45 ehci@12580000 { 46 compatible = "samsung,exynos-ehci"; 47 reg = <0x12580000 0x100>; 48 #address-cells = <1>; 49 #size-cells = <1>; 50 status = "okay"; 51 /* In order to reset USB ethernet, DM9621 RESET IO pin */ 52 samsung,vbus-gpio = <&gpc0 1 0>; 53 phy { 54 compatible = "samsung,exynos-usb-phy"; 55 reg = <0x125B0000 0x100>; 56 }; 57     };

編譯與調試

    在上述操作編譯完成後,就能使用USB主機控制器了,在終端鍵入USB start便可以看到有相應的USB信息輸出,接下來便可以進行USB 3503的配置與使能。

使能USB3503 Hub

配置GPIO

    根據前面文章USB和Ethernet協議了解與原理圖分析的分析,USB 3503 Hub晶片配置簡單,只需要做些IO操作便可。通過地板原理圖核心板原理圖查找分析,需要操作GPM3_3 (USB3503_CONNECT)和GPM2_4 (USB3503_RESET)。這裡使用Uboot的IO驅動模型,而不是直接寫寄存器,通過對應的宏和標準GPIO接口調用,便可以完成對USB Hub晶片的初始化,下面給出代碼。



diff --git a/board/samsung/itop4412/itop4412.c b/board/samsung/itop4412/itop4412.cindex 99a2fac..3068cd4 100644@@ -12,6 +12,14 @@ #include <asm/arch/periph.h> #include <asm/arch/pinmux.h> #include <usb.h>+#include <usb/dwc2_udc.h>++#define DEBUG+#ifdef DEBUG+#undef debug+#define debug(fmt, args...) debug_cond(true, fmt, ##args)+#endif DECLARE_GLOBAL_DATA_PTR; @@ -20,15 +28,82 @@ u32 get_board_rev(void) return 0; } +static void board_gpio_init(void)+{+#ifdef CONFIG_CMD_USB+ /* USB3503A Connect */+ gpio_request(EXYNOS4X12_GPIO_M33, "USB3503A Connect");++ /* USB3503A Reset */+ gpio_request(EXYNOS4X12_GPIO_M24, "USB3503A Reset");++ /* Red LED2 Light On */+ gpio_request(EXYNOS4X12_GPIO_L20, "Red LED2");+ gpio_direction_output(EXYNOS4X12_GPIO_L20, 1);+#endif+}+ int exynos_init(void) {+ debug("---> ready to call board_gpio_init()!\n");+ board_gpio_init();++ /* FIXME: maybe should be not called in here */+ board_usb_init(0, USB_INIT_DEVICE);+ return 0; } +#ifdef CONFIG_USB_GADGET+static int s5pc210_phy_control(int on)+{+ /* FIXME: need to set power? */+#if 0+ struct udevice *dev;+ int ret;++ ret = regulator_get_by_platname("VDD_UOTG_3.0V", &dev);+ if (ret) {+ pr_err("Regulator get error: %d", ret);+ return ret;+ }++ if (on)+ return regulator_set_mode(dev, OPMODE_ON);+ else+ return regulator_set_mode(dev, OPMODE_LPM);+#else+ return 0;+#endif+}++struct dwc2_plat_otg_data s5pc210_otg_data = {+ .phy_control = s5pc210_phy_control,+ .regs_phy = EXYNOS4X12_USBPHY_BASE,+ .regs_otg = EXYNOS4X12_USBOTG_BASE,+ .usb_phy_ctrl = EXYNOS4X12_USBPHY_CONTROL,+ .usb_flags = PHY0_SLEEP,+};+#endif++#if defined(CONFIG_USB_GADGET) || defined(CONFIG_CMD_USB)+ int board_usb_init(int index, enum usb_init_type init) {- return 0;+#ifdef CONFIG_CMD_USB+ debug("---> ready to init usb3503\n");++ /* USB3503A Disconnect, Reset, Connect */+ gpio_direction_output(EXYNOS4X12_GPIO_M33, 0);+ gpio_direction_output(EXYNOS4X12_GPIO_M24, 0);+ gpio_direction_output(EXYNOS4X12_GPIO_M24, 1);+ gpio_direction_output(EXYNOS4X12_GPIO_M33, 1);++#endif+ debug("USB_udc_probe\n");+ return dwc2_udc_probe(&s5pc210_otg_data); }+#endif #ifdef CONFIG_BOARD_EARLY_INIT_F int exynos_early_init_f(void)

    編譯與調試

在執行完這步驟的時候,執行usb start; usb reset後,便會有下面的對應輸出,說明USB 3503已經在正常工作了,並且DM9621網卡已經使能了,接下來就是初始化並配置設備和適配到DM_ETH模型的操作了。

CPU:   Exynos4412 @ 1 GHzModel: itop-4412 based on Exynos4412Board: itop-4412 based on Exynos4412DRAM:  1 GiBWARNING: Caches not enabled---> ready to call board_gpio_init()!---> ready to init usb3503USB_udc_probeMMC:   SAMSUNG SDHCI: 0, EXYNOS DWMMC: 1Net:   No ethernet found.Hit any key to stop autoboot:  0 u-boot # usb startstarting USB...USB0:   USB EHCI 1.00scanning bus 0 for devices... 1 USB Device(s) foundu-boot # usb resetresetting USB...USB0:   USB EHCI 1.00scanning bus 0 for devices... 3 USB Device(s) foundu-boot # usb treeUSB device tree:  1  Hub (480 Mb/s, 0mA)  |  u-boot EHCI Host Controller   |  +-2  Hub (480 Mb/s, 2mA)    |    +-3  See Interface (480 Mb/s, 180mA)

移植DM9621驅動

說明

    在上面的步驟執行完,可以發現DM9621設備已經使能,能在USB總線上看到該設備了,接下來需要初始化和配置,並根據DM_ETH模型來提供相應的操作集便可。

————————————————

PS:作者為精英版八群交流群的技術高手,如需了解更多,請移步原文作者博客。

相關焦點

  • uboot移植初步成功啦
    先說說移植吧,代碼上的移植:只是基於代碼的改動,而不包括知道代碼改動的背後~~ 移植的uboot版本為1.4版,用的編譯工具鏈為arm-elf-。不能用arm-linux編譯,原因是用的c庫不同。(也試了一下,用arm-linux-編譯得到的uboot.bin加載到SDRAM中運行後無顯示)。arm-elf-gcc版本為2.93版本的(有點低,還需要修改cpus3c44b0config.mk,後面提到)。在uboot1.4版本中符合s3c44b0內核的板子為daveB2板,移植就是基於該板子的,當然實際板子有很多硬體情況與它不同,需要修改。
  • uboot在2440上的移植
    因此不可能有通用的Bootloard,開發時應根據具體的配置進行移植。 為什麼我們要用U-BOOT?顯然可以將作業系統直接燒入flash中執行,但從軟體的升級和程序修補來說則是不可少的。本文引用地址:http://www.eepw.com.cn/article/201611/316103.htmU-BOOT 目錄結構分析:1. board:開發板相關目錄2. common:通用的命令函數3. cpu:特定CPU架構相關目錄,如arm920t4. doc:uboot
  • 為什麼要有uboot
    (2)uboot具有可移植性並不是說uboot在哪個開發板都可以隨便用,而是說uboot具有在原始碼級別的移植能力,可以針對多個開發板進行移植,移植後就可以在這個開發板上使用了。譬如uboot要實現網絡功能就必須驅動網卡晶片。(2)SoC級(譬如串口)就是SoC內部外設,板級就是SoC外面開發板上面的硬體(譬如網卡、iNand) 3.5、uboot的「生命周期」 (1)uboot的生命周期就是指:uboot什麼時候開始運行,什麼時候結束運行。
  • Uboot在S3C2440上的移植詳解(四)
    一、移植環境二、移植步驟在這一篇中,我們首先讓開發板對CS8900或者DM9000X網卡的支持,然後再分析實現u-boot怎樣來引導Linux內核啟動。因為測試u-boot引導內核我們要用到網絡下載功能。
  • 「正點原子FPGA連載」第十四章U-Boot移植
    前兩章我們都是使用的正點原子提供的uboot,本章我們就來學習如何將Xilinx官方的uboot移植到正點原子的ZYNQ開發板上,學習如何在uboot中添加我們自己的板子。1.1Xilinx官方開發板uboot編譯測試1.1.1查找Xilinx官方的開發板默認配置文件uboot的移植並不是說我們完完全全的從零開始將uboot移植到我們現在所使用的開發板或者開發平臺上。
  • 轉載 | USB和Ethernet協議了解與原理圖分析
    本專題主要是在Uboot中驅動USB Device - DM9621 (Davicom DM96xx USB 10/100 Ethernet),下面會簡單介紹下硬體背景,怎麼去初始化晶片。DM9621 (USB Device)        最後是Davicom DM9621 USB轉Ethernet網卡晶片,控制與數據傳輸都是通過USB總線。
  • ZYNQ Linux作業系統移植四個部分說明文檔
    > ZYNQ上面移植Linux作業系統包括四個部分,uboot,devicetree,kernel,ramdisk.(這個根據硬體在sdk中創建),然後執行uboot,uboot會將kernel、devicetree和ramdisk載入ddr,跳轉到內核入口處執行,這樣linux就啟動了。
  • U-Boot移植DM9000網卡
    根據書《嵌入式Linux應用開發完全手冊》移植網卡驅動,對於Jz2440開發板好像並不適用,Jz2440開發板使用的是DM9000網卡,已經不是書上講的CS8900網卡了。DM9000網卡與CS8900網卡接口方式不一樣,經過幾天的折騰,終於移植成功,現將筆記整理如下。
  • 用uboot調試裸機C語言
    昨天用uboot1.4調試了一下基於s3c44b0的一個LED燈實驗,成功,紀錄下: 最初的設想是想用uboot的loadb命令來調試自己移植的uboot,發現串口沒顯示,當時就暈了 就不想再動了
  • USB無線網卡的Linux驅動移植
    引言本文引用地址:http://www.eepw.com.cn/article/175406.htmCOMFAST CF150NS USB無線網卡使用IEEE802.11n無線技術,無線傳輸速率最高達150 Mbps。
  • AT91RM9200的UBOOT啟動燒寫過程詳解
    這個loder完成的功能主要是初始化時鐘,sdram和xmodem協議,為下載和啟動uboot做準備。當下載了loader.bin 後,超級終端會繼續列印:ccccc.。。.。這時我們就可以下在uboot了。uboot將被下載到sdram中的一個地址後並把pc指針調到此處開始執行uboot。
  • 詳解USB無線網卡的Linux驅動移植
    引言本文引用地址:http://www.eepw.com.cn/article/201808/385301.htmCOMFAST CF150NS USB無線網卡使用IEEE802.11n無線技術,無線傳輸速率最高達150 Mbps。
  • OK6410開發板uboot燒寫
    首先,飛凌的OK6410開發板並不支持JLink燒寫uboot,只能通過SD卡來燒寫,這一點我事先並不知道,他們網店介紹裡並未說明,而且銷售人員也沒有做出任何提示,結果我花了整整一天時間嘗試所有通過JLink燒寫uboot的可能方法,結合網上個別人反映,最終意識到通過JLink完成uboot燒寫是不可能成功的了,後來在銷售人員那裡確認了這一點
  • iMX8MM移植AC9260無線網卡
    上次把Ubuntu-Base移植到iMX8MM之後啊,我的開發方便了很多,但是在聯網方面卻又遇上了問題。但是,為了一個驅動選擇加價400的iMX8M真的值得麼,我覺得這驅動我也能移植!移植好Ubuntu在手上隨便玩了玩之後,我拿出一塊Intel的9260無線網卡,在飛凌嵌入式的OKMX8MM-C開發板上,並沒有無線網卡使用的M.2(E-Key)接口,而是使用Mini PCI-E接口為連接華為4G模塊所用。
  • 史上最全Uboot常用命令匯總(超全面詳細)收藏這一篇就夠了
    uboot 的全稱是 Universal Boot Loader, uboot 是一個遵循 GPL 協議的開源軟體, uboot 是一個裸機代碼,可以看作是一個裸機綜合例程。現在的 uboot 已經支持液晶屏、網絡、 USB 等高級功能。
  • OK5718-C UBOOT配置GPIO以及LCD神器橫空出世!
    在實際開發過程中客戶往往需要在uboot 中配置引腳的默認功能、LCD 時序參數來滿足自身的功能需求,但是對於不擅於修改uboot 等底層代碼或者是uboot不開源的情況來說,這必將延長開發周期。針對這個問題,飛凌專門研發了該款上位機配置軟體,通過軟體配置即可實現上述全部功能。
  • Intel無線網卡已經可以上網
    前言本篇文章資源轉載自 http://bbs.pcbeta.com
  • 【stm32mp157教程之linux系統移植】課時9:Uboot移植3
    【stm32mp157教程之linux系統移植】課時9:Uboot移植3 2020
  • 「正點原子Linux連載」第三十七章Linux內核移植
    第三十七章Linux內核移植前兩章我們簡單了解了一下Linux內核頂層Makefile和Linux內核的啟動流程,本章我們就來學習一下如何將NXP官方提供的Linux內核移植到正點原子的I.MX6U-ALPHA開發板上。通過本章的學習,我們將掌握如何將半導體廠商提供的Linux BSP包移植到我們自己的平臺上。