如何利用小游戏解决方案提升企业在金融和物联网领域的运营效率
839
2022-10-06
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
使用新的单板编译测试:
make distcleanmake bearpi_defconfigmake uImage dtbs LOADADDR=0xC2000040 -j16
二、新建设备树
cp arch/arm/boot/dts/stm32mp157a-dk1.dts arch/arm/boot/dts/stm32mp157a-bearpi.dtscp
简单修改一下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
三、启动测试
1. 替换emmc里的内核
使用sd卡拷贝uImage和stm32mp157a-bearpi.dtb文件到开发板,放到emmc的bootfs分区里,写了个脚本:
#!/bin/shmkdir tmpmkdir bootfsmount /dev/mmcblk1p1 tmpmount /dev/mmcblk2p2 bootfscp -v tmp/uImage bootfs/cp -v tmp/stm32mp157a-bearpi.dtb bootfs/umount tmpumount bootfsrm -rf tmprm -rf bootfsecho "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'
启动:
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
启动,成功挂载根文件系统,拉起systemd,进入到系统:
五、内核修改
1. 内核版本号修改
Linux内核版本号关闭自动添加后缀
2. 关闭模块校验
加载模块的时候发现会提示这一堆问题:
在配置文件中关闭该选项:
移植好的内核仓库
https://git.code.tencent.com/mculover666/linux-stm32mp157
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~