Linux第51步_移植ST公司的linux内核第3步_添加修改设备树

1、设备树文件的路径

1)、创建linux中的设备树头文件

在“my_linux/linux-5.4.31/arch/arm/boot/dts/”目录中,以“stm32mp15xx-edx.dtsi”为蓝本,复制一份,并命名为 “stm32mp157d-atk.dtsi”,这就是我们开发板的设备树头文件。

2)、创建linux中的设备树文件

在“my_linux/linux-5.4.31/arch/arm/boot/dts/”目录中,以“stm32mp157d-ed1.dts”为蓝本,复制一份,并命名为 “stm32mp157d-atk.dts”,这就是我们开发板的设备树文件。

2、添加设备树

1)、打开终端

输入“ls回车

输入“cd linux/回车”,切换到“linux”目录

输入“ls回车”,列出“linux”目录下的文件和文件夹

输入“cd atk-mp1/回车”,切换到“atk-mp1”目录

输入“ls回车”,列出“atk-mp1”目录下的文件和文件夹

输入“cd linux/回车”,切换到“linux”目录

输入“ls回车”,列出“linux”目录下的文件和文件夹

输入“cd my_linux/回车”,切换到“my_linux”目录

输入“ls回车”,列出“my_linux”目录下的文件和文件夹

输入“cd linux-5.4.31/回车”,切换到“linux-5.4.31”目录

输入“ls回车”,列出“linux-5.4.31”目录下的文件和文件夹

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第1张图片

2)、输入“cd arch/回车”,切换到“arch”目录

输入“ls回车”,列出“arch”目录下的文件和文件夹

输入“cd arm/回车”,切换到“arm”目录

输入“ls回车”,列出“arm”目录下的文件和文件夹

输入“cd boot/回车”,切换到“boot”目录

输入“ls回车”,列出“boot”目录下的文件和文件夹

输入“cd dts/回车”,切换到“dts”目录

输入“ls回车”,列出“dts”目录下的文件和文件夹

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第2张图片

发现ST公司开发板的设备树头文件“stm32mp15xx-edx.dtsi

3)、输入“cp stm32mp15xx-edx.dtsi  stm32mp157d-atk.dtsi回车”,以“stm32mp15xx-edx.dtsi”为蓝本,复制一份,并命名为 “stm32mp157d-atk.dtsi

输入“ls stm32mp157d-at*回车

输入“cp stm32mp157d-ed1.dts  stm32mp157d-atk.dts回车”,以“stm32mp157c-ed1.dts”为蓝本,复制一份,并命名为 “stm32mp157d-atk.dts

输入“ls stm32mp157d-at*回车

至此,设备树文件和头文件添加成功。

5、修改设备树文件“stm32mp157d-atk.dts

1)、使用VSCode打开“linux-5.4.31.code-workspace”,然后点击“arch”,点击“arm”,点击“boot”,点击“dts”,找到“stm32mp157d-atk.dts”,见下图:

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第3张图片

2)、将“stm32mp15xx-edx.dtsi”修改为“stm32mp157d-atk.dtsi”,

见下图:

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第4张图片

6、修改设备树头文件“stm32mp157d-atk.dtsi

1)、使用VSCode打开“linux-5.4.31.code-workspace

点击“转到”,点击“转到文件”,在搜索框中,输入“stm32mp157d-atk.dtsi”就可打开搜索到的文件;

见下图:

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第5张图片

文件打开如下:

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第6张图片

2)、添加头文件,内容如下:

#include "stm32mp157-m4-srm.dtsi"

#include "stm32mp157-m4-srm-pinctrl.dtsi"

见下图

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第7张图片

3)、删除下面的“led”节点和“sd_switch”节点,见下图:

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第8张图片

删除后,文件如下:

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第9张图片

4)、删除下面的“vin”节点,见下图:

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第10张图片

删除后,文件如下:

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第11张图片

5)、在59行开始处,添加“vddcore”和“v3v3

vddcore: buck1 {

compatible = "regulator-fixed";

regulator-name = "vddcore";

regulator-min-microvolt = <1200000>;

regulator-max-microvolt = <1350000>;

regulator-always-on;

regulator-boot-on;

};

v3v3: regulator-3p3v {

compatible = "regulator-fixed";

regulator-name = "v3v3";

regulator-min-microvolt = <3300000>;

regulator-max-microvolt = <3300000>;

regulator-always-on;

regulator-boot-on;

};

见下图:

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第12张图片

6)、删除adc节点,见下图:

 Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第13张图片

删除后,文件如下:

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第14张图片

7)、删除dac节点

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第15张图片

删除后文件如下:

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第16张图片

8)、添加“ethernet0”节点

 ðernet0 {

 status = "okay";

 pinctrl-0 = <ðernet0_rgmii_pins_a>;

 pinctrl-1 = <ðernet0_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>;

};

};

};

添加“ethernet0”节点后,见下图:

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第17张图片

9)、删除“i2c4”节点,删除后见下图:

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第18张图片

10)、删除“m4_rproc”和“pwr_regulators”,见下图:

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第19张图片

删除后,见下图:

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第20张图片

11)、使用下面的内容替换sdmmc1节点

&sdmmc1 {

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

pinctrl-0 = <&sdmmc1_b4_pins_a>;

pinctrl-1 = <&sdmmc1_b4_od_pins_a>;

pinctrl-2 = <&sdmmc1_b4_sleep_pins_a>;

broken-cd;

st,neg-edge;

bus-width = <4>;

vmmc-supply = <&v3v3>;

status = "okay";

};

替换sdmmc1节点后,见下图:

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第21张图片

12)、使用下面的内容替换“sdmmc2”

&sdmmc2 {

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

pinctrl-0 = <&sdmmc2_b4_pins_a>;

pinctrl-1 = <&sdmmc2_b4_od_pins_a>;

pinctrl-2 = <&sdmmc2_b4_sleep_pins_a>;

non-removable;

st,neg-edge;

bus-width = <8>;

vmmc-supply = <&v3v3>;

keep-power-in-suspend;

status = "okay";

};

替换后,见下图:

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第22张图片

13)、删除“timers6”节点

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第23张图片

删除“timers6”节点后,见下图:

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第24张图片

14)、删除“usbotg_hs”,“usbphyc_port0”和“usbphyc_port1

/* Copyright (C) STMicroelectronics 2017 - All Rights Reserved

 * Author: Ludovic Barre for STMicroelectronics.

 */

#include "stm32mp157-m4-srm.dtsi"

#include "stm32mp157-m4-srm-pinctrl.dtsi"

#include <dt-bindings/gpio/gpio.h>

#include <dt-bindings/mfd/st,stpmic1.h>

/ {

memory@c0000000 {

device_type = "memory";

reg = <0xC0000000 0x40000000>;

};

reserved-memory {

#address-cells = <1>;

#size-cells = <1>;

ranges;

mcuram2: mcuram2@10000000 {

compatible = "shared-dma-pool";

reg = <0x10000000 0x40000>;

no-map;

};

vdev0vring0: vdev0vring0@10040000 {

compatible = "shared-dma-pool";

reg = <0x10040000 0x1000>;

no-map;

};

vdev0vring1: vdev0vring1@10041000 {

compatible = "shared-dma-pool";

reg = <0x10041000 0x1000>;

no-map;

};

vdev0buffer: vdev0buffer@10042000 {

compatible = "shared-dma-pool";

reg = <0x10042000 0x4000>;

no-map;

};

mcuram: mcuram@30000000 {

compatible = "shared-dma-pool";

reg = <0x30000000 0x40000>;

no-map;

};

retram: retram@38000000 {

compatible = "shared-dma-pool";

reg = <0x38000000 0x10000>;

no-map;

};

};

    vddcore: buck1 {

compatible = "regulator-fixed";

regulator-name = "vddcore";

regulator-min-microvolt = <1200000>;

regulator-max-microvolt = <1350000>;

regulator-always-on;

regulator-boot-on;

};

v3v3: regulator-3p3v {

compatible = "regulator-fixed";

regulator-name = "v3v3";

regulator-min-microvolt = <3300000>;

regulator-max-microvolt = <3300000>;

regulator-always-on;

regulator-boot-on;

};

};

&cpu0{

cpu-supply = <&vddcore>;

};

&crc1 {

status = "okay";

};

&dma1 {

sram = <&dma_pool>;

};

&dma2 {

sram = <&dma_pool>;

};

&dts {

status = "okay";

};

 ðernet0 {

 status = "okay";

 pinctrl-0 = <ðernet0_rgmii_pins_a>;

 pinctrl-1 = <ðernet0_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>;

};

};

};

&hash1 {

status = "okay";

};

&ipcc {

status = "okay";

};

&iwdg2 {

timeout-sec = <32>;

status = "okay";

};

&rng1 {

status = "okay";

};

&rtc {

status = "okay";

};

&sdmmc1 {

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

pinctrl-0 = <&sdmmc1_b4_pins_a>;

pinctrl-1 = <&sdmmc1_b4_od_pins_a>;

pinctrl-2 = <&sdmmc1_b4_sleep_pins_a>;

broken-cd;

st,neg-edge;

bus-width = <4>;

vmmc-supply = <&v3v3>;

status = "okay";

};

&sdmmc2 {

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

pinctrl-0 = <&sdmmc2_b4_pins_a>;

pinctrl-1 = <&sdmmc2_b4_od_pins_a>;

pinctrl-2 = <&sdmmc2_b4_sleep_pins_a>;

non-removable;

st,neg-edge;

bus-width = <8>;

vmmc-supply = <&v3v3>;

keep-power-in-suspend;

status = "okay";

};

&sram {

dma_pool: dma_pool@0 {

reg = <0x50000 0x10000>;

pool;

};

};

&uart4 {

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

pinctrl-0 = <&uart4_pins_a>;

pinctrl-1 = <&uart4_sleep_pins_a>;

pinctrl-2 = <&uart4_idle_pins_a>;

pinctrl-3 = <&uart4_pins_a>;

/delete-property/dmas;

/delete-property/dma-names;

status = "okay";

};

7、修改arch/arm/boot/dts/目录中的“Makefile

1)、打开arch/arm/boot/dts/Makefile到“dtb-$(CONFIG_ARCH_STM32)”配置项

2)、添加配置项stmm32mp157d-atk.dtb”,修改后,见下图:

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树_第25张图片

3)、保存arch/arm/boot/dts/目录中的“Makefile”。

你可能感兴趣的:(产品研发,linux,服务器,STM32MP157,移植,学习,经验分享)