小熊派开发板是否值得购买_树莓派是linux吗

小熊派开发板是否值得购买_树莓派是linux吗到此位置SD卡烧录TF_a固件已经完成后续是编译Uboot放到第三分区启动后可以进入Uboot命令行本片记录用到很多linux的基础操作包括cdlsdd等命令也包含了一些makefile的概念

版本记录

日期 版本 备注 作者
2024年2月18日 1.0.0 第二章起稿 蓝羽玄机
2024年2月21日 1.0.1 修复卡死在sp_min(bl32)部分 蓝羽玄机

前置任务

在前一篇文章已经搭建了VMware的虚拟机环境 与SD卡的配置

未完成的小伙伴们可以点击连接跳转 一. 小熊派bearpi-micro 移植 Linux 内核 完全手册 (环境搭建篇)

下面 记录移植TF-A的编译过程

获取 TF-A 源码

因为我的ubuntu repo 配置总是出问题 所以我选择最笨的方法

直接根据https://gitee.com/weidongshan/manifests/blob/linux-sdk/stm32mp1/100ask_stm32mp157_pro_release-v2.0.xml的文件来git所需源代码 例如 : -d 表示分支 Tfa-v2.2 就是重命名git目录

git clone https://gitee.com/weidongshan/stm32mp15xc-tf-a -d stm32mp-ya15xc Tfa-v2.2

目前所需的文件只有 Tfa-v2.2 ,ToolChain-buildroot2020 后续需要用什么 我再git也可以

git clone https://e.coding.net/weidongshan/ToolChain-8.x/ToolChain-8.x -d master ToolChain

在这里插入图片描述

配置环境变量

这里可以查看一. 小熊派bearpi-micro 移植 Linux 内核 完全手册 (环境搭建篇) 的环境搭建篇

sudo nano ~/.bashrc
在最后一行添加这三句代码
export ARCH=arm 
export CROSS_COMPILE=arm-buildroot-linux-gnueabihf- 
export PATH=$PATH:/home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin

输入命令使配置生效
source ~/.bashrc

测试环境变量是否配置成功

echo $CROSS_COMPILE arm-buildroot-linux-gnueabihf-

在这里插入图片描述

看到GCC版本表示配置成功

TF-A是什么

TF-A全称Arm Trusted Firmware(可信固件)它是一个开源的软件,最早是用在Armv8-A,ST也在MP1里面使用到了TF-A。它的作用就是隔离硬件,为硬件提供一个安全环境并且提供安全服务。TF-A只要学会使用就好了,不用过多探究,不是linux驱动开发的重点。

TF-A的官方源码还不能直接使用,需要对其打补丁。ST也是在TF-A官方的源码上将自己的MP1系列芯片添加进去的,因此必然涉及到对官方TF-A源码的修改,修改的部分就是“补丁”,补丁文件后缀为.patch,之前图片中的0001-st-update-v2.2-r2.0.0.patch就是ST为TF-A官方源码做的补丁文件,补丁文件里面描述了修改源码中的哪些文件,应该添加或删除哪些代码或文件,打完补丁后的TF-A才是真正需要的

但百问网100ask_stm32mp157所提供的开发包中提供的TF-A源码包是已经打过ST的补丁的 所以这一步可以暂时跳过.有兴趣的可以查一查资料(虽然资料并不多,但操作确实不难 只是在环境配置上比较繁琐)

这里推荐资料: 正点原子嵌入式linux驱动开发——TF-A使用

在开发包中提供的TF-A源码是这样的效果 在这里插入图片描述

samba 环境搭建(可选)

使Linux主机成为Windows网络的一份子,与Windows网络相互分享资源

这里为什么使用 samba 呢 因为需要修改文件 linux 自己用不惯 所以直接映射到windows 用vscode 打开进行修改了

先用apt工具进行 samba的安装

sudo apt install samba

对smb文件进行配置 (先备份 在修改)

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak 
sudo nano /etc/samba/smb.conf

先取消[homes]、[printers]的项目,添加[temp]项目如下

在这里插入图片描述

将以下配置写入 smb.conf的最后一行

[temp]              #<==共享资源名称
        comment = Temporary file space #<==简单的解释,内容无关紧要
        path = /home/book     #<==实际的共享目录
        writable = yes    #<==设置为可写入
        browseable = yes   #<==可以被所有用户浏览到资源名称,
        guest ok = yes    #<==可以让用户随意登录

之后使用来重启samba 服务 使配置生效

sudo /etc/init.d/smbd restart

在Windows和Linux网络都畅通的情况下,在Windows下登录Samba服务器。使用命令查看Samba的IP地址:

ifconfig

在这里插入图片描述

在windows资源管理器输入刚才所查到的Ubuntu的ip地址

在这里插入图片描述

点击回车 是否能跳出以下窗口 如果未跳出 请检查网络 或配置

输入登录ubuntu的账户密码就可以了

在这里插入图片描述

这时进入temp映射目录 就可以看到我们原本在ubuntu中的目录 在这里插入图片描述

也可以选择映射到网络驱动器 直接在windows 资源管理器中创建快捷方式 (如果IP发生变化 会失效 需要重新使用ifconfig 查看ubuntu的IP 在进行映射)

在这里插入图片描述

注意事项

防火墙

如果防火墙不关闭,Windows和Samba之间的连通可能会被阻挡。

Windows上关闭防火墙:控制面板->系统和安全->Windows防火墙->打开或关闭Windows防火墙;

Linux上关闭防火墙:

setenforce 0
service iptables stop

权限问题

如果出现权限时 说明你所登陆的账号 没有权限访问你设定的目录

在这里插入图片描述

最简单粗暴的方法是 直接将要修改的目录 赋予777权限

sudo chmod 777 /home -R

当然 你也可以创建一个分组 然后将samba 登陆账户分配给那个分组 然后将权限给到分组上 .

因为是本地搭建个虚拟机环境来编译 不涉及到外网 , 所以我就简单粗暴一点 直接修改全部权限了

修改TF-A设备树

此时windows资源管理器上找到Ubuntu上TF-A的源码路径 右键空白处 使用VScode打开目录

在这里插入图片描述

在这里插入图片描述

修改设备树

打开TF-A2.2源码下的fdts 目录 此目录所包含的文件都是设备树文件
在这里插入图片描述

首先 先创建小熊派开发板的设备树文件 stm32mp157a-bearpi.dts 、stm32mp15-pinctrl-bearpi.dtsi 和 stm32mp15xx-bearpi.dtsi 文件 这三个文件分别是根据st官方的DK1开发板来仿写的 因为设备树这东西 如果有相似的开发板 可以直接移植过来用

创建这三个文件 按照下列给出的代码 来修改设备树

stm32mp157a-bearpi.dts –> stm32mp157a-dk1.dts

stm32mp15xx-bearpi.dtsi –> stm32mp15xx-dkx.dtsi

stm32mp15-pinctrl-bearpi.dtsi –> stm32mp15-pinctrl.dtsi

如果你还没了解过设备树 请先学习基础课程 这方面过于繁琐 我只记录怎么使开发板动起来了

stm32mp157a-bearpi.dts

/dts-v1/;

 #include "stm32mp157.dtsi"
 #include "stm32mp15xa.dtsi"
 #include "stm32mp15-pinctrl.dtsi"
 #include "stm32mp15xxac-pinctrl.dtsi"
 #include "stm32mp15xx-bearpi.dtsi"
 #include <dt-bindings/soc/st,stm32-etzpc.h>
 
 / { 
   
     model = "STMicroelectronics STM32MP157A-BearPi Board";
     compatible = "st,stm32mp157a-bearpi", "st,stm32mp157";
 
     aliases { 
   
         serial0 = &uart4;
  
     };
 
     chosen { 
   
         stdout-path = "serial0:115200n8";
     };
 };
 
/** 1.0.1修改记录 * 不要写以下一段 会导致无法载入 卡死在sp_min (bl32) 个人猜测原因应该是 * 默认情况下,此外围设备分配给 MPU 非安全环境 * 而写了板专用设备树文件中的ETZPC节点用于配置安全外设的状态 * 或者 是我配置有问题 但在测试环境中不考虑安不安全了 能跑就行 ***/

// &etzpc { 
   
// st,decprot = <
// DECPROT(STM32MP1_ETZPC_USART1_ID, DECPROT_NS_RW, DECPROT_UNLOCK)
// DECPROT(STM32MP1_ETZPC_SPI6_ID, DECPROT_NS_RW, DECPROT_UNLOCK)
// DECPROT(STM32MP1_ETZPC_I2C4_ID, DECPROT_NS_RW, DECPROT_UNLOCK)
// DECPROT(STM32MP1_ETZPC_I2C6_ID, DECPROT_NS_RW, DECPROT_UNLOCK)
// DECPROT(STM32MP1_ETZPC_RNG1_ID, DECPROT_NS_RW, DECPROT_UNLOCK)
// DECPROT(STM32MP1_ETZPC_HASH1_ID, DECPROT_NS_RW, DECPROT_UNLOCK)
// DECPROT(STM32MP1_ETZPC_DDRCTRL_ID, DECPROT_NS_R_S_W, DECPROT_LOCK)
// DECPROT(STM32MP1_ETZPC_DDRPHYC_ID, DECPROT_NS_R_S_W, DECPROT_LOCK)
// DECPROT(STM32MP1_ETZPC_STGENC_ID, DECPROT_S_RW, DECPROT_LOCK)
// DECPROT(STM32MP1_ETZPC_BKPSRAM_ID, DECPROT_S_RW, DECPROT_LOCK)
// DECPROT(STM32MP1_ETZPC_IWDG1_ID, DECPROT_S_RW, DECPROT_LOCK)
// >;
// };

 

stm32mp15xx-bearpi.dtsi

 #include <dt-bindings/clock/stm32mp1-clksrc.h>
 #include <dt-bindings/power/stm32mp1-power.h>
 #include "stm32mp15-ddr3-1x4Gb-1066-binG.dtsi"
 
 / { 
   
     memory@c0000000 { 
   
         device_type = "memory";
         reg = <0xc0000000 0x20000000>;
     };
 
     vddcore: regulator-vddcore { 
   
         compatible = "regulator-fixed";
         regulator-name = "vddcore";
         regulator-min-microvolt = <1200000>;
         regulator-max-microvolt = <1350000>;
         regulator-always-on;
     };
 
     v3v3: regulator-3p3v { 
   
         compatible = "regulator-fixed";
         regulator-name = "v3v3";
         regulator-min-microvolt = <3300000>;
         regulator-max-microvolt = <3300000>;
         regulator-always-on;
     };
 
     vdd: regulator-vdd { 
   
         compatible = "regulator-fixed";
         regulator-name = "vdd";
         regulator-min-microvolt = <3300000>;
         regulator-max-microvolt = <3300000>;
         regulator-always-on;
     };
 
     vdd_usb: regulator-vdd-usb { 
   
         compatible = "regulator-fixed";
         regulator-name = "vdd_usb";
         regulator-min-microvolt = <3300000>;
         regulator-max-microvolt = <3300000>;
         regulator-always-on;
     };
 };
 
 &bsec { 
   
     board_id: board_id@ec { 
   
         reg = <0xec 0x4>;
         st,non-secure-otp;
     };
 };
 
 &clk_hse { 
   
     st,digbypass;
 };
 
 &hash1 { 
   
     status = "okay";
 };
 
 &i2c4 { 
   
     pinctrl-names = "default";
     pinctrl-0 = <&i2c4_pins_a>;
     i2c-scl-rising-time-ns = <185>;
     i2c-scl-falling-time-ns = <20>;
     clock-frequency = <400000>;
     status = "okay";
     secure-status = "okay";
 };
 
 &iwdg2 { 
   
     timeout-sec = <32>;
     secure-timeout-sec = <5>;
     status = "okay";
     secure-status = "okay";
 };
 
 &nvmem_layout { 
   
     nvmem-cells = <&cfg0_otp>,
               <&part_number_otp>,
               <&monotonic_otp>,
               <&nand_otp>,
               <&uid_otp>,
               <&package_otp>,
               <&hw2_otp>,
               <&pkh_otp>,
               <&board_id>;
 
     nvmem-cell-names = "cfg0_otp",
                "part_number_otp",
                "monotonic_otp",
                "nand_otp",
                "uid_otp",
                "package_otp",
                "hw2_otp",
                "pkh_otp",
                "board_id";
 };
 
 &pwr_regulators { 
   
     system_suspend_supported_soc_modes = <
         STM32_PM_CSLEEP_RUN
         STM32_PM_CSTOP_ALLOW_LP_STOP
         STM32_PM_CSTOP_ALLOW_STANDBY_DDR_SR
     >;
     system_off_soc_mode = <STM32_PM_CSTOP_ALLOW_STANDBY_DDR_OFF>;
     vdd-supply = <&vdd>;
     vdd_3v3_usbfs-supply = <&vdd_usb>;
 };
 
 &rcc { 
   
     st,hsi-cal;
     st,csi-cal;
     st,cal-sec = <60>;
     st,clksrc = <
         CLK_MPU_PLL1P
         CLK_AXI_PLL2P
         CLK_MCU_PLL3P
         CLK_PLL12_HSE
         CLK_PLL3_HSE
         CLK_PLL4_HSE
         CLK_RTC_LSE
         CLK_MCO1_DISABLED
         CLK_MCO2_DISABLED
     >;
 
     st,clkdiv = <
         1 /*MPU*/
         0 /*AXI*/
         0 /*MCU*/
         1 /*APB1*/
         1 /*APB2*/
         1 /*APB3*/
         1 /*APB4*/
         2 /*APB5*/
         23 /*RTC*/
         0 /*MCO1*/
         0 /*MCO2*/
     >;
 
     st,pkcs = <
         CLK_CKPER_HSE
         CLK_FMC_ACLK
         CLK_QSPI_ACLK
         CLK_ETH_PLL4P
         CLK_SDMMC12_PLL4P
         CLK_DSI_DSIPLL
         CLK_STGEN_HSE
         CLK_USBPHY_HSE
         CLK_SPI2S1_PLL3Q
         CLK_SPI2S23_PLL3Q
         CLK_SPI45_HSI
         CLK_SPI6_HSI
         CLK_I2C46_HSI
         CLK_SDMMC3_PLL4P
         CLK_USBO_USBPHY
         CLK_ADC_CKPER
         CLK_CEC_LSE
         CLK_I2C12_HSI
         CLK_I2C35_HSI
         CLK_UART1_HSI
         CLK_UART24_HSI
         CLK_UART35_HSI
         CLK_UART6_HSI
         CLK_UART78_HSI
         CLK_SPDIF_PLL4P
         CLK_FDCAN_PLL4R
         CLK_SAI1_PLL3Q
         CLK_SAI2_PLL3Q
         CLK_SAI3_PLL3Q
         CLK_SAI4_PLL3Q
         CLK_RNG1_LSI
         CLK_RNG2_LSI
         CLK_LPTIM1_PCLK1
         CLK_LPTIM23_PCLK3
         CLK_LPTIM45_LSE
     >;
 
     /* VCO = 1066.0 MHz => P = 266 (AXI), Q = 533 (GPU), R = 533 (DDR) */
     pll2: st,pll@1 { 
   
         compatible = "st,stm32mp1-pll";
         reg = <1>;
         cfg = <2 65 1 0 0 PQR(1,1,1)>;
         frac = <0x1400>;
     };
 
     /* VCO = 417.8 MHz => P = 209, Q = 24, R = 11 */
     pll3: st,pll@2 { 
   
         compatible = "st,stm32mp1-pll";
         reg = <2>;
         cfg = <1 33 1 16 36 PQR(1,1,1)>;
         frac = <0x1a04>;
     };
 
     /* VCO = 594.0 MHz => P = 99, Q = 74, R = 74 */
     pll4: st,pll@3 { 
   
         compatible = "st,stm32mp1-pll";
         reg = <3>;
         cfg = <3 98 5 7 7 PQR(1,1,1)>;
     };
 };
 
 &rng1 { 
   
     status = "okay";
     secure-status = "okay";
 };
 
 &rtc { 
   
     status = "okay";
     secure-status = "okay";
 };
 
 &sdmmc1 { 
   
     pinctrl-names = "default";
     pinctrl-0 = <&sdmmc1_b4_pins_a>;
     disable-wp;
     st,neg-edge;
     bus-width = <4>;
     vmmc-supply = <&v3v3>;
     status = "okay";
 };
 
 &timers15 { 
   
     secure-status = "okay";
     st,hsi-cal-input = <7>;
     st,csi-cal-input = <8>;
 };
 
 &uart4 { 
   
     pinctrl-names = "default";
     pinctrl-0 = <&uart4_pins_a>;
     status = "okay";
 };
 
 &usbotg_hs { 
   
     phys = <&usbphyc_port1 0>;
     phy-names = "usb2-phy";
     usb-role-switch;
     status = "okay";
 };
 
 &usbphyc { 
   
     status = "okay";
 };
 
 &usbphyc_port0 { 
   
     phy-supply = <&vdd_usb>;
 };
 
 &usbphyc_port1 { 
   
     phy-supply = <&vdd_usb>;
 };
 
 &vddcore { 
   
     lp-stop { 
   
         regulator-on-in-suspend;
         regulator-suspend-microvolt = <1200000>;
     };
     standby-ddr-sr { 
   
         regulator-off-in-suspend;
     };
     standby-ddr-off { 
   
         regulator-off-in-suspend;
     };
 };
 
 &v3v3 { 
   
     lp-stop { 
   
         regulator-suspend-microvolt = <3300000>;
         regulator-on-in-suspend;
     };
     standby-ddr-sr { 
   
         regulator-off-in-suspend;
     };
     standby-ddr-off { 
   
         regulator-off-in-suspend;
     };
 };
 
 &vdd { 
   
     lp-stop { 
   
         regulator-suspend-microvolt = <3300000>;
         regulator-on-in-suspend;
     };
     standby-ddr-sr { 
   
         regulator-suspend-microvolt = <3300000>;
         regulator-on-in-suspend;
     };
     standby-ddr-off { 
   
         regulator-suspend-microvolt = <3300000>;
         regulator-on-in-suspend;
     };
 };
 
 &vdd_usb { 
   
     standby-ddr-sr { 
   
         regulator-off-in-suspend;
     };
     standby-ddr-off { 
   
         regulator-off-in-suspend;
     };
 };
 

stm32mp15-pinctrl-bearpi.dtsi

 #include <dt-bindings/pinctrl/stm32-pinfunc.h>

 &pinctrl { 
   
     fmc_pins_a: fmc-0 { 
   
         pins1 { 
   
             pinmux = <STM32_PINMUX('D', 4, AF12)>, /* FMC_NOE */
                  <STM32_PINMUX('D', 5, AF12)>, /* FMC_NWE */
                  <STM32_PINMUX('D', 11, AF12)>, /* FMC_A16_FMC_CLE */
                  <STM32_PINMUX('D', 12, AF12)>, /* FMC_A17_FMC_ALE */
                  <STM32_PINMUX('D', 14, AF12)>, /* FMC_D0 */
                  <STM32_PINMUX('D', 15, AF12)>, /* FMC_D1 */
                  <STM32_PINMUX('D', 0, AF12)>, /* FMC_D2 */
                  <STM32_PINMUX('D', 1, AF12)>, /* FMC_D3 */
                  <STM32_PINMUX('E', 7, AF12)>, /* FMC_D4 */
                  <STM32_PINMUX('E', 8, AF12)>, /* FMC_D5 */
                  <STM32_PINMUX('E', 9, AF12)>, /* FMC_D6 */
                  <STM32_PINMUX('E', 10, AF12)>, /* FMC_D7 */
                  <STM32_PINMUX('G', 9, AF12)>; /* FMC_NE2_FMC_NCE */
             bias-disable;
             drive-push-pull;
             slew-rate = <1>;
         };
         pins2 { 
   
             pinmux = <STM32_PINMUX('D', 6, AF12)>; /* FMC_NWAIT */
             bias-pull-up;
         };
     };
 
     qspi_clk_pins_a: qspi-clk-0 { 
   
         pins { 
   
             pinmux = <STM32_PINMUX('F', 10, AF9)>; /* QSPI_CLK */
             bias-disable;
             drive-push-pull;
             slew-rate = <3>;
         };
     };
 
     qspi_bk1_pins_a: qspi-bk1-0 { 
   
         pins1 { 
   
             pinmux = <STM32_PINMUX('F', 8, AF10)>, /* QSPI_BK1_IO0 */
                  <STM32_PINMUX('F', 9, AF10)>, /* QSPI_BK1_IO1 */
                  <STM32_PINMUX('F', 7, AF9)>, /* QSPI_BK1_IO2 */
                  <STM32_PINMUX('F', 6, AF9)>; /* QSPI_BK1_IO3 */
             bias-disable;
             drive-push-pull;
             slew-rate = <1>;
         };
         pins2 { 
   
             pinmux = <STM32_PINMUX('B', 6, AF10)>; /* QSPI_BK1_NCS */
             bias-pull-up;
             drive-push-pull;
             slew-rate = <1>;
         };
     };
 
     qspi_bk2_pins_a: qspi-bk2-0 { 
   
         pins1 { 
   
             pinmux = <STM32_PINMUX('H', 2, AF9)>, /* QSPI_BK2_IO0 */
                  <STM32_PINMUX('H', 3, AF9)>, /* QSPI_BK2_IO1 */
                  <STM32_PINMUX('G', 10, AF11)>, /* QSPI_BK2_IO2 */
                  <STM32_PINMUX('G', 7, AF11)>; /* QSPI_BK2_IO3 */
             bias-disable;
             drive-push-pull;
             slew-rate = <1>;
         };
         pins2 { 
   
             pinmux = <STM32_PINMUX('C', 0, AF10)>; /* QSPI_BK2_NCS */
             bias-pull-up;
             drive-push-pull;
             slew-rate = <1>;
         };
     };
 
     rtc_out2_rmp_pins_a: rtc-out2-rmp-pins-0 { 
   
         pins { 
   
             pinmux = <STM32_PINMUX('I', 8, ANALOG)>; /* RTC_OUT2_RMP */
         };
     };
 
     sdmmc1_b4_pins_a: sdmmc1-b4-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 */
                  <STM32_PINMUX('D', 2, AF12)>; /* SDMMC1_CMD */
             slew-rate = <1>;
             drive-push-pull;
             bias-disable;
         };
         pins2 { 
   
             pinmux = <STM32_PINMUX('C', 12, AF12)>; /* SDMMC1_CK */
             slew-rate = <2>;
             drive-push-pull;
             bias-disable;
         };
     };
 
     sdmmc1_dir_pins_a: sdmmc1-dir-0 { 
   
         pins1 { 
   
             pinmux = <STM32_PINMUX('F', 2, AF11)>, /* SDMMC1_D0DIR */
                  <STM32_PINMUX('C', 7, AF8)>, /* SDMMC1_D123DIR */
                  <STM32_PINMUX('B', 9, AF11)>; /* SDMMC1_CDIR */
             slew-rate = <1>;
             drive-push-pull;
             bias-pull-up;
         };
         pins2{ 
   
             pinmux = <STM32_PINMUX('E', 4, AF8)>; /* SDMMC1_CKIN */
             bias-pull-up;
         };
     };
 
     sdmmc2_b4_pins_a: sdmmc2-b4-0 { 
   
         pins1 { 
   
             pinmux = <STM32_PINMUX('B', 14, AF9)>, /* SDMMC2_D0 */
                  <STM32_PINMUX('B', 15, AF9)>, /* SDMMC2_D1 */
                  <STM32_PINMUX('B', 3, AF9)>, /* SDMMC2_D2 */
                  <STM32_PINMUX('B', 4, AF9)>, /* SDMMC2_D3 */
                  <STM32_PINMUX('G', 6, AF10)>; /* SDMMC2_CMD */
             slew-rate = <1>;
             drive-push-pull;
             bias-pull-up;
         };
         pins2 { 
   
             pinmux = <STM32_PINMUX('E', 3, AF9)>; /* SDMMC2_CK */
             slew-rate = <2>;
             drive-push-pull;
             bias-pull-up;
         };
     };
 
     sdmmc2_b4_pins_b: sdmmc2-b4-1 { 
   
         pins1 { 
   
             pinmux = <STM32_PINMUX('B', 14, AF9)>, /* SDMMC2_D0 */
                  <STM32_PINMUX('B', 15, AF9)>, /* SDMMC2_D1 */
                  <STM32_PINMUX('B', 3, AF9)>, /* SDMMC2_D2 */
                  <STM32_PINMUX('B', 4, AF9)>, /* SDMMC2_D3 */
                  <STM32_PINMUX('G', 6, AF10)>; /* SDMMC2_CMD */
             slew-rate = <1>;
             drive-push-pull;
             bias-disable;
         };
         pins2 { 
   
             pinmux = <STM32_PINMUX('E', 3, AF9)>; /* SDMMC2_CK */
             slew-rate = <2>;
             drive-push-pull;
             bias-disable;
         };
     };
 
     sdmmc2_d47_pins_a: sdmmc2-d47-0 { 
   
         pins { 
   
             pinmux = <STM32_PINMUX('A', 8, AF9)>, /* SDMMC2_D4 */
                  <STM32_PINMUX('A', 9, AF10)>, /* SDMMC2_D5 */
                  <STM32_PINMUX('E', 5, AF9)>, /* SDMMC2_D6 */
                  <STM32_PINMUX('D', 3, AF9)>; /* SDMMC2_D7 */
             slew-rate = <1>;
             drive-push-pull;
             bias-pull-up;
         };
     };
 
     uart4_pins_a: uart4-0 { 
   
         pins1 { 
   
             pinmux = <STM32_PINMUX('G', 11, AF6)>; /* UART4_TX */
             bias-disable;
             drive-push-pull;
             slew-rate = <0>;
         };
         pins2 { 
   
             pinmux = <STM32_PINMUX('B', 2, AF8)>; /* UART4_RX */
             bias-disable;
         };
     };
 
     uart4_pins_b: uart4-1 { 
   
         pins1 { 
   
             pinmux = <STM32_PINMUX('D', 1, AF8)>; /* UART4_TX */
             bias-disable;
             drive-push-pull;
             slew-rate = <0>;
         };
         pins2 { 
   
             pinmux = <STM32_PINMUX('B', 2, AF8)>; /* UART4_RX */
             bias-disable;
         };
     };
 
     uart7_pins_a: uart7-0 { 
   
         pins1 { 
   
             pinmux = <STM32_PINMUX('E', 8, AF7)>; /* UART7_TX */
             bias-disable;
             drive-push-pull;
             slew-rate = <0>;
         };
         pins2 { 
   
             pinmux = <STM32_PINMUX('E', 7, AF7)>, /* UART7_RX */
                  <STM32_PINMUX('E', 10, AF7)>, /* UART7_CTS */
                  <STM32_PINMUX('E', 9, AF7)>; /* UART7_RTS */
             bias-disable;
         };
     };
 
     uart7_pins_b: uart7-1 { 
   
         pins1 { 
   
             pinmux = <STM32_PINMUX('F', 7, AF7)>; /* UART7_TX */
             bias-disable;
             drive-push-pull;
             slew-rate = <0>;
         };
         pins2 { 
   
             pinmux = <STM32_PINMUX('F', 6, AF7)>; /* UART7_RX */
             bias-disable;
         };
     };
 
     uart7_pins_c: uart7-2 { 
   
         pins1 { 
   
             pinmux = <STM32_PINMUX('E', 8, AF7)>; /* UART7_TX */
             bias-disable;
             drive-push-pull;
             slew-rate = <0>;
         };
         pins2 { 
   
             pinmux = <STM32_PINMUX('E', 7, AF7)>; /* UART7_RX */
             bias-pull-up;
         };
     };
 
     uart8_pins_a: uart8-0 { 
   
         pins1 { 
   
             pinmux = <STM32_PINMUX('E', 1, AF8)>; /* UART8_TX */
             bias-disable;
             drive-push-pull;
             slew-rate = <0>;
         };
         pins2 { 
   
             pinmux = <STM32_PINMUX('E', 0, AF8)>; /* UART8_RX */
             bias-disable;
         };
     };
 
     usart2_pins_a: usart2-0 { 
   
         pins1 { 
   
             pinmux = <STM32_PINMUX('F', 5, AF7)>, /* USART2_TX */
                  <STM32_PINMUX('D', 4, AF7)>; /* USART2_RTS */
             bias-disable;
             drive-push-pull;
             slew-rate = <0>;
         };
         pins2 { 
   
             pinmux = <STM32_PINMUX('D', 6, AF7)>, /* USART2_RX */
                  <STM32_PINMUX('D', 3, AF7)>; /* USART2_CTS_NSS */
             bias-disable;
         };
     };
 
     usart2_pins_b: usart2-1 { 
   
         pins1 { 
   
             pinmux = <STM32_PINMUX('F', 5, AF7)>, /* USART2_TX */
                  <STM32_PINMUX('A', 1, AF7)>; /* USART2_RTS */
             bias-disable;
             drive-push-pull;
             slew-rate = <0>;
         };
         pins2 { 
   
             pinmux = <STM32_PINMUX('F', 4, AF7)>, /* USART2_RX */
                  <STM32_PINMUX('E', 15, AF7)>; /* USART2_CTS_NSS */
             bias-disable;
         };
     };
 
     usart2_pins_c: usart2-2 { 
   
         pins1 { 
   
             pinmux = <STM32_PINMUX('D', 5, AF7)>, /* USART2_TX */
                  <STM32_PINMUX('D', 4, AF7)>; /* USART2_RTS */
             bias-disable;
             drive-push-pull;
             slew-rate = <3>;
         };
         pins2 { 
   
             pinmux = <STM32_PINMUX('D', 6, AF7)>, /* USART2_RX */
                  <STM32_PINMUX('D', 3, AF7)>; /* USART2_CTS_NSS */
             bias-disable;
         };
     };
 
     usart3_pins_a: usart3-0 { 
   
         pins1 { 
   
             pinmux = <STM32_PINMUX('B', 10, AF7)>; /* USART3_TX */
             bias-disable;
             drive-push-pull;
             slew-rate = <0>;
         };
         pins2 { 
   
             pinmux = <STM32_PINMUX('B', 12, AF8)>; /* USART3_RX */
             bias-disable;
         };
     };
 
     usart3_pins_b: usart3-1 { 
   
         pins1 { 
   
             pinmux = <STM32_PINMUX('B', 10, AF7)>, /* USART3_TX */
                  <STM32_PINMUX('G', 8, AF8)>; /* USART3_RTS */
             bias-disable;
             drive-push-pull;
             slew-rate = <0>;
         };
         pins2 { 
   
             pinmux = <STM32_PINMUX('B', 12, AF8)>, /* USART3_RX */
                  <STM32_PINMUX('I', 10, AF8)>; /* USART3_CTS_NSS */
             bias-disable;
         };
     };
 
     usart3_pins_c: usart3-2 { 
   
         pins1 { 
   
             pinmux = <STM32_PINMUX('B', 10, AF7)>, /* USART3_TX */
                  <STM32_PINMUX('G', 8, AF8)>; /* USART3_RTS */
             bias-disable;
             drive-push-pull;
             slew-rate = <0>;
         };
         pins2 { 
   
             pinmux = <STM32_PINMUX('B', 12, AF8)>, /* USART3_RX */
                  <STM32_PINMUX('B', 13, AF7)>; /* USART3_CTS_NSS */
             bias-pull-up;
         };
     };
 
     usbotg_hs_pins_a: usbotg-hs-0 { 
   
         pins { 
   
             pinmux = <STM32_PINMUX('A', 10, ANALOG)>; /* OTG_ID */
         };
     };
 
     usbotg_fs_dp_dm_pins_a: usbotg-fs-dp-dm-0 { 
   
         pins { 
   
             pinmux = <STM32_PINMUX('A', 11, ANALOG)>, /* OTG_FS_DM */
                  <STM32_PINMUX('A', 12, ANALOG)>; /* OTG_FS_DP */
         };
     };
 };
 
 &pinctrl_z { 
   
     i2c4_pins_a: i2c4-0 { 
   
         pins { 
   
             pinmux = <STM32_PINMUX('Z', 4, AF6)>, /* I2C4_SCL */
                  <STM32_PINMUX('Z', 5, AF6)>; /* I2C4_SDA */
             bias-disable;
             drive-open-drain;
             slew-rate = <0>;
         };
     };
 };
 

保存文件 我们此时创建的设备树文件叫做stm32mp157a-bearpi.dts 那么这个开发板就叫做 stm32mp157a-bearpi

修改Makefile.sdk

刚才已经创建了一个交叫做stm32mp157a-bearpi的开发板 我们需要修改该makefile.sdk 让其指定编译此开发版

打开根目录的Makefile.sdk 注意是 Makefile.sdk 不是Makefile文件

在这里插入图片描述

可以看到第24 行 指定的开发板名称 为

TFA_DEVICETREE ?=  stm32mp157c-100ask-512d-v1 

将其修改成 (不需要加.dts)

tf-a-stm32mp157a-bearpi-trusted.stm32TFA_DEVICETREE ?=  stm32mp157a-bearpi

保存文件

编译TF-A

进入Tfa源代码路径

cd /home/book/100ask_stm32mp157_pro-sdk/Tf-A2.2/

输入下述命令 进行编译

make -f Makefile.sdk all

在这里插入图片描述

编译后 正确的结果如下所示

在这里插入图片描述

此时进入…/build/trusted/目录下 可以看到编译后的文件

在这里插入图片描述

我们需要用到的文件名为 tf-a-stm32mp157a-bearpi-trusted.stm32

这里cd 到build/trusted/ 是为了查看此目录文件夹 正常编译可以不用

烧录TF-A 到 SD卡

将我们上一篇文章所配置好的SD卡插入电脑 并连接至ubuntu

在这里插入图片描述

使用此命令将编译好的TF-A烧录到SD卡的sdb1分区 与sdb2分区中

sudo dd if=../build/trusted/tf-a-stm32mp157a-bearpi-trusted.stm32 of=/dev/sdb1 conv=fdatasync
sudo dd if=../build/trusted/tf-a-stm32mp157a-bearpi-trusted.stm32 of=/dev/sdb2 conv=fdatasync

在这里插入图片描述

如果烧写速度过快 可能是假烧了 可以看上一篇文章的SD卡配置

测试开发板

将SD卡插入小熊派的SD卡槽

在这里插入图片描述

将STM32MP157的启动模式 拨动成SD/TF卡启动模式 也就是101

在这里插入图片描述
此时使用TYPE-C口数据线链接 到电脑USB端口 打开串口软件WindTerm 新建会话

在这里插入图片描述

选择serial 模式 在串口菜单栏 的协议下 修改波特率为115200

在这里插入图片描述

在会话菜单栏 中的串口 选择开发板所连接的串口 我这里是COM13 在连接

在这里插入图片描述

之后点击开发板的复位按钮 可以看到串口打印了TF-A的调试信息 如果未启动 可能原因为 设备树配置有问题 ,sd卡没烧录上

总结

到此位置SD卡烧录TF_a固件已经完成 后续是编译Uboot 放到第三分区 启动后可以进入Uboot命令行

本片记录用到很多linux的基础操作 包括cd ls dd 等命令 也包含了一些makefile的概念 其中makefile是相对较复杂的 因为这其中需要好多对交叉编译的知识 需要提前了解.此外 涉及到了linux的设备树文件 这是在linux内核开发必不可少的部分.望夯实基础,每天进步.

后续笔记正在赶来的路上…

如果觉得我的操作或者步骤有问题 欢迎批评指正共同进步 .

同样如果觉得写的不错 欢迎进行打赏.一分也是爱.

请添加图片描述

今天的文章小熊派开发板是否值得购买_树莓派是linux吗分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/85662.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注