上一篇已经对TF-A,U-BOOT和Kernel已经重新编译后,还是不能点亮屏幕。群里的谢小康给了我点提示,在此感谢他的帮助。找相关资料才知道,dtc不但可以单独把当个dts编译成dtb,还能把dtb还原成dts,不过转换后的dts和之前的dts的格式和代码不一样。之前的dts有依赖其他,所以代码量比较少,而转换后的dts能获取依赖的dts的代码所以代码量比较多。
重新刷系统后,把开发版的stm32mp157c-ya157c-lcd-v2.dtb上传到ubuntu系统/home/wuyicom/test目录里,再进入到目录里执行下面的命令:
/home/wuyicom/workspace/MYiR-stm32-kernel/build/scripts/dtc/dtc -I dtb -O dts -o stm32mp157c-ya157c-lcd-v2.dts stm32mp157c-ya157c-lcd-v2.dtb
如图所示,执行成功,使用Visual Studio Code打开stm32mp157c-ya157c-lcd-v2.dts。可以容易看出源码的stm32mp157c-ya157c-lcd-v2.dts的代码量(带符号也就76行),转化过来的代码4766行代码。如图所示:
stm32mp157c-ya157c-lcd-v2.dts源码的依赖stm32mp157c-ya157c-hdmi-v2.dts,特别注意:把(#include "stm32mp157c-ya157c-hdmi-v2.dts")修改为(#include "stm32mp157c-ya157c-v2.dts"),可以查看屏幕的配置参数。和转化的stm32mp157c-ya157c-lcd-v2.dts对比。如图所示:
说明屏幕参数都是设置touchscreen@38,是跟视频看到的屏幕参数不一样。
方法一:尝试在源码stm32mp157c-ya157c-v2.dts做修改把touchscreen@38改为goodix_ts@14,在使用make ARCH=arm dtbs -j11 LOADADDR=0xC2000040 O="$PWD/../build"命令重新编译打包。把打包好的dtb包上传的myir开发版的/boot目录里,再重启开发板还是无法点亮屏幕。
方法二:在智慧物流课程资源清单目录有dts文件,把所有的dts上传到/home/wuyicom/workspace/MYiR-stm32-kernel/myir-ya157c-kernel/arch/arm/boot/dts
F:\2021年 北斗\智慧物流课程资源清单\2.1\dts打包dts.zip
上传到/home/wuyicom/test/dts.zip
cd /home/wuyicom/test/
unzip dts.zip
cp -r dts/* /home/wuyicom/workspace/MYiR-stm32-kernel/myir-ya157c-kernel/arch/arm/boot/dts
重新编译内核的dtbs,要把之前的编译过的build目录删除,重新建立编译。
cd /home/wuyicom/workspace/MYiR-stm32-kernel/
rm -rf build
cd /home/wuyicom/workspace/MYiR-stm32-kernel/myir-ya157c-kernel
mkdir -p ../build
1 配置内核
make ARCH=arm O="$PWD/../build" myc-ya157c_defconfig
cd ../build
source /opt/st/myir/2.6-snapshot/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
2 编译内核
make ARCH=arm dtbs -j11 O="$PWD/../build"
cd arch/arm/boot/dts/
sudo scp stm32mp157c-ya157c-hdmi-v2.dtb stm32mp157c-ya157c-lcd-v2.dtb stm32mp157c-ya157c-v2.dtb 192.168.1.8:/boot/
重启开发版出现下面错误,之后进入无限重启。
尝试第三种方法:重新刷开发板系统,TF-A和U-boot之前已经编译过。可以直接使用,只需要重新完整编译Kernel,关于步骤请查看上一篇博客。
还是不行,是不是下载kernel源码的版本不对造成。查看了之前下载的3个kernel源码,一个是980多M,其他2个100多M跟视频的300多M的源码是不是版本不一样?还有关于视频的my_dts_make.sh的脚本时如何写的。使用dtc做编译一个dts,不能有依赖关系,否则会报错。在网上找关于可以编写依赖的脚本dts2dtb.sh。
#/bin/bash
#set -vx
device="stm32mp157c-ya157c-lcd-v2"
src_dts=$device.dts
tmp_dts=$device.tmp.dts
dst_dtb=$device.dtb
cpp -nostdinc -I. -undef -x assembler-with-cpp $src_dts > $tmp_dts
/home/wuyicom/workspace/MYiR-stm32-kernel/build/scripts/dtc/dtc -O dtb -b 0 -o $dst_dtb $tmp_dts
rm $tmp_dts
关于需要的依赖包的引用/home/wuyicom/workspace/MYiR-stm32-kernel/myir-ya157c-kernel/include/dt-bindings/interrupt-controller
还有stm32mp157cac-ya157c-pinctrl.dtsi是文件在智慧物流课程资源清单目录没有,是从980多M的kernel里拷贝过来。但是编译成功后,复制到开发板,重新启动报上图的问题。