stm32mp157系统移植|移植st官方5.10内核到小熊派开发板(代码片段)

Mculover666 Mculover666     2022-10-22     798

关键词:

Linux内核移植流程

移植Linux内核到一个新的板子上时,需要以下步骤:

(1)选择一个硬件设计接近的板子,基于此板相关文件开始移植
(2)拷贝单板配置文件(arch/arm/configs)
(3)拷贝设备树文件(arch/arm/boot/dts)
(4)修改设备树,适配开发板

本文中基于STM32MP157A-DK1官方开发板,移植到小熊派HM-Micro开发板。

环境说明:

  • 内核源码:ST官方提供的Linux 5.10内核,已经打完st补丁
  • 编译环境:ST官方提供的SDK,arm-ostl-linux-gnueabi-gcc 9.3.0
  • 操作系统:ubuntu 20.04

一、新建单板配置文件

cp arch/arm/configs/multi_v7_patched_defconfig arch/arm/configs/bearpi_defconfig

使用新的单板编译测试:

make distclean
make bearpi_defconfig
make uImage dtbs LOADADDR=0xC2000040 -j16

二、新建设备树

cp arch/arm/boot/dts/stm32mp157a-dk1.dts arch/arm/boot/dts/stm32mp157a-bearpi.dts
cp arch/arm/boot/dts/stm32mp15xx-dkx.dtsi arch/arm/boot/dts/stm32mp15xx-bearpix.dtsi

简单修改一下stm32mp157a-bearpi.dts:

/dts-v1/;

#include "stm32mp157.dtsi"
#include "stm32mp15xa.dtsi"
#include "stm32mp15-pinctrl.dtsi"
#include "stm32mp15xxac-pinctrl.dtsi"
#include "stm32mp15xx-bearpix.dtsi"

/ 
	model = "STMicroelectronics STM32MP157A Bearpi Board";
	compatible = "st,stm32mp157a-bearpi", "st,stm32mp157";

	chosen 
		stdout-path = "serial0:115200n8";
	;
;

修改makefile,加入编译:

编译设备树:

make dtbs

三、启动测试

1. 替换emmc里的内核

使用sd卡拷贝uImage和stm32mp157a-bearpi.dtb文件到开发板,放到emmc的bootfs分区里,写了个脚本:

#!/bin/sh
mkdir tmp
mkdir bootfs
mount /dev/mmcblk1p1 tmp
mount /dev/mmcblk2p2 bootfs
cp -v tmp/uImage bootfs/
cp -v tmp/stm32mp157a-bearpi.dtb bootfs/
umount tmp
umount bootfs
rm -rf tmp
rm -rf bootfs
echo "done!"

2. 使用新的内核和设备树启动

进入uboot,添加下面两个新的环境变量:

setenv boot_emmc 'ext4load mmc 1:2 c2000000 uImage;ext4load mmc 1:2 c4000000 stm32mp157a-bearpi.dtb;bootm c2000000 - c4000000'
setenv bootargs 'console=ttySTM0,115200 root=/dev/mmcblk1p4 rootwait rw'
saveenv

启动:

run boot_emmc

可以看到,Linux内核版本信息和设备树Model信息都是对应的:

但是这里启动挂载根文件系统失败了,卡在这里:

接下来定位解决此问题。

四、初步修改设备树

1. 修改电源描述

ST官方开发板使用了一个i2c的电源管理芯片,小熊派开发板没有,所以要去除该部分描述。

2. 去除网口描述

小熊派开发板没有板载网口,去除该部分描述。

3. 添加sdmmc2接口描述

查看开发板原理图,emmc是接到sdmmc2的:

但是在复制过来的设备树描述中,并没有sdmmc接口的描述,添加:

&sdmmc2 
	pinctrl-names = "default", "opendrain", "sleep";
	pinctrl-0 = <&sdmmc2_b4_pins_a>;
	pinctrl-1 = <&sdmmc2_b4_od_pins_a>;
	pinctrl-2 = <&sdmmc2_b4_sleep_pins_a>;
	broken-cd;
	st,neg-edge;
	bus-width = <4>;
	vmmc-supply = <&v3v3>;
	status = "okay";
;

实际emmc接了8条数据线,这里设备树描述可以只用4条,只是对性能有影响,不影响读取,后续可以优化。

重新编译设备树:

make dtbs

启动,成功挂载根文件系统,拉起systemd,进入到系统:

五、内核修改

1. 内核版本号修改

2. 关闭模块校验

加载模块的时候发现会提示这一堆问题:

在配置文件中关闭该选项:

移植好的内核仓库

移植openstlinux到stm32mp157上

...tLinux是st官方提供的基于Yocto和Debian构建的发行版Linux操作系统,专门为Stm32Mp1系列研发的操作系统,这里解释一下为什么OpenstLinux使用了两种构建方式,OpenstLinux使用了Yocto的Bitbake工具来进行编译方面的构建,在运... 查看详情

stm32mp157资源扩展板驱动移植篇3:扩展板数码管控制

写在前面:本文章为《STM32MP157资源扩展板驱动移植篇》系列中的一篇,笔者使用的开发平台为华清远见FS-MP1A开发板(STM32MP157开发板)。资源扩展板是FS-MP1A开发板的扩展模块,主要包含了10余种主流传感器、... 查看详情

烧录openstlinux到stm32mp157上

...a;https://www.st.com/zh/development-tools/stm32cubeprog.html注意下载的系统版本,下载完成之后默认安装就可以了本文使用的Linux版本的STM32CubeProgrammer在你生成镜像的文件夹tmp-glibc/deploy/images/stm32mp1中会生成一个flashlayout_你生成的镜像名&#... 查看详情

正点原子stm32mp157烧写官方出厂镜像(代码片段)

...正点原子】STM32MP157开发板(A盘)-基础资料\\08、系统镜像\\02、出厂系统镜像\\01、STM32CubeProg烧录固件包中就是官方出厂镜像。如下图所示使用ST烧写器打开flashlayout目录下的tsv文件同时,点击下方的蓝色Browse按钮,... 查看详情

stm32mp157a驱动开发|01-板载led作为系统心跳指示灯(代码片段)

一、板载LED此用户LED连接到PA13。二、pinctrl描述绑定文档:Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.yaml。必要的属性:-compatible-'#address-cells'-'#size-cells'-ranges-pins-are-numbered可用值如下:compatible:enum:-st,stm... 查看详情

stm32mp157a驱动开发|01-板载led作为系统心跳指示灯(代码片段)

一、板载LED此用户LED连接到PA13。二、pinctrl描述绑定文档:Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.yaml。必要的属性:-compatible-'#address-cells'-'#size-cells'-ranges-pins-are-numbered可用值如下:compatible:enum:-st,stm... 查看详情

在iar(ewarm)中移植stm32固件库

一、移植环境说明(1)、win10系统(2)、IAR(EWARM)7.7(3)、STM32标准固件库3.5.0http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-libraries 查看详情

stm32f103x/freertos系统学习笔记之环境搭建-cxm(代码片段)

...言越学到后面越感觉会的越少,为什么要引入嵌入式操作系统呢,因为现在一直局限于while大循环里,能做的功能十分有限,至于为什么要选择FreeRTOS系统是因为这个系统目前比较成熟且使用的人很多,资源也比较多这一篇主要会记录我... 查看详情

stm32f103usb虚拟串口驱动例程移植

...网上搜索stsw-stm32121即是了)。3)ST官网:www.st.com4)检查系统是否带了usb 查看详情

stm32mp157开发板linux+qt项目实战:音乐播放器

...,集成2个Cortex-A7核和1个Cortex-M4核,A7核上可以跑Linux操作系统,M4核上可以跑FreeRTOS、RT-Thread等实时操作系统。开发板搭配仿真器、显示屏、摄像头、资源扩展板等丰富的扩展模块,可 查看详情

在openstlinux根文件系统里增加自己的应用程序

前言首先打开Flash_layout布局文件,可以看到如下内容:#OptIdNameTypeIPOffsetBinary-0x01fsbl1-bootBinarynone0x0arm-trusted-firmware/tf-a-stm32mp157f-ev1-serialboot.stm32-0x03ssbl-bootBinarynone0x0bootloader/u-boot-stm32mp157f-ev1-trusted.stm32P0x04fsbl1Binarymmc1boot1arm-t... 查看详情

stm32mp157使用记录:openstlinux试用与开发体验(代码片段)

文章目录前言基础准备系统环境硬件连接系统镜像烧录测试STM32CubeProgrammer安装系统镜像烧录应用与内核开发SDK安装应用开发内核编译内核修改测试前言STM32MP1是意法半导体推出的第一款MPU,它家的STM32系列MCU搞的不错,资... 查看详情

基于stm32f4移植w5500官方驱动库iolibrary_driver(转)

源:基于STM32F4移植W5500官方驱动库ioLibrary_Driver参考:基于STM32+W5500的Ethernet和Internet移植 UpgradeW5500ThroughputonNucleoSTM32F401REUsingSPI DMA  查看详情

七步实现stm32mp157多核协同工作(cortex-a7与cortex-m4通信)

...主频微800MHz的Cortex-A7应用处理器内核(支持开源linux操作系统),和一 查看详情

stm32f103r8t6系统移植到stm32f103rct6

...作需要原来的STM32F103R8T6需要升级到RCT6由此也需要把软件系统移植到RCT6但是移植过来的时候由于r8的定时只有T1--T4,RC有6个定时器所以遇到自己认为很奇怪的问题。问题1代码移植过来后发现有些定时器根本不工作,时钟... 查看详情

usb库stm32f0x2移植到stm32f070笔记

...,就需要稍作修改,本文就一直到STM32F070作一个笔记。2.移植从STM中文官网上下载STM32F0x2USB库,地址:http://www.stmcu.org/document/detail/index/ 查看详情

openharmony移植3.1版本系统到stm32(代码片段)

文章目录【OpenHarmony】STM32F407移植3.1版本系统一、前言二、开发环境三、获取源码、添加第三方依赖四、导入STM32Makefile工程五、配置编译文件六、添加工程配置文件七、修改链接脚本八、修改中断服务函数九、修改串口映射十、... 查看详情

移植freertos到stm32

...本文详细介绍如何移植FreeRTOS到STM32单片机上。移植操作系统是嵌入式开发的入门基础,单片机和嵌入式在物理上其实是一摸一样的,区别就是软件上嵌入式跑了操作系统而单片机没有。文本选用市场上最常见的STM32和 查看详情