2022.12.08work

上篇笔记

开发板组网

准备

  1. ubuntu安装tftp服务器和nfs服务器
  2. 设置windows防火墙
  3. 设置电脑为百兆全双工模式
    1. 控制面板->网络和internet ->网络连接->查找对应网 卡-> 属性->配置->高级->连接速度和双工模式 ->100Mbpd Full Dulpex
  4. PC和开发板进行网线连接

ubuntu网络配置

VMware->编辑->虚拟机网络适配器->更改设置->创键VMnet0 ->桥接至对应网卡
ubuntu->有线设置->添加网络->IPV4->手动->192.168.1.XXX:24->网关192.168.1.1->DNS8.8.8.8

开发板网络配置

串口工具-> uboot->配置对应环境变量

serverip 192.168.1.xxx # 服务器ip,对应ubuntuip
ipaddr 192.168.1.aaa # 开发板ip
netmask 255.255.255.0 # 开发板子网掩码
gatewayip 192.168.1.1 # 开发板网关

saveenv # 保存变量

测试组网连接

ping 192.168.1.XXX # 服务器ip(serverip)

tftp测试

# ubuntu
# 文件准备到tftp文件夹
cp asm-led.bin ~/tftpboot

# 开发板
tftp c0008000 asm-led.bin

uboot源码获取

  1. uboot官网
  2. ST开发社区
  3. ST官网
  4. 开发板厂家提供.

uboot命名方式

u-boot-年-月-rc.tar.bz2
rc:表示测试版本,不稳定

硬件平台

基于MD1和MK2开发

硬件平台描述

CPU板: cortex-A7*2, cortex-M4
架构: arm-V7
厂商:ST
soc: STM32MP157aaa
board: FSMP1A

uboot源码移植准备工作

ubuntu内准备uboot源码

uboot源码分析

arch : 存放架构相关内容
board : 存放开发板相关文件
configs : 存放配置文件
Kbuild : 内核编译文件
include : 存放头文件
drivers : 存放驱动相关文件
net : 网络文件
README : 帮助文档

# 对应码编译指令
cd u-boot
make <board_name>_defconfig
确认board_name
# 方法一
# 查看配置文件
ls configs/stm32mp*

# 方法二
# 在uboot源码顶层目录下打开makefile文件
# 查找config:
%config: scripts_basic outputmakefile FORCE
	$(Q)$(MAKE) $(build)=scripts/kcongif $@

make fsmp1a_defconfig

%config: scripts_basic outputmakefile FORCE
	$(Q)$(MAKE) $(build)=scripts/kconfig $@
# $(Q) 为取消回显,将$(Q)取消后执行
make fsmp1a_defconfig
# 显示 make -f ./scripts/Makefile.build obj=scripts/kconfig fsmp1a_defconfig=make obj=scripts/config fsmp1a_defconfig

# 有信息知打开 scripts/kconfig 目录下的Makefile查找defconfix
%_defconfig: $(obj)/conf
	$(Q)$<$(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
# 去掉$(Q) 返回uboot顶层执行
make fsmp1a_defconfig
# 显示
scripts/kconfig/conf --defconfig=arch/../configs/fsmp1a_defconfig kconfig

scripts/konfig/conf # 可执行文件
--defconfig=arch/../configs/fsmp1a_defconfig # 开发板目标文件
kconfig # uboot源码目录的配置文件

Makefile

make help 查看Makefile帮助信息

make clean # 移除大多数生成文件,但保留config(配置文件)

make mrproper # 移除大多数的生成文件,配置文件,备份文件

make distclean # mrproper和编辑备份和补丁文件

make menuconfig # 图形化配置

make all # 编译uboot源码‘

Linux启动流程

  1. 系统上电
  2. 芯片固化程序引导一级程序(FSBL)启动
  3. 一级程序完成后,引导二级程序(SSBL)启动
  4. 二级程序完成后,下载设备树文件和uImage镜像文件,内核启动
  5. 内核启动完成后,加载根文件系统

非安全启动流程

流程做用
BL0芯片厂家出厂时,固化到芯片内
BL1FSBL(u-boot-spl.stm)
BL2SSBL(u-boot.img)
uboot源码配置和编译流程
# 前往uboot顶层目录
# 配置交叉编译工具链,打开Makefile,搜索CROSS_COMPILE
# 修改
ifeq ($(HOSTARCH,$ARCh))
CROSS_COMPILE ?=
# 为
ifeq (arm,arm)
CROSS_COMPILE ?=arm-linux-gnueabihf

# 设备树相关文件
.dts # 设备树的源文件
.dtsi # 设备树的头文件
dtc # 编译dts的工具
.dtb # 设备树的可执行文件
# 格式
/{
	{
		节点相关信息
	};
};
# 设备树文件中有缩进格式要求,且不能使用=G自动对齐

# uboot中设备树文件存放在 arc/arm/dts
# 查看DK1公板相关设备树内容 ls stm32
stm32mp157a-dk1.dts
stm32mp157a-dk1-u-boot.dtsi
stm32mp15xx-dkx.dtsi
# 进入arch/arm/dts,将设备树文件复制一份为平台相关内容
cp stm32mp157a-dk1.dts stm32mp157a-fsmp1a.dts
cp stm32mp157a-dk1-u-boot.dtsi stm32mp157a-fsmp1a-u-boot.dtsi
cp stm32mp15xx-dkx.dtsi stm32mp15xx-fsmp1x.dtsi
# 修改stm32mp157a-fsmp1a.dts
#include "stm32mp15xx-dkx.dtsi"
/{
	model = "STMicroelectronics STM32MP157A-DK1 Discovery Board";
	compatible = "st,stm32mp157a-dk1","st,stm32mp157";
# 为
#include "stm32mp15xx-fsmp1x.dtsi"
/{
	model = "STMicroelectronics STM32MP157A-FSMP1A Discovery Board";
	compatible = "st,stm32mp157a-fsmp1a","st,stm32mp157";

# 打开Makefile文件,添加FSMP1A平台设备树内容
dtb1$(CONFIG_STM32MP15x) += \
	stm32mp157a-dk1.dtb \
	stm32mp157a-fsmp1a.dtb \   # <-添加内容

# 对uboot进行编译,在uboot源码顶层执行
time make -j4 all
# 成功现象
# 生成u-boot.img 和 u-boot-spl.stm32

# 在uboot源码顶层下基于图形化配置界面配置
make menuconfig
制作tf卡启动盘

TF卡接入ubuntu
查看TF卡分区

ls /dev/sd*

初始化TF卡分区

sudo parted -s /dev/sdb mklabel msdos

对TF卡进行分区

sudo sgdisk --resize-table=128 -a 1 -n 1:34:545 -c 1:fsbl1 -n 2:546:1057 -c 2:fsbl2 -n 3:1058:5153 -c 3:ssbl -n 4:5153:136225 -c 4:bootfs -n 5:136226 -c 5:rootfs -A 4:set:2 -p /dev/sdb -g



sgdisk # 分区命令
--resize-table=128 -a 1  # 指定分区对齐方式
-n # 创建新分区标志
1:34:545 # 创建分区,起始块号32,终止信号545块号
# 一块:512字节
-c 1:fsbl1 # 设置分区名字
-A 4:set:2 # 设置分区表属性
-p /dev/sdb -g # 打印显示分区表,查看是否有successful判断是否分区成功

烧写

dd if=u-boot-spl.stm32 of=/dev/sdb1 conv=fdatasync
dd if=u-boot-spl.stm32 of=/dev/sdb2 conv=fdatasync
dd if=u-boot of=/dev/sdb3 conv=fdatasync

dd # 少些命令
if # 输入文件标志
of # 输出路径
conv=fdatasync # 指定以物理方式写入
测试uboot镜像文件
  1. 安全弹出TF卡
  2. 将TF卡插回开发板
  3. 设置开发板拨码开关为TF卡启动

安全启动流程

需要先移植非安全的启动流程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以考虑以下几点来优化该 SQL 语句的性能: 1. 索引优化:对于涉及到大量数据的查询,合理设置索引可以显著提升查询性能。在这个语句中,可以在宽带账号、受理时间两个字段上创建索引。 2. 子查询优化:在语句中使用了子查询,这会增加查询的时间。可以将子查询的结果存储在一个临时表中,然后再将临时表与其他表进行 JOIN 操作。 3. 数据过滤:在 WHERE 子句中添加合适的过滤条件,可以减少需要查询的数据量,提高查询效率。 4. 数据库参数调整:针对具体的数据库,可以适当调整一些参数,如缓存大小等,以提高查询效率。 最终优化后的语句如下: ``` CREATE TEMPORARY TABLE temp_table AS SELECT 宽带账号, MAX(受理时间) AS 最近时间 FROM work0519.装移维标签清单 WHERE 受理时间 >= '2022-12-01' GROUP BY 宽带账号; UPDATE work.全量0520 JOIN work0519.装移维标签清单 ON work.全量0520.宽带账号 = work0519.装移维标签清单.宽带账号 JOIN temp_table ON work0519.装移维标签清单.宽带账号 = temp_table.宽带账号 AND work0519.装移维标签清单.受理时间 = temp_table.最近时间 SET work.全量0520.装维最近评价时间 = work0519.装移维标签清单.受理时间, work.全量0520.装维最近评价 = work0519.装移维标签清单.回复满意度; ``` 这样可以通过临时表和 JOIN 操作减少子查询的使用,同时添加了过滤条件和索引,提高了查询效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值