基于北斗和4G Cat1模组的智慧物流开发(五)对dts,dtc和dtb学习的总结
重新提供了源码包和dtb设备树包,从dtb设备树包中提取stm32mp157c-ya157c-lcd-v2.dtb上传到开发版的/boot目录,还修改了修改启动文件:/boot/mmc0_stm32mp157c-ya157c-v2_extlinux/extlinux.conf里面的DEFAULT stm32mp157c-ya157c-hdmi-v2-sdcard改为DEFAULT stm32mp157c-ya157c-lcd-sdcard。保存后,运行sync,重启后报错,出现默认启动lcd模式下的无限启动,错误如图所示:
得到群里的谢小康的帮助,终于找到原因,在此感谢他的帮助。原因是还有修改lcd启动存储设置root=/dev/mmcblok1p6改成mmcblok0p6。修改后,运行sync,重启后成功登陆myir系统。不过有点可惜的是屏幕有条直线,应该是视频线的问题。
根据之前的学习,使用2种编译方法把dts编译成dtb。
1.把下载好的iotclub-ya157c-kernel.tar.bz2源码包上传到u /home/wuyicom/softwares目录里面。
tar -xvf /home/wuyicom/softwares/iotclub-ya157c-kernel.tar.bz2 -C /home/wuyicom/workspace
查看stm32mp157c-ya157c-lcd-v2.dts的依赖文件stm32mp157c-ya157c-v2.dts,找到i2c2里面的屏幕驱动设置,如图所示:
进入目录:cd /home/wuyicom/workspace/iotclub-ya157c-kernel/,找到my_dts_make.sh,执行./ my_dts_make.sh,出现下图的2个报错:
出现的第一个问题是忘记安装sudo apt-get install –y ncurses-dev bc linux-headers-generic gcc-multilib libncurses5-dev libncursesw5-dev lrzsz dos2unix lib32ncurses5 repo libssl-dev。报这个错误是没安装libssl-dev。第二个问题应该是先建立目录$PWD/../build/install_artifact/boot/,在运行make ARCH=arm INSTALL_MOD_PATH="$PWD/../build/install_artifact" modules_install O="$PWD/../build"。因为只是编译获取stm32mp157c-ya157c-lcd-v2.dtb,下面的三条命令可以不需要。
2.使用dtc工具编译,把相关依赖包存stm32mp157*和dts2dtb.sh放在include目录里,dts2dtb.sh的代码在上一篇博客有介绍。
加执行权限:chmod +x dts2dtb.sh
运行命令:./ dts2dtb.sh
3.上传980多M的MYiR-STM32-kernel.tar.bz2到/home/wuyicom/softwares目录。
tar -xvf /home/wuyicom/softwares/MYiR-STM32-kernel.tar.bz2 -C /home/wuyicom/workspace
进入目录:cd /home/wuyicom/workspace/MYiR-stm32-kernel/myir-ya157c-kernel
cp /home/wuyicom/workspace//iotclub-ya157c-kernel/my_dts_make.sh .
修改stm32mp157c-ya157c-lcd-v2.dts代码:(1)把#include "stm32mp157c-ya157c-hdmi-v2.dts"该为#include "stm32mp157c-ya157c- v2.dts"。(2)注销关于HDMI信息。(3)添加声音
sound {
status = "okay";
};
phy_pwrseq: phy-pwrseq {
compatible = "myir,ar8035";
phy-gpios = <&gpiog 0 GPIO_ACTIVE_LOW>;
};
在源码stm32mp157c-ya157c-v2.dts做修改把touchscreen@38改为goodix_ts@14
修改my_dts_make.sh代码,修改如下:
能转换成功dtb,但转换的dtb还是无法点亮屏幕,说明使用980多M的MYiR-STM32-kernel.tar.bz2因版本不同,而想简单修改了代码的方式行不同。
通过对三次对dts转dtb的操作,总结一下经验,(1)当dts需要很多依赖时,建议使用官方提供方式来转换dtb,好处是避免因缺失依赖包而导致编译转换不成功。但缺点是会把所有的dts都转换为dtb一次,很麻烦。(2)可以把dts的依赖包放在一个目录里,在通过dtc工具使用dts2dtb.sh脚本转换成dtb,好处是只需要转换自己想要的dtb。缺点就是你必须要了解dts相关依赖关系。(3)如果是kernel不符合,除非有能力,否则不要做,吃力不讨好,浪费时间。
总的来说,通过这段时间的学习和操作,对dts,dtc,dtb有了更深入的了解。
- 点赞
- 收藏
- 关注作者
评论(0)