Linux|Linux系统移植篇2:STM32MP1微处理器之系统镜像烧写( 六 )


在ubuntu端将需要更新的linux内核镜像和设备树文件通过scp命令的方式下发到开发板 。 此方式不仅支持对内核与设备树的修改 , 同时也支持更新驱动文件上层应用程序等文件 。

  • Linux内核更新
linux@ubuntu:$ scp uImage root@192.168.11.68:/boot
linux@ubuntu:$ ssh root@192.168.11.68 /sbin/depmod -a
linux@ubuntu:$ ssh root@192.168.11.68 sync
linux@ubuntu:$ ssh root@192.168.11.68 reboot
首次使用时需要记录链接密钥 。

在如上界面中输入yes

  • 设备树更新
linux@ubuntu:$ scp stm32mp157a-fsmp1a*.dtb root@192.168.11.68:/boot
linux@ubuntu:$ ssh root@192.168.11.68 /sbin/depmod -a
linux@ubuntu:$ ssh root@192.168.11.68 sync
linux@ubuntu:$ ssh root@192.168.11.68 reboot

  • 驱动更新
本例中我们假设需要将开发板中的触摸屏驱动进行更新 , 触摸屏驱动对应的驱动文件名为goodix.ko 。 通常驱动文件存放在开发板的/lib/modules/文件夹下 , 将工作目录切换到/lib/ modules/使用find -name goodix.ko来搜索文件所在位置 。 通过搜索结果可知文件存放在./4.19.94/kernel/drivers/input/touchscreen/目录下 。

在ubuntu中使用scp命令将驱动程序下发到该目录下 。
linux@ubuntu:$scp goodix.ko root@192.168.11.68:/lib/modules/4.19.94/kernel/drivers/input/touchscreen/
linux@ubuntu:$ ssh root@192.168.11.68 /sbin/depmod -a
linux@ubuntu:$ ssh root@192.168.11.68 sync
linux@ubuntu:$ ssh root@192.168.11.68 reboot
如果使用scp时有以下提示 , 则说明之前有其他开发板使用过当前的ip地址 。 导致两次密钥不同 , 这种情况下使用圈红命令就可以移除之前的密钥 。

通过linux更新eMMC中的u-boot此方式是通过在linux终端下更新u-boot镜像 , 使用此方法需确保linux可以正常启动 。
本例以basic启动方式进行演示 。 首先需要编译u-boot源码得到u-boot-spl.stm32和u-boot.img镜像文件 。
将镜像下发到开发板 , 这里使用scp网络下载的方式(假设开发板ip为192.168.11.81) 。
linux@ubuntu:$ scp u-boot-spl.stm32 root@192.168.11.81:/home/root
linux@ubuntu:$ scp u-boot.img root@192.168.11.81:/home/root
这样就将主机的u-boot-spl.stm32和u-boot.img两个文件 , 下发到开发板的/home/root目录下 。

更新eMMC的u-boot
root@fsmp1a:# echo 0 > /sys/class/block/mmcblk2boot0/force_ro
root@fsmp1a:# echo 0 > /sys/class/block/mmcblk2boot1/force_ro
root@fsmp1a:# dd if=u-boot-spl.stm32 of=/dev/mmcblk2boot0 conv=fdatasync
root@fsmp1a:# dd if=u-boot-spl.stm32 of=/dev/mmcblk2boot1 conv=fdatasync
root@fsmp1a:# echo 1 > /sys/class/block/mmcblk2boot0/force_ro
root@fsmp1a:# echo 1 > /sys/class/block/mmcblk2boot1/force_ro
root@fsmp1a:# dd if=u-boot.img of=/dev/mmcblk2p1 conv=fdatasync

在开发板上运行 , 执行错误或文件写入错误 , 会导致开发板无法启动 。 如出现无法启动的情况 , 请重新烧写开发板即可 。
使用STM32CubeProgrammer读取OTP配置注意:如果非必要操作务必不要修改OPT配置 。 如果修改错误会导致CPU无法启动 。
将开发板拨码开关设置成【000】USB模式 , 将USB线连接到PC中 。

运行STM32CubeProgrammer软件 。

连接USB并导入烧写镜像 。

这里只需要勾选前两个分区进行下载

下载成功后断开USB连接

之后使用win+r键打开运行窗口 。 运行cmd窗口 。

在cmd窗口中将当前工作目录切换到STM32CubeProgrammer软件的安装目录下的bin目录 。

使用STM32_Programmer_CLI -c port=usb1命令查看USB连接情况

使用STM32_Programmer_CLI -c port=usb1 -otp displ命令可以读取OPT配置