从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植

  1. 和uboot设备树修改的内容同步到kernel
  2. 将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下

源码修改及编译

  1. 修改arch/arm/boot/dts/st/Makefile,新增设备树编译

    复制代码
    		stm32mp157f-ev1-m4-examples.dtb \
    		stm32mp157d-stm32mp157daa1-mx.dtb
  2. 修改网络驱动 - 参考正点原子

    复制代码
    【正点原子】STM32MP157开发板(A盘)-基础资料\01、程序源码\08、模块驱动源码\01、YT8511驱动源码\linux内核下修改方法
  3. 编译kernel - 参考README.HOW_TO.txt

    复制代码
    source ~/sdk6.6
    export OUTPUT_BUILD_DIR=$PWD/../build
    mkdir -p ${OUTPUT_BUILD_DIR}
    make O="${OUTPUT_BUILD_DIR}" defconfig fragment*.config
    for f in `ls -1 ../fragment*.config`; do scripts/kconfig/merge_config.sh -m -r -O ${OUTPUT_BUILD_DIR} ${OUTPUT_BUILD_DIR}/.config $f; done
    (yes '' || true) | make oldconfig O="${OUTPUT_BUILD_DIR}"
    
    
    [ "${ARCH}" = "arm" ] && imgtarget="uImage" || imgtarget="Image.gz"
    echo $imgtarget
    export IMAGE_KERNEL=${imgtarget}
    make ${IMAGE_KERNEL} vmlinux dtbs LOADADDR=0xC2000040 O="${OUTPUT_BUILD_DIR}"
    make modules O="${OUTPUT_BUILD_DIR}"
    make INSTALL_MOD_PATH="${OUTPUT_BUILD_DIR}/install_artifact" modules_install O="${OUTPUT_BUILD_DIR}"
    mkdir -p ${OUTPUT_BUILD_DIR}/install_artifact/boot/
    cp ${OUTPUT_BUILD_DIR}/arch/${ARCH}/boot/${IMAGE_KERNEL} ${OUTPUT_BUILD_DIR}/install_artifact/boot/
    find ${OUTPUT_BUILD_DIR}/arch/${ARCH}/boot/dts/ -name 'st*.dtb' -exec cp '{}' ${OUTPUT_BUILD_DIR}/install_artifact/boot/ \;
    
    make dtbs O="${OUTPUT_BUILD_DIR}"
    find ${OUTPUT_BUILD_DIR}/arch/${ARCH}/boot/dts/ -name 'st*.dtb' -exec cp '{}' ${OUTPUT_BUILD_DIR}/install_artifact/boot/ \;
    cp /home/niuke/STM32/STM32MP1/develop/linux-stm32mp-6.6.48-stm32mp-r1-r0/linux-6.6.48/../build/arch/arm/boot/dts/st/stm32mp157d-stm32mp157daa1-mx.dtb ~/tftpboot/

uboot网络配置

复制代码
setenv ipaddr 192.168.156.11 
setenv ethaddr b8:ae:1d:01:01:00 
setenv gatewayip 192.168.156.1 
setenv netmask 255.255.255.0 
setenv serverip 192.168.156.10 
saveenv

设置tftp启动

复制代码
setenv bootcmd 'tftp c2000000 uImage;tftp c4000000 stm32mp157d-stm32mp157daa1-mx.dtb;bootm c2000000 - c4000000'
saveenv
reset

制作ext4文件

复制代码
dd if=/dev/zero of=bootfs.ext4 bs=1M count=16
mkfs.ext4 -L bootfs bootfs.ext4
sudo mount bootfs.ext4 /mnt/bootfs/
sudo cp uImage stm32mp157d-stm32mp157daa1-mx.dtb /mnt/bootfs/
sudo umount /mnt/bootfs

下载到板子上验证

  1. 新增flash.tsv

    复制代码
    #Opt	Id	Name	Type	Device	Offset	Binary
    -	0x01	fsbl-boot	Binary	none	0x0	new/tf-a-stm32mp157d-stm32mp157daa1-mx-optee-programmer-usb.stm32
    -	0x03	fip-boot	Binary	none	0x0	new/fip-stm32mp157d-stm32mp157daa1-mx-optee-programmer-usb.bin
    P	0x04	fsbl1	Binary	mmc0	boot1	new/tf-a-stm32mp157d-stm32mp157daa1-mx-optee-emmc.stm32
    P	0x05	fsbl2	Binary	mmc0	boot2	new/tf-a-stm32mp157d-stm32mp157daa1-mx-optee-emmc.stm32
    PD	0x06	metadata1	FWU_MDATA	mmc0	0x00080000	new/metadata.bin
    PD	0x07	metadata2	FWU_MDATA	mmc0	0x00100000	new/metadata.bin
    P	0x08	fip-a	FIP	mmc0	0x00180000	new/fip-stm32mp157d-stm32mp157daa1-mx-optee-emmc.bin
    PED	0x09	fip-b	FIP	mmc0	0x00580000	none
    PED	0x0A	u-boot-env	ENV	mmc0	0x00980000	none

思考

  1. 如何解决问题missing clock-frequency ?

    [ 0.004619] /cpus/cpu@0 missing clock-frequency property
    [ 0.004716] /cpus/cpu@1 missing clock-frequency property

  2. 以下问题为什么出现?

    [ 4.073306] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) ]---

相关推荐
I'mChloe23 分钟前
PTO-ISA 深度解析:PyPTO 范式生成的底层指令集与 NPU 算子执行的硬件映射
c语言·开发语言
2的n次方_1 小时前
Runtime 内存管理深化:推理批处理下的内存复用与生命周期精细控制
c语言·网络·架构
acrelwwj1 小时前
智慧照明新引擎,ASL600 4GWJ开启城市照明精细化管理新时代
大数据·经验分享·物联网
嵌入小生0071 小时前
标准IO---核心函数接口延续(嵌入式Linux)
c语言·vscode·vim·嵌入式·小白·标准io·函数接口
全栈游侠1 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_2 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
历程里程碑2 小时前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法
深圳市九鼎创展科技4 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计4 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
智者知已应修善业4 小时前
【洛谷P9975奶牛被病毒传染最少数量推导,导出多样例】2025-2-26
c语言·c++·经验分享·笔记·算法·推荐算法