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

相关推荐
山登绝顶我为峰 3(^v^)311 小时前
C/C++ 交叉编译方法
java·c语言·c++
2401_8541515512 小时前
ARM Cortex-M 体系结构深度解析——寄存器模型、处理器模式、AAPCS 与异常模型
arm开发·stm32·单片机·嵌入式硬件
MetrixAeroCore12 小时前
卡塔尔国际物联网卡|卡塔尔本地网络环境、工况适配与落地应用指南
物联网
Deven_Huang14 小时前
STM32 ADC 使用经验总结与常见踩坑点
stm32·adc
KaifuZeng14 小时前
通信与接口协议面试五、RS422
嵌入式硬件·面试·通信与接口
MetrixAeroCore14 小时前
国际物联网卡资费怎么算?包月、按量计费、共享流量池企业选型避坑指南
物联网
LONGZETECH14 小时前
新能源汽车动力电池检测仿真教学系统:C/S 分层架构与数字化实训落地全解析
大数据·c语言·开发语言·人工智能·架构·系统架构·汽车
迷茫、Peanut15 小时前
蜂鸣器介绍
单片机
Topplyz16 小时前
如何减小DCDC的纹波?
单片机·嵌入式硬件·硬件工程·电源·layout·dcdc
legendary_16316 小时前
SINK芯片:Type-C统一供电时代的小家电核心方案
c语言·开发语言·人工智能·智能手机