深圳网咯鸟网站建设公司怎么样,请人做ppt的网站,wordpress老网站重装法,厦门同安区建设局网站一、概述 u-boot概述就不概述了#xff0c;u-boot、kernel、dtb三件套#xff0c;dddd 经过国庆艰苦奋战#xff0c;已经成功把所有功能移植好了
二、编译官方代码 进入u-boot的目录
2.1 解压源码、打补丁
/* 解压源码 */
tar xf u-boot-stm32mp-v2022.10-stm32mp-r1-r0.…一、概述 u-boot概述就不概述了u-boot、kernel、dtb三件套dddd 经过国庆艰苦奋战已经成功把所有功能移植好了
二、编译官方代码 进入u-boot的目录
2.1 解压源码、打补丁
/* 解压源码 */
tar xf u-boot-stm32mp-v2022.10-stm32mp-r1-r0.tar.xz /* 进入源码目录 */
cd u-boot-stm32mp-v2022.10-stm32mp-r1//* 打补丁 */
for p in ls -1 ../*.patch; do patch -p1 $p; done
2.2 修改Makefile.sdk 打开Makefile.sdk把DEPLOYDIR目录改成这个 DEPLOYDIR ? $(SRC_PATH)/../../FIP_artifacts/u-boot 然后第12行开始我们把157的屏蔽掉留下135
# Init default config settings
# UBOOT_CONFIGS trusted
# UBOOT_DEFCONFIG_trusted stm32mp15_defconfig
# UBOOT_BINARY_stm32mp15_defconfig ? u-boot.dtb
# UBOOT_DEVICETREE_stm32mp15_defconfig ? stm32mp157c-ed1 stm32mp157f-ed1 stm32mp157a-ev1 stm32mp157c-ev1 stm32mp157d-ev1 stm32mp157f-ev1 stm32mp157a-dk1 stm32mp157d-dk1 stm32mp157c-dk2 stm32mp157f-dk2
# Init default config settings
UBOOT_CONFIGS trusted
UBOOT_DEFCONFIG_trusted stm32mp13_defconfig
UBOOT_BINARY_stm32mp13_defconfig ? u-boot.dtb
UBOOT_DEVICETREE_stm32mp13_defconfig ? stm32mp135f-dk
DEVICETREE ? stm32mp135f-dk
2.3 配置编译环境
/* 加载环境 */
source /opt/st/stm32mp1/4.2.1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi/* 配置环境变量 */
export FIP_DEPLOYDIR_ROOT$PWD/../../FIP_artifacts
不要关了这个终端它已经配置好了关于这部分的配置可以看上一篇关于TF-A的解释比较详细。
2.4 编译
make -f ../Makefile.sdk all
由于之前我们编译过了stm32mp135f-dk的TF-A和optee这里编译完成之后会直接调用fiptool工具给我们打包生成fip-stm32mp135-atk-optee.bin到FIP文件夹里。 [fiptool] Create fip-stm32mp135f-dk-optee.bin fip binary into FIP_DEPLOYDIR_FIP folder... [fiptool] Done 三、移植
3.1 复制官方文件
/* 进入设备树目录 */
cd arch/arm/dts/cp stm32mp135f-dk.dts stm32mp135-atk.dts
cp stm32mp13-pinctrl.dtsi stm32mp13-pinctrl-atk.dtsi
cp stm32mp135f-dk-u-boot.dtsi stm32mp135-atk-u-boot.dtsi/* 回到源码根目录 */
cd ../../../
3.2 修改头文件 打开stm32mp135-atk.dts把引脚头文件改成我们的
// #include stm32mp13-pinctrl.dtsi
#include stm32mp13-pinctrl-atk.dtsi
3.3 修改电源 首先找到scmi_regu节点把里面的内容删但是节点别删还得留下一个scmi_v1v8_periph
scmi_regu {scmi_vddcpu: voltd-vddcpu {reg VOLTD_SCMI_STPMIC1_BUCK1;regulator-name vddcpu;};scmi_vdd: voltd-vdd {reg VOLTD_SCMI_STPMIC1_BUCK3;regulator-name vdd;};scmi_vddcore: voltd-vddcore {reg VOLTD_SCMI_STPMIC1_BUCK4;regulator-name vddcore;};scmi_vdd_adc: voltd-vdd-adc {reg VOLTD_SCMI_STPMIC1_LDO1;regulator-name vdd_adc;};scmi_vdd_usb: voltd-vdd-usb {reg VOLTD_SCMI_STPMIC1_LDO4;regulator-name vdd_usb;};scmi_vdd_sd: voltd-vdd-sd {reg VOLTD_SCMI_STPMIC1_LDO5;regulator-name vdd_sd;};scmi_v1v8_periph: voltd-v1v8-periph {reg VOLTD_SCMI_STPMIC1_LDO6;regulator-name v1v8_periph;};scmi_v3v3_sw: voltd-v3v3-sw {reg VOLTD_SCMI_STPMIC1_PWR_SW2;regulator-name v3v3_sw;};
};
修改过后如下如果有大佬知道怎么解决麻烦底下留言帮帮忙
/* 这一段不知道怎么解决不能删
删除之后烧写到u-boot阶段会被强行复位但是使用分立电源又不行
*/
scmi_regu {scmi_v1v8_periph: voltd-v1v8-periph {reg VOLTD_SCMI_STPMIC1_LDO6;regulator-name v1v8_periph;};
};
笔者尝试过在根节点下加入对1.8V电源的描述但是并不行烧录的时候会直接被迫重启刚学linux不久大佬带带
/* 想用分立电源代替掉scmi_v1v8_periph但是没有实现 */// v1v8: v1v8 {// compatible regulator-fixed;// regulator-name v1v8_periph;// regulator-min-microvolt 1800000;// regulator-max-microvolt 1800000;// regulator-off-in-suspend;// regulator-always-on;// }; 删除scmi电源之后在根节点下面加入我们的电源描述和之前的一样
vddcore: vddcore {compatible regulator-fixed;regulator-name vddcore;regulator-min-microvolt 1200000;regulator-max-microvolt 1350000;regulator-off-in-suspend;regulator-always-on;};vddcpu: vddcpu {compatible regulator-fixed;regulator-name vddcpu;regulator-min-microvolt 1350000;regulator-max-microvolt 1350000;regulator-off-in-suspend;regulator-always-on;};v3v3: v3v3 {compatible regulator-fixed;regulator-name v3v3;regulator-min-microvolt 3300000;regulator-max-microvolt 3300000;regulator-off-in-suspend;regulator-always-on;};vbus_otg: vbus_otg {compatible regulator-fixed;regulator-name vbus_otg;regulator-min-microvolt 5000000;regulator-max-microvolt 5000000;regulator-off-in-suspend;regulator-always-on;};vdd: vdd {compatible regulator-fixed;regulator-name vdd;regulator-min-microvolt 3300000;regulator-max-microvolt 3300000;regulator-off-in-suspend;regulator-always-on;};vdd_usb: vdd_usb {compatible regulator-fixed;regulator-name vdd_usb;regulator-min-microvolt 3300000;regulator-max-microvolt 3300000;regulator-off-in-suspend;regulator-always-on;};
3.4 删除无关节点 可以删除建议删除的节点如下 1. i2c5全部 2. uart8 usart1 usart2三个串口 3. 根节点下的gpio-keys 4. 根节点下aliases里的几个串口只留下串口4 5. dcmipp节点 6. spi5 timer3 timer4 timer8 timer14这几个都可以删了 3.5 修改USB OTG 正点原子的OTG使用的是usbphyc_port1而usbphyc_port0是host找到usbphyc_port1节点只需要修改该它的电源即可。
usbphyc_port1 {// phy-supply scmi_vdd_usb; /* 删了原来的 */phy-supply vdd_usb;st,current-boost-microamp 1000;st,decrease-hs-slew-rate;st,tune-hs-dc-level 2;st,enable-hs-rftime-reduction;st,trim-hs-current 11;st,trim-hs-impedance 2;st,tune-squelch-level 1;st,enable-hs-rx-gain-eq;st,no-hs-ftime-ctrl;st,no-lsfs-sc;
}; 修改usbotg_hs
usbotg_hs {phys usbphyc_port1 0;phy-names usb2-phy;usb-role-switch;dr_mode otg;pinctrl-0 usbotg_hs_pins_a;pinctrl-names default;vbus-supply vbus_otg;status okay;
};
3.6 修改USB节点 同OTG先把电源改了下面那个connector好像不要也行
usbphyc_port0 {// phy-supply scmi_vdd_usb; /* 删了原来的 */phy-supply vdd_usb;st,current-boost-microamp 1000;st,decrease-hs-slew-rate;st,tune-hs-dc-level 2;st,enable-hs-rftime-reduction;st,trim-hs-current 11;st,trim-hs-impedance 2;st,tune-squelch-level 1;st,enable-hs-rx-gain-eq;st,no-hs-ftime-ctrl;st,no-lsfs-sc;/** Hack to keep hub active if wakeup source is enabled* otherwise the hub will wakeup the port0 as soon as the v3v3_sw is disabled*/connector {compatible usb-a-connector;vbus-supply v3v3;};
};
修改usbh_ehci节点
usbh_ehci {phys usbphyc_port0;status okay;
};
3.7 修改TF卡和emmc节点
这里偷个懒直接把原子的复制过来了直接替换掉
sdmmc1 {pinctrl-names default, opendrain, sleep;pinctrl-0 sdmmc1_b4_pins_a sdmmc1_clk_pins_a;pinctrl-1 sdmmc1_b4_od_pins_a sdmmc1_clk_pins_a;pinctrl-2 sdmmc1_b4_sleep_pins_a;cd-gpios gpiof 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP);disable-wp;st,neg-edge;no-1-8-v;bus-width 4;vmmc-supply v3v3;status okay;
};/* EMMC */
sdmmc2 {pinctrl-names default, opendrain, sleep;pinctrl-0 sdmmc2_b4_pins_a sdmmc2_b4_b7_pins_a sdmmc2_clk_pins_a;pinctrl-1 sdmmc2_b4_od_pins_a sdmmc2_b4_b7_od_pins_a sdmmc2_clk_pins_a;pinctrl-2 sdmmc2_b4_sleep_pins_a sdmmc2_b4_b7_sleep_pins_a;non-removable;st,neg-edge;mmc-ddr-3_3v;no-1-8-v;bus-width 8;vmmc-supply v3v3;#address-cells 1;#size-cells 0;status okay;
};
3.8 修改ltdc 在根节点下添加
atk_pinctrl_lcd {gpior gpioe 9 GPIO_ACTIVE_LOW;gpiog gpioa 15 GPIO_ACTIVE_LOW;gpiob gpioe 15 GPIO_ACTIVE_LOW;}; 修改panel_rgb:panel-rgb这里继续偷懒直接复制粘贴了
panel_rgb: panel-rgb {compatible simple-panel;backlight panel_backlight;power-supply v3v3;status okay;port {panel_in_rgb: endpoint {remote-endpoint ltdc_out_rgb;};};display-timings {native-mode timing0; /* 时序信息 */timing0: timing0 { /* 7 寸 1024*600 分辨率 */clock-frequency 51200000; /* LCD 像素时钟单位 Hz */hactive 1024; /* LCD X 轴像素个数 */vactive 600; /* LCD Y 轴像素个数 */hfront-porch 160; /* LCD hfp 参数 */hback-porch 140; /* LCD hbp 参数 */hsync-len 20; /* LCD hspw 参数 */vback-porch 20; /* LCD vbp 参数 */vfront-porch 12; /* LCD vfp 参数 */vsync-len 3; /* LCD vspw 参数 */};};}; 修改panel_backlightST用的是PE 12正点原子用的是PD 13
panel_backlight: panel-backlight {compatible gpio-backlight;gpios gpiod 13 GPIO_ACTIVE_HIGH;default-on;status okay;}; 然后向pinctrl追加
pinctrl {gpio_r:gpio_r {pins {pinmux STM32_PINMUX(E, 9, GPIO); /* PE9.GPIO */bias-pull-up;drive-push-pull;};};gpio_g:gpio_g {pins {pinmux STM32_PINMUX(A, 15, GPIO); /* PA15.GPIO */bias-pull-up;drive-push-pull;};};gpio_b:gpio_b {pins {pinmux STM32_PINMUX(E, 15, GPIO); /* PE15.GPIO */bias-pull-up;drive-push-pull;};};
};
3.9 修改网络 找到eth1和eth2两个节点直接覆盖修改
eth1 {status okay;pinctrl-0 eth1_rgmii_pins_a;pinctrl-1 eth1_rgmii_sleep_pins_a;pinctrl-names default, sleep;phy-mode rgmii-id;max-speed 1000;phy-handle phy0_eth1;nvmem-cells ethernet_mac1_address;nvmem-cell-names mac-address;mdio1 {#address-cells 1;#size-cells 0;compatible snps,dwmac-mdio;phy0_eth1: ethernet-phy1 {reg 1;};};
};/* 需要用eth2就取消注释即可 */
// eth2 {
// status okay;
// pinctrl-0 eth2_rgmii_pins_a;
// pinctrl-1 eth2_rgmii_sleep_pins_a;
// pinctrl-names default, sleep;
// phy-mode rgmii-id;
// max-speed 1000;
// phy-handle phy0_eth2;
// phy-supply v3v3;
// nvmem-cells ethernet_mac2_address;
// nvmem-cell-names mac-address;// mdio1 {
// #address-cells 1;
// #size-cells 0;
// compatible snps,dwmac-mdio;
// phy0_eth2: ethernet-phy2 {
// reg 2;
// };
// };
// };
3.10 修改引脚 偷个懒直接照搬原子的引脚配置即可
// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
/** Copyright (C) STMicroelectronics 2021 - All Rights Reserved* Author: Alexandre Torgue alexandre.torguefoss.st.com*/
#include dt-bindings/pinctrl/stm32-pinfunc.hpinctrl {eth1_rgmii_pins_a: eth1-rgmii-1 {pins1 {pinmux STM32_PINMUX(F, 12, AF11), /* ETH1_RGMII_CLK125 */STM32_PINMUX(C, 1, AF11), /* ETH1_RGMII_GTX_CLK */STM32_PINMUX(G, 13, AF11), /* ETH1_RGMII_TXD0 */STM32_PINMUX(G, 14, AF11), /* ETH1_RGMII_TXD1 */STM32_PINMUX(C, 2, AF11), /* ETH1_RGMII_TXD2 */STM32_PINMUX(E, 5, AF10), /* ETH1_RGMII_TXD3 */STM32_PINMUX(B, 11, AF11), /* ETH1_RGMII_TX_CTL */STM32_PINMUX(A, 2, AF11), /* ETH1_MDIO */STM32_PINMUX(G, 2, AF11); /* ETH1_MDC */bias-disable;drive-push-pull;slew-rate 2;};pins2 {pinmux STM32_PINMUX(C, 4, AF11), /* ETH1_RGMII_RXD0 */STM32_PINMUX(C, 5, AF11), /* ETH1_RGMII_RXD1 */STM32_PINMUX(B, 0, AF11), /* ETH1_RGMII_RXD2 */STM32_PINMUX(B, 1, AF11), /* ETH1_RGMII_RXD3 */STM32_PINMUX(A, 1, AF11), /* ETH1_RGMII_RX_CLK */STM32_PINMUX(A, 7, AF11); /* ETH1_RGMII_RX_CTL */bias-disable;};};eth1_rgmii_sleep_pins_a: eth1-rgmii-sleep-1 {pins1 {pinmux STM32_PINMUX(F, 12, ANALOG), /* ETH1_RGMII_CLK125 */STM32_PINMUX(C, 1, ANALOG), /* ETH1_RGMII_GTX_CLK */STM32_PINMUX(G, 13, ANALOG), /* ETH1_RGMII_TXD0 */STM32_PINMUX(G, 14, ANALOG), /* ETH1_RGMII_TXD1 */STM32_PINMUX(C, 2, ANALOG), /* ETH1_RGMII_TXD2 */STM32_PINMUX(E, 5, ANALOG), /* ETH1_RGMII_TXD3 */STM32_PINMUX(B, 11, ANALOG), /* ETH1_RGMII_TX_CTL */STM32_PINMUX(A, 2, ANALOG), /* ETH1_MDIO */STM32_PINMUX(G, 2, ANALOG), /* ETH1_MDC */STM32_PINMUX(C, 4, ANALOG), /* ETH1_RGMII_RXD0 */STM32_PINMUX(C, 5, ANALOG), /* ETH1_RGMII_RXD1 */STM32_PINMUX(B, 0, ANALOG), /* ETH1_RGMII_RXD2 */STM32_PINMUX(B, 1, ANALOG), /* ETH1_RGMII_RXD3 */STM32_PINMUX(A, 1, ANALOG), /* ETH1_RGMII_RX_CLK */STM32_PINMUX(A, 7, ANALOG); /* ETH1_RGMII_RX_CTL */};};eth2_rgmii_pins_a: eth2-rgmii-2 {pins1 {pinmux STM32_PINMUX(H, 2, AF13), /* ETH2_RGMII_CLK125 */STM32_PINMUX(F, 7, AF11), /* ETH2_RGMII_TXD0 */STM32_PINMUX(G, 11, AF10), /* ETH2_RGMII_TXD1 */STM32_PINMUX(G, 1, AF10), /* ETH2_RGMII_TXD2 */STM32_PINMUX(E, 6, AF11), /* ETH2_RGMII_TXD3 */STM32_PINMUX(G, 3, AF10), /* ETH2_RGMII_GTX_CLK */STM32_PINMUX(F, 6, AF11), /* ETH2_RGMII_TX_CTL */STM32_PINMUX(B, 2, AF11), /* ETH2_MDIO */STM32_PINMUX(G, 5, AF10); /* ETH2_MDC */bias-disable;drive-push-pull;slew-rate 2;};pins2 {pinmux STM32_PINMUX(F, 4, AF11), /* ETH2_RGMII_RXD0 */STM32_PINMUX(E, 2, AF10), /* ETH2_RGMII_RXD1 */STM32_PINMUX(H, 6, AF12), /* ETH2_RGMII_RXD2 */STM32_PINMUX(A, 8, AF11), /* ETH2_RGMII_RXD3 */STM32_PINMUX(H, 11, AF11), /* ETH2_RGMII_RX_CLK */STM32_PINMUX(G, 12, AF12); /* ETH2_RGMII_RX_CTL */bias-disable;};};eth2_rgmii_sleep_pins_a: eth2-rgmii-sleep-2 {pins1 {pinmux STM32_PINMUX(H, 2, ANALOG), /* ETH2_RGMII_CLK125 */STM32_PINMUX(F, 7, ANALOG), /* ETH2_RGMII_TXD0 */STM32_PINMUX(G, 11, ANALOG), /* ETH2_RGMII_TXD1 */STM32_PINMUX(G, 1, ANALOG), /* ETH2_RGMII_TXD2 */STM32_PINMUX(E, 6, ANALOG), /* ETH2_RGMII_TXD3 */STM32_PINMUX(G, 3, ANALOG), /* ETH2_RGMII_GTX_CLK */STM32_PINMUX(F, 6, ANALOG), /* ETH2_RGMII_TX_CTL */STM32_PINMUX(B, 2, ANALOG), /* ETH2_MDIO */STM32_PINMUX(G, 5, ANALOG), /* ETH2_MDC */STM32_PINMUX(F, 4, ANALOG), /* ETH2_RGMII_RXD0 */STM32_PINMUX(E, 2, ANALOG), /* ETH2_RGMII_RXD1 */STM32_PINMUX(H, 6, ANALOG), /* ETH2_RGMII_RXD2 */STM32_PINMUX(A, 8, ANALOG), /* ETH2_RGMII_RXD3 */STM32_PINMUX(H, 11, ANALOG), /* ETH2_RGMII_RX_CLK */STM32_PINMUX(G, 12, ANALOG); /* ETH2_RGMII_RX_CTL */};};ltdc_pins_a: ltdc-0 {pins {pinmux STM32_PINMUX(D, 9, AF13), /* LCD_CLK */STM32_PINMUX(H, 10, AF13), /* LCD_HSYNC */STM32_PINMUX(G, 4, AF11), /* LCD_VSYNC */ STM32_PINMUX(H, 9, AF11), /* LCD_DE */STM32_PINMUX(E, 11, AF9), /* LCD_R0 */STM32_PINMUX(D, 4, AF11), /* LCD_R1 */STM32_PINMUX(G, 7, AF14), /* LCD_R2 */STM32_PINMUX(B, 12, AF13), /* LCD_R3 */STM32_PINMUX(D, 14, AF14), /* LCD_R4 */STM32_PINMUX(E, 7, AF14), /* LCD_R5 */STM32_PINMUX(E, 13, AF14), /* LCD_R6 */STM32_PINMUX(E, 9, AF14), /* LCD_R7 */STM32_PINMUX(F, 5, AF9), /* LCD_G0 */STM32_PINMUX(F, 1, AF14), /* LCD_G1 */STM32_PINMUX(H, 13, AF14), /* LCD_G2 */STM32_PINMUX(F, 3, AF14), /* LCD_G3 */STM32_PINMUX(E, 12, AF11), /* LCD_G4 */STM32_PINMUX(G, 0, AF14), /* LCD_G5 */STM32_PINMUX(A, 12, AF14), /* LCD_G6 */STM32_PINMUX(A, 15, AF11), /* LCD_G7 */STM32_PINMUX(D, 5, AF13), /* LCD_B0 */STM32_PINMUX(G, 8, AF7), /* LCD_B1 */STM32_PINMUX(D, 10, AF14), /* LCD_B2 */STM32_PINMUX(F, 2, AF14), /* LCD_B3 */STM32_PINMUX(G, 15, AF11), /* LCD_B4 */STM32_PINMUX(D, 15, AF14), /* LCD_B5 */STM32_PINMUX(D, 1, AF11), /* LCD_B6 */STM32_PINMUX(E, 15, AF14); /* LCD_B7 */bias-disable;drive-push-pull;slew-rate 1;};};ltdc_sleep_pins_a: ltdc-sleep-0 {pins {pinmux STM32_PINMUX(D, 9, ANALOG), /* LCD_CLK */STM32_PINMUX(H, 10, ANALOG), /* LCD_HSYNC */STM32_PINMUX(G, 4, ANALOG), /* LCD_VSYNC */STM32_PINMUX(H, 9, ANALOG), /* LCD_DE */STM32_PINMUX(E, 11, ANALOG), /* LCD_R0 */STM32_PINMUX(D, 4, ANALOG), /* LCD_R1 */ STM32_PINMUX(G, 7, ANALOG), /* LCD_R2 */STM32_PINMUX(B, 12, ANALOG), /* LCD_R3 */STM32_PINMUX(D, 14, ANALOG), /* LCD_R4 */STM32_PINMUX(E, 7, ANALOG), /* LCD_R5 */STM32_PINMUX(E, 13, ANALOG), /* LCD_R6 */STM32_PINMUX(E, 9, ANALOG), /* LCD_R7 */STM32_PINMUX(F, 5, ANALOG), /* LCD_G0 */STM32_PINMUX(F, 1, ANALOG), /* LCD_G1 */ STM32_PINMUX(H, 13, ANALOG), /* LCD_G2 */STM32_PINMUX(F, 3, ANALOG), /* LCD_G3 */STM32_PINMUX(E, 12, ANALOG), /* LCD_G4 */STM32_PINMUX(G, 0, ANALOG), /* LCD_G5 */STM32_PINMUX(A, 12, ANALOG), /* LCD_G6 */STM32_PINMUX(A, 15, ANALOG), /* LCD_G7 */STM32_PINMUX(D, 5, ANALOG), /* LCD_B0 */STM32_PINMUX(G, 8, ANALOG), /* LCD_B1 */ STM32_PINMUX(D, 10, ANALOG), /* LCD_B2 */STM32_PINMUX(F, 2, ANALOG), /* LCD_B3 */STM32_PINMUX(G, 15, ANALOG), /* LCD_B4 */STM32_PINMUX(D, 15, ANALOG), /* LCD_B5 */STM32_PINMUX(D, 1, ANALOG), /* LCD_B6 */STM32_PINMUX(E, 15, ANALOG); /* LCD_B7 */};};sdmmc1_b4_pins_a: sdmmc1-b4-0 {pins {pinmux STM32_PINMUX(C, 8, AF12), /* SDMMC1_D0 */STM32_PINMUX(C, 9, AF12), /* SDMMC1_D1 */STM32_PINMUX(C, 10, AF12), /* SDMMC1_D2 */STM32_PINMUX(C, 11, AF12), /* SDMMC1_D3 */STM32_PINMUX(D, 2, AF12); /* SDMMC1_CMD */slew-rate 1;drive-push-pull;bias-disable;};};sdmmc1_b4_od_pins_a: sdmmc1-b4-od-0 {pins1 {pinmux STM32_PINMUX(C, 8, AF12), /* SDMMC1_D0 */STM32_PINMUX(C, 9, AF12), /* SDMMC1_D1 */STM32_PINMUX(C, 10, AF12), /* SDMMC1_D2 */STM32_PINMUX(C, 11, AF12); /* SDMMC1_D3 */slew-rate 1;drive-push-pull;bias-disable;};pins2 {pinmux STM32_PINMUX(D, 2, AF12); /* SDMMC1_CMD */slew-rate 1;drive-open-drain;bias-disable;};};sdmmc1_b4_sleep_pins_a: sdmmc1-b4-sleep-0 {pins {pinmux STM32_PINMUX(C, 8, ANALOG), /* SDMMC1_D0 */STM32_PINMUX(C, 9, ANALOG), /* SDMMC1_D1 */STM32_PINMUX(C, 10, ANALOG), /* SDMMC1_D2 */STM32_PINMUX(C, 11, ANALOG), /* SDMMC1_D3 */STM32_PINMUX(C, 12, ANALOG), /* SDMMC1_CK */STM32_PINMUX(D, 2, ANALOG); /* SDMMC1_CMD */};};sdmmc1_clk_pins_a: sdmmc1-clk-0 {pins {pinmux STM32_PINMUX(C, 12, AF12); /* SDMMC1_CK */slew-rate 1;drive-push-pull;bias-disable;};};sdmmc2_b4_pins_a: sdmmc2-b4-0 {pins {pinmux STM32_PINMUX(B, 14, AF10), /* SDMMC2_D0 */STM32_PINMUX(B, 15, AF10), /* SDMMC2_D1 */STM32_PINMUX(B, 3, AF10), /* SDMMC2_D2 */STM32_PINMUX(B, 4, AF10), /* SDMMC2_D3 */STM32_PINMUX(G, 6, AF10); /* SDMMC2_CMD */slew-rate 1;drive-push-pull;bias-pull-up;};};sdmmc2_b4_b7_pins_a: sdmmc2-b4-b7-0 {pins {pinmux STM32_PINMUX(F, 0, AF10), /* SDMMC2_D4 */STM32_PINMUX(B, 9, AF10), /* SDMMC2_D5 */STM32_PINMUX(C, 6, AF10), /* SDMMC2_D6 */ STM32_PINMUX(C, 7, AF10); /* SDMMC2_D7 */slew-rate 1;drive-push-pull;bias-pull-up;};};sdmmc2_b4_od_pins_a: sdmmc2-b4-od-0 {pins1 {pinmux STM32_PINMUX(B, 14, AF10), /* SDMMC2_D0 */STM32_PINMUX(B, 15, AF10), /* SDMMC2_D1 */STM32_PINMUX(B, 3, AF10), /* SDMMC2_D2 */STM32_PINMUX(B, 4, AF10); /* SDMMC2_D3 */slew-rate 1;drive-push-pull;bias-pull-up;};pins2 {pinmux STM32_PINMUX(G, 6, AF10); /* SDMMC2_CMD */slew-rate 1;drive-open-drain;bias-pull-up;};};sdmmc2_b4_b7_od_pins_a: sdmmc2-b4-b7-od-0 {pins {pinmux STM32_PINMUX(F, 0, AF10), /* SDMMC2_D4 */STM32_PINMUX(B, 9, AF10), /* SDMMC2_D5 */STM32_PINMUX(C, 6, AF10), /* SDMMC2_D6 */ STM32_PINMUX(C, 7, AF10); /* SDMMC2_D7 */slew-rate 1;drive-push-pull;bias-pull-up;};}; sdmmc2_b4_sleep_pins_a: sdmmc2-b4-sleep-0 {pins {pinmux STM32_PINMUX(B, 14, ANALOG), /* SDMMC2_D0 */STM32_PINMUX(B, 15, ANALOG), /* SDMMC2_D1 */STM32_PINMUX(B, 3, ANALOG), /* SDMMC2_D2 */STM32_PINMUX(B, 4, ANALOG), /* SDMMC2_D3 */STM32_PINMUX(E, 3, ANALOG), /* SDMMC2_CK */STM32_PINMUX(G, 6, ANALOG); /* SDMMC2_CMD */};};sdmmc2_b4_b7_sleep_pins_a: sdmmc2-b4-b7-sleep-0 {pins {pinmux STM32_PINMUX(F, 0, ANALOG), /* SDMMC2_D4 */STM32_PINMUX(B, 9, ANALOG), /* SDMMC2_D5 */STM32_PINMUX(C, 6, ANALOG), /* SDMMC2_D6 */ STM32_PINMUX(C, 7, ANALOG); /* SDMMC2_D7 */};};sdmmc2_clk_pins_a: sdmmc2-clk-0 {pins {pinmux STM32_PINMUX(E, 3, AF10); /* SDMMC2_CK */slew-rate 1;drive-push-pull;bias-pull-up;};};uart4_pins_a: uart4-0 {pins1 {pinmux STM32_PINMUX(D, 6, AF8); /* UART4_TX */bias-disable;drive-push-pull;slew-rate 0;};pins2 {pinmux STM32_PINMUX(D, 8, AF8); /* UART4_RX */bias-pull-up;};};uart4_idle_pins_a: uart4-idle-0 {pins1 {pinmux STM32_PINMUX(D, 6, ANALOG); /* UART4_TX */};pins2 {pinmux STM32_PINMUX(D, 8, AF8); /* UART4_RX */bias-pull-up;};};uart4_sleep_pins_a: uart4-sleep-0 {pins {pinmux STM32_PINMUX(D, 6, ANALOG), /* UART4_TX */STM32_PINMUX(D, 8, ANALOG); /* UART4_RX */};};usbotg_hs_pins_a: usbotg-hs-0 {pins {pinmux STM32_PINMUX(A, 10, ANALOG); /* OTG_ID */};};
};3.11 其他 在stm32mp135-atk-u-boot.dtsi里关于adc那一行是检测usb电压的把它注释掉然后笔者把快速启动注释了led灯也没有用到。 config {// u-boot,boot-led led-blue;// u-boot,error-led led-red;u-boot,mmc-env-partition u-boot-env;// st,adc_usb_pd adc1 6, adc1 12;// st,fastboot-gpios gpioa 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP);st,stm32prog-gpios gpioa 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP);};
3.12 网络补充 这里一点至关重要 正点原子修改了phy的驱动所以我们要找到drivers\net\phy\phy.c这个文件在genphy_config_aneg(struct phy_device *phydev)这个函数后面插入
/***************alientek add****************/
#define YT8531_REG_DEBUG_ADDR_OFFSET 0x1e
#define YT8531_REG_DEBUG_DATA 0x1fstatic int yt8531_rd_ext(struct phy_device *phydev, u32 regnum)
{int val;phy_write(phydev, MDIO_DEVAD_NONE, YT8531_REG_DEBUG_ADDR_OFFSET, regnum);val phy_read(phydev, MDIO_DEVAD_NONE, YT8531_REG_DEBUG_DATA);return val;
}static int yt8531_wr_ext(struct phy_device *phydev, u32 regnum, u16 val)
{int ret;ret phy_write(phydev, MDIO_DEVAD_NONE, YT8531_REG_DEBUG_ADDR_OFFSET, regnum);ret phy_write(phydev, MDIO_DEVAD_NONE, YT8531_REG_DEBUG_DATA, val);return ret;
}int yt8531_xtal_init(struct phy_device *phydev)
{int ret 0;int val 0;mdelay(50);do {ret yt8531_wr_ext(phydev, 0xa012, 0x88);if (ret 0)return ret;mdelay(100);val yt8531_rd_ext(phydev, 0xa012);if (val 0)return val;mdelay(20);} while (val ! 0x88);ret yt8531_wr_ext(phydev, 0xa012, 0xd0);if (ret 0)return ret;return ret;
}void yt8531_led_init(struct phy_device *phydev)
{yt8531_wr_ext(phydev, 0xa00d, 0x2600); //yellow led blinkyt8531_wr_ext(phydev, 0xa00c, 0x30); //10_100M green led always lightyt8531_wr_ext(phydev, 0xa00e, 0x40); //1000M green led always light
}/*********************end add***************************/
然后修改 int genphy_update_link(struct phy_device *phydev)这个函数
/*** genphy_update_link - update link status in phydev* phydev: target phy_device struct** Description: Update the value in phydev-link to reflect the* current link value. In order to do this, we need to read* the status register twice, keeping the second value.*/
int genphy_update_link(struct phy_device *phydev)
{unsigned int mii_reg;/************alientek add********/int ret 0;unsigned int phyid1, phyid2;phyid1 phy_read(phydev, MDIO_DEVAD_NONE, MII_PHYSID1);phyid2 phy_read(phydev, MDIO_DEVAD_NONE, MII_PHYSID2);if((phyid1 0x4f51) (phyid2 0xe91b)) { //YT8531 IDret yt8531_xtal_init(phydev);if (ret 0){printf(yt8531_xtal_init failed.\r\n);return ret;}yt8531_led_init(phydev);}/*********************end add***************************//** Wait if the link is up, and autonegotiation is in progress* (ie - were capable and its not done)*/mii_reg phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR);/** If we already saw the link up, and it hasnt gone down, then* we dont need to wait for autoneg again*/if (phydev-link mii_reg BMSR_LSTATUS)return 0;if ((phydev-autoneg AUTONEG_ENABLE) !(mii_reg BMSR_ANEGCOMPLETE)) {int i 0;printf(%s Waiting for PHY auto negotiation to complete,phydev-dev-name);while (!(mii_reg BMSR_ANEGCOMPLETE)) {/** Timeout reached ?*/if (i (PHY_ANEG_TIMEOUT / 50)) {printf( TIMEOUT !\n);phydev-link 0;return -ETIMEDOUT;}if (ctrlc()) {puts(user interrupt!\n);phydev-link 0;return -EINTR;}if ((i % 10) 0)printf(.);mii_reg phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR);mdelay(50); /* 50 ms */}printf( done\n);phydev-link 1;} else {/* Read the link a second time to clear the latched state */mii_reg phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR);if (mii_reg BMSR_LSTATUS)phydev-link 1;elsephydev-link 0;}return 0;
}
四、编译
make -f ../Makefile.sdk all 由于我们前面已经编译好了TF-A和optee在这里编译uboot的时候会自动用fiptool给我们打包好然后生成我们需要的fip-stm32mp135-atk-optee.bin文件