STM32MP157 的最大特点是它的异构多处理器结构,它集成了两个Cortex-A7和一个Cortex_M4 处理器,其中cortex-M4 可以用来作为实时控制,或者通信处理器来使用。不过,当我使用米尔的STM32MP157 的开发板才发现,事情并不简单,开发板几乎使用和核心板的所有引脚,留给用户扩展的20pin 插座上引脚不多,肯定是不够用的。看了他们的底板电路图后,发现LCD 占了34个引脚。MIPI也占了14个引脚。这是一笔很大的资源。而且如果控制模块往往不需要LCD/HDMI 显示,而HMI 又不需要许多的控制引脚。去掉了LCD/HDMI/MIPI 以后,底板的PCB 设计就变的非常简单了。这对于熟悉STM32F 的工程师来讲是一件开心的事情。
想法有了,从何开始呢?国内开发板供应商几乎是将ST 的开发板原封不动地搬过来的。文档有的也是ST 的。在线咨询,公众号提问几乎是石沉大海。没有任何消息。
好在米尔科技的技术资料还比较齐全。自己看吧!
修改设备树文件(dts)
在米尔科技的光盘资料中(网上下载的下载地址。百度网盘“说你来晚了”)有一篇《MYD-YA157C+wiki+20200303.pdf》文档中75页提到了修改Linux 内核设备树的方法。我决定按照他的方法:
修改设备树文件
为了保险期间,我首先将目标板上boot 目录中的内容使用scp 备份到PC机上,以防万一冲掉好的文件。
然后在内核源代码的 arch/arm/boot/dts目录下,修改了下面几个设备树文件
stm32mp157c-ya157c-v2.dts
stm32mp157c-ya157c-lcd.dts
stm32mp157c-ya157c-lcd-v2.dts
stm32mp157c-ya157c-hdmi.dts
stm32mp157c-ya157c-hdmi-v2.dts
具体的做法是将有关lcd/hdmi的内容ltdc都注释掉.连带I2c2,sound 也干掉。比如在stm32mp157c-ya157-lcd.dts 中
/*HDMI*/
/*&i2c2 {
hdmi-transmitter@39 {
compatible = "sil,sii9022";
reg = <0x39>;
status = "disable";
};
};*/
&i2s2 {
status = "disable";
};
/*test LCD*/
/*<dc {
status = "okay";
port {
#address-cells = <1>;
#size-cells = <0>;
ltdc_ep0_out: endpoint@0 {
reg = <0>;
remote-endpoint = <&panel_in>;
};
};
};*/
编译dts 成为dtb
修改后的dts 要编译成为二进制的dtb文件 具体的方法可参照我的上一篇博文。
unset LD_LIBRARY_PATH
source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
export KBUILD_OUTPUT=~/workspace/myir/MYiR-stm32-kernel/build
cd ~/workspace/myir/MYiR-stm32-kernel/myir-ya157c-kernel/
make ARCH=arm myc-ya157c_defconfig
cd ../build
make ARCH=arm dtbs -j11
然后将build/arch/arm/boot/dts/中的文件拷贝到目标机的boot目录中,从新启动。
scp arch/arm/boot/dts/stm32mp157c-ya157c*.dtb root@192.168.31.194:/boot/
ssh进入开发板,reboot结果连上HDMI 显示屏,依然出现了ST的桌面。没有改过来!
重新编译kernel
在目标板的boot 目录中发现有uImage,于是,想到是否要将修改后的内核编译一下,并且做替换呢?编译好后,下载
scp arch/arm/boot/uImage root@192.168.31.194:/boot/
再次reboot ,OK了。又是周末,开心。