当前位置:网站首页>stm32mp157系统移植 | 移植ST官方5.10内核到小熊派开发板
stm32mp157系统移植 | 移植ST官方5.10内核到小熊派开发板
2022-08-04 21:01:00 【Mculover666】
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. 关闭模块校验
加载模块的时候发现会提示这一堆问题:
在配置文件中关闭该选项:
移植好的内核仓库
边栏推荐
- How to train a deep learning model?
- How to understand the crawler's Scrapy framework in the simplest and most popular way?
- idea2021版本添加上一步和下一步操作到工具栏
- Spss-一元回归实操
- 香港暂停进口俄罗斯部分地区禽肉及禽类产品
- Debug locally and start the local server in vs code
- 密码学系列之:PEM和PKCS7,PKCS8,PKCS12
- composition-api
- Zynq Fpga图像处理之AXI接口应用——axi_lite接口使用
- 大资本已开始逃离加密领域?
猜你喜欢
随机推荐
三种方式设置特定设备UWP XAML view
[21 days learning challenge - kernel notes] (2), based in the device tree
【2022牛客多校5 A题 Don‘t Starve】DP
Configure laravel queue method using fort app manager
Win10 uwp use ScaleTransform magnify an element
【2022杭电多校5 1012题 Buy Figurines】STL的运用
【PCBA方案设计】握力计方案
win10 uwp 使用 ScaleTransform 放大某个元素
matlab 画图
How to make good use of builder mode
漫画 | 老板裁掉我两周后,又把我请回去,工资翻番!
【编程思想】
后缀式的计算
1、File对象学习
LayaBox---TypeScript---首次接触遇到的问题
SAP ABAP OData 服务如何支持 $select 有选择性地仅读取部分模型字段值试读版
【一起学Rust | 进阶篇 | Service Manager库】Rust专用跨平台服务管理库
3、IO流之字节流和字符流
密码学系列之:PEM和PKCS7,PKCS8,PKCS12
如何进行AI业务诊断,快速识别降本提效增长点?






![[Data Mining] Written Exam Questions for Sohu Data Mining Engineers](/img/d9/450eeecd5c7835d40ac38da41fc08e.png)


