IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> stm32mp157系统移植 | 移植ST官方5.10内核到小熊派开发板 -> 正文阅读

[嵌入式]stm32mp157系统移植 | 移植ST官方5.10内核到小熊派开发板

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. 关闭模块校验

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

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

移植好的内核仓库

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 11:00:44  更:2022-08-06 11:01:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:16:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码