首页 > 试题

enought

更新时间:2022-12-03 19:55:06 阅读: 评论:0

初一数学上册难题大全及答案-ing结尾的字


2022年12月3日发(作者:情人节短信)

stm32mp157c-dk2u-boot启动与制作

⼀.uboot描述

1)⽀持外设

/MMCcontroller(SDMMC)

ntroller(FMC)

troller(QSPI)

troller(OTGDWC2)

2)⽀持驱动

1.I2C

1(PMICandregulator)

,Ret,Sysret

⼆.启动列表

BootRom=>FSBLinSYSRAM=>SSBLinDDR=>OS(LinuxKernel)

FSBL=第⼀阶段Bootloader

SSBL=第⼆阶段Bootloader

1)boot设置

a.安全模式启动

在这种模式配置下,U-Boot和安全固件相关联(TF-A)⽽且仅仅U-Boot镜像作为第⼆阶段的bootloader(SSBL)。TF-A⼆进制⽂件

(tf-a-*.stm32)必须被拷贝到名为“fsbl1”的指定分区。U-boot⼆进制⽂件(u-boot*.stm32)必须被拷贝到名为“ssbl”的指定分区

安全启动模式:U-Boot".stm32"的⼆进制扩展⽂件是SSBL,FSBL有TF-A提供

配置⽂件:defconfig_file:stm32mp15_trusted_defconfig

上电启动:BootRom加载启动第⼀启动⽂件=>FSBL=TrustedFirmware-A(TF-A)第⼀阶段启动⽂件;

接着加载启动第⼆阶段启动⽂件=>SSBL=U-Boot第⼆阶段⽂件uboot。

TF-A提供安全外设的全部初始化(如时钟初始化,即使第⼆阶段也有时钟初始化,但是还是以FSBL初始化为主),并且建⽴安全监

控,uboot运⾏在正常模式,并且在TF-A安全监控模式下访问安全资源

b.⼀般模式启动

编译uboot提供给两个启动阶段所需要的⼆进制⽂件:⼀般启动模式:U-BootSPL为第⼀阶段启动⽂件(FSBL,.stm32格式),即U-

BootSPL(32-*)需要拷贝到名字为“fsbl1”的指定分区。U-Bootimgage为第⼆阶段启动⽂件(SSBL,U-Boot

imgage),即U-Boot镜像(u-boot*.img)必须拷贝到名为“ssbl”的指定分区。

⼀般模式启动:在这个设置中,我们⽤U-BootSPL作为第⼀阶段的加载启动(FSBL),⽤U-Boot镜像作为第⼆阶段的加载启动(SSBL).

配置⽂件:defconfig_file:stm32mp15_basic_defconfig

上电启动:BootRom加载启动第启动⽂件=>FSBL=32-*第⼀阶段启动⽂件ubootSPL

接着启动第⼆启动项⽂件=>SSBL=u-boot*.img第⼆阶段启动⽂件

SPL禁⽌安全模式初始化,uboot运⾏在安全模式,仅仅通过PSCI(arm定义的电源状态协调接⼝)⽀持给内核提供安全监控

uboot⽀持所有的STM32MP1板⼦,可以⽀持引导所有stm32mp1⼀般的的板⼦。

每个板⼦仅仅通过设备树进⾏配置:

ev1:evalboardwithpmicstpmic1(ev1=motherboard+daughtered1)

dts:stm32mp157c-ev1

+ed1:daughterboardwithpmicstpmic1

dts:stm32mp157c-ed1

+dk1:Discoveryboard

dts:stm32mp157a-dk1

+dk2:Discoveryboard=dk1withaBT/WiFIcomboandaDSIpanel

dts:stm32mp157c-dk2

三.uboot编译步骤

==================

1).安装U-BootMakefile所需要的⼯具

(libssl-dev,swig,libpython-dev...)

安装ARMv7的32位⼯具链+installARMv7toolchainfor32bitCortex-A(Linaro,

SDKforSTM32MP1,或者从你的配置安装⼀些交叉⼯具链)

2).设置编译器,这个也可以就⾏系统设置/etc/⾥⾯长期设置:

#exportCROSS_COMPILE=/path/to/toolchain/arm-linux-gnueabi-

编译器已经安装,我电脑执⾏:source/home/my-linux/STM32MPU_workspace/STM32MP15-Ecosystem-

v1.1.0/Developer-Package/SDK/environment-tup-cortexa7t2hf-neon-vfpv4-openstlinux_weston-linux-gnueabi

3).选择编译输出⽂件⽬录

#exportKBUILD_OUTPUT=/path/to/output

例如:给每⼀种模式配置新建⼀个输出⽬录

#exportKBUILD_OUTPUT=../build/stm32mp15_trusted

#exportKBUILD_OUTPUT=../build/stm32mp15_basic

4).配置U-Boot:

#make

-对于安全可靠模式defconfig_file:"stm32mp15_trusted_defconfig"

-对于⼀般模式defconfig_file:"stm32mp15_basic_defconfig"

5).配置设备树和编译U-Bootimage:

#makeDEVICE_TREE=all

例如:

a)安全模式ev1板⼦

#exportKBUILD_OUTPUT=stm32mp15_trusted

#makestm32mp15_trusted_defconfig

#makeDEVICE_TREE=stm32mp157c-ev1all

b)⼀般模式dk2板⼦

#exportKBUILD_OUTPUT=stm32mp15_basic

#makestm32mp15_basic_defconfig

#makeDEVICE_TREE=stm32mp157c-dk2all

四.输出⽂件

BootRom和TF-A所需要的STM32镜像头⽂件的⼆进制⽂件

SPL所需要的U-BootuImage头部⽂件

在输出⽬录(KBUILD_OUTPUT),

可以找到所需要的⽂件:

a)在安全模式下

+FSBL=32(TF-A源码编译提供)

+SSBL=32(uboot编译得到)

b)⼀般模式下

+FSBL=spl/32(uboot⼀般模式编译得到)

+SSBL=(uboot⼀般模式编译得到)

五.制作microSD启动镜像

STM32启动最⼩需要的分区⽂件:

-GPT分区(⽤gdisk或者sgdisk)

-2个fsbl分区,名字fsbl1和fsbl2,⼤⼩⾄少是256KiB

-1个ssbl分区给U-Boot

然后最⼩GPT分区是:

------------------------------------

|数量|名字|⼤⼩|内容|

------------------------------------

|1|fsbl1|256KiB|TF-AorSPL|

|2|fsbl2|256KiB|TF-AorSPL|

|3|ssbl|enought|U-Boot|

|*|-|-|Boot/Rootfs|

------------------------------------

在添加引导分区/uboot/include/config_distro_bootcmd.h配置着启动参数,u-boot-

2018.11/board/st/stm32mp1/README,有uboot制作sd启动详细描述

下⾯是基本的分配情况

(doc/foru)

根据⽤到的card选择设备

(/dev/sdxor/dev/mmcblk0)

我⽤/dev/mmcblk0作为例⼦

例如:withgpttablewith128entries

a)删掉先前的格式(制作启动盘需要管理模式)

#sgdisk-o/dev/

b)创建最新系统镜像

#sgdisk--resize-table=128-a1

-n1:34:545-c1:fsbl1

-n2:546:1057-c2:fsbl2

-n3:1058:5153-c3:ssbl

-p/dev/

例如制作步骤:

1)#sgdisk-o/dev/sdc删除分区,在管理模式下

2)root@vlinux:/dev#

sgdisk--resize-table=128-a1-n1:34:545-c1:fsbl1-p/dev/sdc

3)sgdisk--resize-table=128-a1-n2:546:1057-c2:fsbl2-p/dev/sdc

4)sgdisk--resize-table=128-a1-n3:1058:5153-c3:ssbl-p/dev/sdc

5)sgdisk--resize-table=128-a1-n4:5154:136225-c4:bootfs-p/dev/sdc

6)sgdisk--resize-table=128-a1-n5:136226:168993-c5:vendorfs-p/dev/sdc

7)sgdisk--resize-table=128-a1-n6:168994:1705857-c6:rootfs-p/dev/sdc

8)sgdisk--resize-table=128-a1-n7:1705858:15759324-c7:urfs-p/dev/sdc

分区完后,分别对4.5.6.7分区格式化成ext4格式

mkfs-text4/dev/sdc4

mkfs-text4/dev/sdc5

mkfs-text4/dev/sdc6

mkfs-text4/dev/sdc7

NumberStart(ctor)End(ctor)SizeCodeName

134545256.0KiB8300fsbl1

25461057256.0KiB8300fsbl2

3105851532.0MiB8300fsbl3

45.0MiB8300fsbl4

5316.0MiB8300fsbl5

657750.4MiB8300fsbl6

71746.7GiB8300fsbl7

Theoperationhascompletedsuccessfully.

pc挂载可⽤ls-l/dev/disk/by-partlabel/查看分区

也可以继续添加内核分区

例如rootfs分区:

-n3:5154:-c4:rootfs

c)拷贝FSBL(拷贝2次)和SSBL⽂件到指定的分区.

例如分区1to3

⼀般模式:=/dev/mmcblk0

#ddif=32of=/dev/mmcblk0p1

#ddif=32of=/dev/mmcblk0p2

#ddif==/dev/mmcblk0p3

安全模式:

#ddif=32of=/dev/mmcblk0p1

#ddif=32of=/dev/mmcblk0p2

#ddif=32of=/dev/mmcblk0p3

SDCard启动,选择BootPinMode=111然后复位.

六.eMMC启动

===============

⽤U-Boot拷贝⼆进制⽂件到eMMC.

在接下来的例⼦中,你需要先从SDCARD启动,镜像⽂件(32,)是ext4格式

⽬前在SDCARD(mmc0)第四分区(bootfs)

SDCard启动,选择BootPinMode=111然后复位.

然后更新eMMC在接下来的U-Boot命令中:

a)在eMMC准备全局引导GPT,

例⼦中的2个分区,bootfs和roots:

#tenv

emmc_part"name=ssbl,size=2MiB;name=bootfs,type=linux,bootable,size=64MiB;name=rootfs,type=linux,size=512"

#gptwritemmc1${emmc_part}

b)复制SPL到eMMC的第⼀个启动分区

(SPL最⼤是256kB,withLBA512,0x200)

#ext4loadmmc0:32

#mmcdev1

#mmcpartconf1111

#mmcwrite${fileaddr}0200

#mmcpartconf1110

b)复制U-Boot在eMMC的第⼀个GPT分区

#ext4loadmmc0:

#mmcdev1

#partstartmmc11partstart

#partsizemmc11partsize

#mmcwrite${fileaddr}${partstart}${partsize}

从eMMC启动,选择BootPinMode=010然后复位重启.

七.MAC地址

Macid的存取和索引再stm32mpotp上:

-OTP_57[31:0]=MAC_ADDR[31:0]

-OTP_58[15:0]=MAC_ADDR[47:32]

编程⼀个MAC地址在上⾯原始的OTP上,可以在bank0上⽤fu命令

进⼊内部的OTP:

例如去设置MAC地址"12:34:56:78:9a:bc"

1)⾸先写OTP

STM32MP>fuprog-y0570x785634120x0000bc9a

2)然后读OTP

STM32MP>fun0572

bank0上显⽰:

Word0x00000039:785634120000bc9a

3)接着重新启动REBOOT:

###SettingenvironmentfromOTPMACaddress="12:34:56:78:9a:bc"

4)检查环境更新

STM32MP>printethaddr

ethaddr=12:34:56:78:9a:bc

⼋.协处理器固件

========================

U-Boot可以在内核之前启动协处理器(协处理器早期启动).

1)⽤rproc命令⼿动启动(更新bootcmd)

配置:

#envtname_copro"stm32mp15_"

#envtdev_copro0

#envtloadaddr_copro0xC1000000

在SDCard(mmc0)第四分区,从bootfs分区下载⼆进制⽂件

#ext4loadmmc0:4${loadaddr_copro}${name_copro}

=>${filesize}updatedwiththesizeoftheloadedfile

⽤远程proc命令启动M4固件

#rprocinit

#rprocload${dev_copro}${loadaddr_copro}${filesize}

#rprocload_rsc${dev_copro}${loadaddr_copro}${filesize}

#rprocstart${dev_copro}

2)⽤FIT特性和通⽤的DISTRObootcmd⾃动加载//AutomaticallybyusingFITfeatureandgenericDISTRObootcmd

看这个⽬录的例⼦:

⽣成FIT,包括kernel+devicetree+M4固件

⽤cfg⽤M4boot

$>mkimage-ffit_copro_kernel__copro_kernel_

然后⽤DISTRO配置⽂件:参考选择

正确的配置如下:

=>stm32mp157c-ev1-m4

=>stm32mp157c-dk2-m4

九.通过SDCARD更新uboot启动:

-----------------------

1)基本启动模式

需要更新的⽂件:*32-*

把⼆进制⽂件拷贝到指定分区,在SDCARD/USB闪存分区

"fsbl1"是分区1:

-SDCARD:/dev/mmcblkXp1(whereXistheinstancenumber)

-SDCARDviaUSBreader:/dev/sdX1(whereXistheinstancenumber)

ddif=of=/dev/bs=1Mconv=fdatasync

需要更新的⽂件*u-boot*.img

拷贝⼆进制⽂件到指定分区,在SDCARD/USB的闪存分区

"ssbl"是分区4:

-SDCARD:/dev/mmcblkXp3(x是分区的实例标号)

2)安全可靠启动模式

需要更新的⽂件:*tf-a-*.stm32

拷贝⼆进制到指定的分区,在SDCARD/USB闪存的分区

"fsbl1"是分区1:

-SDCARD:/dev/mmcblkXp1(是实际分区名字)

-SDCARDviaUSBreader:/dev/sdX1(x是实际分区的名字)

ddif=of=/dev/bs=1Mconv=fdatasync

需要更新的⼆进制⽂件:*u-boot*.stm32

拷贝⼆进制到指定的分区,在SDCARD/USB闪存的分区

"ssbl"是分区4:

-SDCARD:/dev/mmcblkXp3(是实际分区名字)

-SDCARDviaUSBreader:/dev/sdX3(是实际分区名字)

ddif=of=/dev/bs=1Mconv=fdatasync

本文发布于:2022-12-03 19:55:06,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/88/46374.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:hgcl2
下一篇:共享的近义词
标签:enought
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图