最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

STM32MP157 Linux系統(tǒng)移植開發(fā)篇10:Linux內(nèi)核網(wǎng)卡驅(qū)動移植

2021-09-07 14:58 作者:華清遠見研發(fā)中心  | 我要投稿

本文章為《STM32MP157 Linux系統(tǒng)移植開發(fā)篇》系列中的一篇,筆者使用的開發(fā)平臺為華清遠見FS-MP1A開發(fā)板(STM32MP157開發(fā)板)。stm32mp157是ARM雙核,2個A7核,1個M4核,A7核上可以跑Linux操作系統(tǒng),M4核上可以跑FreeRTOS、RT-Thread等實時操作系統(tǒng),STM32MP157開發(fā)板所以既可以學嵌入式linux,也可以學stm32單片機。

針對FS-MP1A開發(fā)板,除了Linux系統(tǒng)移植篇外,還包括其他多系列教程,包括Cortex-A7開發(fā)篇、Cortex-M4開發(fā)篇、擴展板驅(qū)動移植篇、Linux應(yīng)用開發(fā)篇、FreeRTOS系統(tǒng)移植篇、Linux驅(qū)動開發(fā)篇、硬件設(shè)計篇、人工智能機器視覺篇、Qt應(yīng)用編程篇、Qt綜合項目實戰(zhàn)篇等。歡迎關(guān)注,更多stm32mp157開發(fā)教程及視頻,可加技術(shù)交流Q群459754978,感謝關(guān)注。

關(guān)于FS-MP1A開發(fā)板:
手機淘寶分享碼:復制本行文字打開手淘?T4FPXn3YYJ2?
鏈接:https://item.taobao.com/item.htm?id=622457259672

實驗原理

STM32MP157A系列SoC集成一個千兆以太網(wǎng)媒體訪問控制器,支持RMII和MII兩種標準的PHY,F(xiàn)S-MP1A設(shè)備上外接了一個瑞昱的千兆以太網(wǎng)PHY芯片RTL8211F,原理圖如下:



查看原理圖得出RTL8211F數(shù)據(jù)管腳與STM32MP157A的管腳對應(yīng)關(guān)系如下:

原理圖網(wǎng)絡(luò)編號對應(yīng)管腳管腳功能管腳功能碼ETH_MDCPC1ETH1_MDCAF11ETH_MDIOPA2ETH1_MDIOAF11ETH_TXD0PG13ETH1_*MII_ TXD0AF11ETH_TXD1PG14ETH1_*MII_ TXD1AF11ETH_TXD2PC2ETH1_*MII_ TXD2AF11ETH_TXD3PE2ETH1_*MII_ TXD3AF11ETH_TX_ENPB11ETH1_*MII_ TX_ENAF11ETH_TX_CLKPG4ETH1_*MII_ GTX_CLKAF11ETH_RXD0PC4ETH1_*MII_ RXD0AF11ETH_RXD1PC5ETH1_*MII_ RXD1AF11ETH_RXD2PB0ETH1_*MII_ RXD2AF11ETH_RXD3PB1ETH1_*MII_ RXD3AF11ETH_RX_DVPA7ETH1_*MII_RX _DVAF11ETH_RX_CLKPA1ETH1_*MII_RX _CLKAF11ETH_CLK125PG5ETH1_*MII_ CLK125AF11ETH_RSTPH2ETH1_*MII_ CRSAF11

  1. 網(wǎng)卡設(shè)備樹節(jié)點

參考文檔:

Documentation/devicetree/bindings/net/stm32-dwmac.txt

Documentation/devicetree/bindings/net/ethernet-controller.yaml

Documentation/devicetree/bindings/net/ethernet-phy.yaml

Documentation/devicetree/bindings/net/snps,dwmac.yam

內(nèi)核中ST對STM32MP15x系列芯片的設(shè)備樹資源了做了定義,可參見:

arch/arm/boot/dts/stm32mp151.dtsi

stm32mp151中ethernet定義如下:

ethernet0: ethernet@5800a000 {

compatible = "st,stm32mp1-dwmac", "snps,dwmac-4.20a";

reg = <0x5800a000 0x2000>;

reg-names = "stmmaceth";

interrupts-extended = <&intc GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>,

<&exti 70 IRQ_TYPE_LEVEL_HIGH>;

interrupt-names = "macirq",

"eth_wake_irq";

clock-names = "stmmaceth",

"mac-clk-tx",

"mac-clk-rx",

"ethstp";

clocks = <&rcc ETHMAC>,

<&rcc ETHTX>,

<&rcc ETHRX>,

<&rcc ETHSTP>;

st,syscon = <&syscfg 0x4>;

snps,mixed-burst;

snps,pbl = <2>;

snps,en-tx-lpi-clockgating;

snps,axi-config = <&stmmac_axi_config_0>;

snps,tso;

power-domains = <&pd_core>;

status = "disabled";

};

上述代碼只對ethernet做了基本的初始化,并沒有針對不同的硬件設(shè)計做適配,所以需結(jié)合硬件補全設(shè)備樹節(jié)點信息。

對照內(nèi)核文檔目錄下相關(guān)文檔添加補充相關(guān)信息,亦可參考內(nèi)核中其他設(shè)備樹文件中相關(guān)描述,比如stm32mp15xx-dkx.dtsi關(guān)于ethernet的描述符合我們的要求,內(nèi)容如下:

&ethernet0 {

status = "okay";

pinctrl-0 = <&ethernet0_rgmii_pins_a>;

pinctrl-1 = <&ethernet0_rgmii_pins_sleep_a>;

pinctrl-names = "default", "sleep";

phy-mode = "rgmii-id";

max-speed = <1000>;

phy-handle = <&phy0>;


mdio0 {

#address-cells = <1>;

#size-cells = <0>;

compatible = "snps,dwmac-mdio";

phy0: ethernet-phy@0 {

reg = <0>;

};

};

};

  1. 管腳定義

在內(nèi)核中STM32MP1默認管腳定義在文件arch/arm/dts/stm32mp15-pinctrl.dtsi中,查看文件中是否有需要的管腳定義:

查看后確認有ethernet的管腳定義,且與FS-MP1A硬件使用情況一致,定義如下:

ethernet0_rgmii_pins_a: rgmii-0 {

pins1 {

pinmux = <STM32_PINMUX('G', 5, AF11)>, /* ETH_RGMII_CLK125 */

<STM32_PINMUX('G', 4, AF11)>, /* ETH_RGMII_GTX_CLK */

<STM32_PINMUX('G', 13, AF11)>, /* ETH_RGMII_TXD0 */

<STM32_PINMUX('G', 14, AF11)>, /* ETH_RGMII_TXD1 */

<STM32_PINMUX('C', 2, AF11)>, /* ETH_RGMII_TXD2 */

<STM32_PINMUX('E', 2, AF11)>, /* ETH_RGMII_TXD3 */

<STM32_PINMUX('B', 11, AF11)>, /* ETH_RGMII_TX_CTL */

<STM32_PINMUX('C', 1, AF11)>; /* ETH_MDC */

bias-disable;

drive-push-pull;

slew-rate = <2>;

};

pins2 {

pinmux = <STM32_PINMUX('A', 2, AF11)>; /* ETH_MDIO */

bias-disable;

drive-push-pull;

slew-rate = <0>;

};

pins3 {

pinmux = <STM32_PINMUX('C', 4, AF11)>, /* ETH_RGMII_RXD0 */

<STM32_PINMUX('C', 5, AF11)>, /* ETH_RGMII_RXD1 */

<STM32_PINMUX('B', 0, AF11)>, /* ETH_RGMII_RXD2 */

<STM32_PINMUX('B', 1, AF11)>, /* ETH_RGMII_RXD3 */

<STM32_PINMUX('A', 1, AF11)>, /* ETH_RGMII_RX_CLK */

<STM32_PINMUX('A', 7, AF11)>; /* ETH_RGMII_RX_CTL */

bias-disable;

};

};


ethernet0_rgmii_pins_sleep_a: rgmii-sleep-0 {

pins1 {

pinmux = <STM32_PINMUX('G', 5, ANALOG)>, /* ETH_RGMII_CLK125 */

<STM32_PINMUX('G', 4, ANALOG)>, /* ETH_RGMII_GTX_CLK */

<STM32_PINMUX('G', 13, ANALOG)>, /* ETH_RGMII_TXD0 */

<STM32_PINMUX('G', 14, ANALOG)>, /* ETH_RGMII_TXD1 */

<STM32_PINMUX('C', 2, ANALOG)>, /* ETH_RGMII_TXD2 */

<STM32_PINMUX('E', 2, ANALOG)>, /* ETH_RGMII_TXD3 */

<STM32_PINMUX('B', 11, ANALOG)>, /* ETH_RGMII_TX_CTL */

<STM32_PINMUX('A', 2, ANALOG)>, /* ETH_MDIO */

<STM32_PINMUX('C', 1, ANALOG)>, /* ETH_MDC */

<STM32_PINMUX('C', 4, ANALOG)>, /* ETH_RGMII_RXD0 */

<STM32_PINMUX('C', 5, ANALOG)>, /* ETH_RGMII_RXD1 */

<STM32_PINMUX('B', 0, ANALOG)>, /* ETH_RGMII_RXD2 */

<STM32_PINMUX('B', 1, ANALOG)>, /* ETH_RGMII_RXD3 */

<STM32_PINMUX('A', 1, ANALOG)>, /* ETH_RGMII_RX_CLK */

<STM32_PINMUX('A', 7, ANALOG)>; /* ETH_RGMII_RX_CTL */

};

};

實驗?zāi)康?/h1>

熟悉基于Linux操作系統(tǒng)下的網(wǎng)卡驅(qū)動移植配置過程。

實驗平臺

華清遠見開發(fā)環(huán)境,F(xiàn)S-MP1A平臺;

實驗步驟

  1. 導入交叉編譯工具鏈

linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

  1. 添加網(wǎng)卡設(shè)備樹配置。

修改arch/arm/boot/dts/stm32mp15xx-fsmp1x.dtsi文件

在文件末尾添加如下內(nèi)容:

&ethernet0 {

status = "okay";

pinctrl-0 = <&ethernet0_rgmii_pins_a>;

pinctrl-1 = <&ethernet0_rgmii_pins_sleep_a>;

pinctrl-names = "default", "sleep";

phy-mode = "rgmii-id";

max-speed = <1000>;

phy-handle = <&phy0>;


mdio0 {

#address-cells = <1>;

#size-cells = <0>;

compatible = "snps,dwmac-mdio";

phy0: ethernet-phy@0 {

reg = <0>;

};

};

};

  1. 配置內(nèi)核

由于內(nèi)核源碼默認配置以及支持網(wǎng)卡,本節(jié)列出主要選項,如下:

linux@ubuntu:$ make menuconfig

Device Drivers --->

[*] Network device support --->

[*] Ethernet driver support --->

<*> STMicroelectronics Multi-Gigabit Ethernet driver

<*> STMMAC Platform bus support

<*> Support for snps,dwc-qos-ethernet.txt DT binding.

<*> Generic driver for DWMAC

<*> STM32 DWMAC support

  1. 編譯內(nèi)核及設(shè)備樹:

linux@ubuntu:$ make -j4 uImage dtbs LOADADDR=0xC2000040


  1. 重啟測試

將編譯好的設(shè)備樹和內(nèi)核鏡像拷貝到/tftpboot目錄下,通過tftp引導內(nèi)核,重啟設(shè)備后可以看到如下啟動信息:





通過Ping 測試網(wǎng)卡

root@fsmp1a:$ ping?baidu.com



如果設(shè)備不能接入以太網(wǎng),可以ping主機


硬件平臺:華清遠見FS-MP1A開發(fā)板(STM32MP157)

部分開發(fā)教程下載:加QQ群459754978,群文件里有。

淘寶購買鏈接:華清遠見stm32mp157 linux開發(fā)板stm32單片機arm開發(fā)嵌入式學習板


STM32MP157 Linux系統(tǒng)移植開發(fā)篇10:Linux內(nèi)核網(wǎng)卡驅(qū)動移植的評論 (共 條)

分享到微博請遵守國家法律
资源县| 定西市| 潜山县| 大理市| 溧水县| 上饶市| 勐海县| 武穴市| 烟台市| 宜昌市| 遵义市| 璧山县| 玉门市| 张掖市| 同德县| 清丰县| 长垣县| 布尔津县| 宁安市| 温州市| 左云县| 霍州市| 改则县| 南部县| 临泉县| 麻江县| 永春县| 新竹县| 民县| 榆中县| 象山县| 天柱县| 郴州市| 永康市| 奉节县| 区。| 和平区| 安顺市| 龙陵县| 分宜县| 张掖市|