从零开始打造 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) ]---

相关推荐
qqssss121dfd1 分钟前
STM32H750XBH6的ETH模块的IPv4 ARP offload功能分析
stm32·单片机·嵌入式硬件
_饭团11 分钟前
字符串函数全解析:12 种核心函数的使用与底层模拟实现
c语言·开发语言·学习·考研·面试·蓝桥杯
小杨同学4920 分钟前
STM32 进阶封神之路(二十二):DMA 实战全攻略 ——ADC 采集 + 串口收发 + 内存复制(库函数 + 代码落地)
后端·单片机·嵌入式
修充电器上瘾23 分钟前
驱动一个AIP650、数码管、按键、LED、红外、蜂鸣器控制板
单片机·嵌入式硬件
呆瑜nuage41 分钟前
【复习系列】高频C/C++库函数手写实现指南与自定义类型的理解指南
c语言·c++·面试
AI+程序员在路上1 小时前
CAN 总线与 Linux SocketCAN C 语言测试程序
linux·c语言·网络
浅念-1 小时前
C ++ 智能指针
c语言·开发语言·数据结构·c++·经验分享·笔记·算法
Nan_Feng_ya2 小时前
基于STM32的智能手表复刻成功(完全开源)
arm开发·stm32·pcb工艺·智能手表
HalvmånEver2 小时前
Linux:基于socket套接字写的简易英译汉翻译服务器
单片机·嵌入式硬件
jianqiang.xue2 小时前
ESP32-P4 看门狗复位全解析:HP_SYS_HP_WDT_RESET 故障排查实战
单片机·mcu·esp32·idf