当前位置: 首页 > backend >正文

【bmc1】概要,构建image

文章目录

  • 1.概要:网址boost.org
  • 2.构建:BitBake根据build/conf/bblayers.conf中定义的所使能的meta-xxx,找到对应meta-xxx文件夹下的layer.conf文件,根据layer.conf文件中所使用的.bb或.bbappend文件中定义的软件包或源码的下载、配置、编译方式、安装目录等,将软件包或源码编译进根文件系统
    • 2.1 编译:bitbake -s | grep 列出本项目所有recipe即.bb文件
    • 2.2 配置:INSANE_SKIP:${PN} += "installed-vs-shipped"(跳过FILES未声明但已安装文件QA检查)
    • 2.3 内核添加驱动:单独编译devtool build linux-aspeed
  • 3.分区:flash没有利用率,启动后就不用flash了,bmc芯片运存2G
    • 3.1 EMMC:emmc reset pin连到BMC gpio


1.概要:网址boost.org

boost.asio异步单线程:替换轮询while(1) 和for循环。
openbmc交叉编译工具链:arm-openbmc-linux-gnueabi(对gcc12.2的打的patch),meson构建工具取代cmake/automake。
io.run():从异步事件结束了,将上面回调函数放入队列里,io.run依次执行任务队列里排队的任务。
外插卡比如背板/raid卡:一开始不知道插什么型号,不适合设备树+hwmon驱动框架。
distro发行版:bmc就是phosphor。
在这里插入图片描述
在这里插入图片描述
审计日志指谁操作过BMC,用户管理是phosphor-user-manager软件包。
在这里插入图片描述

2.构建:BitBake根据build/conf/bblayers.conf中定义的所使能的meta-xxx,找到对应meta-xxx文件夹下的layer.conf文件,根据layer.conf文件中所使用的.bb或.bbappend文件中定义的软件包或源码的下载、配置、编译方式、安装目录等,将软件包或源码编译进根文件系统

# DISTRO=fsl-imx-fb MACHINE=imx6ull14x14evk source imx-setup-release.sh -b build ,bitbake imx-image-multimedia# imx-setup-release.sh调用setup-environment脚本,根据上行DISTRO变量找到fsl-imx-fb.conf(相当于local.conf.sample),根据上行MACHINE找到imx6ull14x14evk.conf(相当于linconcity.conf, 里面会包含.inc,inc文件里会指定UBOOT_DEVICETREE和KERNEL_DEVICETREE,启动串口打印出使用哪个dts)# 如下在build/conf目录里,内容都是通过imx-setup-release.sh参数传入,?=是变量未定义或为空时才赋值
bblayers.conf: 需要使用的metalayers
local.conf: MACHINE ??=, DL_DIR ?=, BB_NUMBER_THREADS并行线程数,PACKAGE_CLASSES软件包管理格式# meta-bird-imx6ull/recipes-test/test/printfhello.bb:bitbake printfhello -c TestFun
DESCRPITION = "Prints Hello World"
LICENSE = "GPLv2+"
LIC_FILES_CHKSUM = "file://Licenses/README;md5=..."
PN = "printfhello"
PV = "1"
addtask TestFun
python do_TestFun(){bb.plain("* Hello, World! *");
}

如下在imx-setup-release.sh中,相当于openbmc的bblayers.conf.sample(最小系统需要依赖meta-phosphor和meta-aspeed)。
在这里插入图片描述
如下templates文件夹相当于distro文件夹(软件),machine文件夹(硬件)。
在这里插入图片描述

# layer.conf
# LOCALCONF_VERSION = "14"
BBPATH .= ":${LAYERDIR}"  # . 当前目录
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \   ${LAYERDIR}/recipes-*/*/*.bbappend"   # bitbake
IMAGE_INSTALL:append = "setup \xconn \"  # 找setup_版本.bb文件
BBFILE_COLLECTIONS += "hua-layer"  # hua换为其他厂商,里面的layer.conf hua换成lincolncity,Layer的文件夹名字meta-xxx中的xxx
BBFILE_PATTERN_hua-layer := "^${LAYERDIR}/"
LAYERSERIES_COMPAT_hua-layer := "honister kirkstone"# BBFILE_PRIORITY_hua:Layer的优先级。当不同的Layer中定义了相同的recipe时,将按照BBFILE_PRIORITY所对应的高优先级使用相对应的recipe文件。

2.1 编译:bitbake -s | grep 列出本项目所有recipe即.bb文件

// . setup lincolncity (根据lincolncity.conf文件名前缀),生成的build/lincolncity文件夹也是根据此文件名前缀
MACHINE ??= "lincolncity"  // local.conf.sample中(DL_DIR,BB_DISMON_SIRS监听编译磁盘空间,改动openBmc密码)也与lincolncity.conf文件名前缀匹配
// https://github.com/facebook/openbmc (fb),  https://github.com/openbmc/openbmc (ocp)

如下文件中可指定PREFERRED_VERSION_linux-aspeed = “5.10%”。
在这里插入图片描述
如下有很多版本linux-aspeed的bb,找5.10的bb文件。
在这里插入图片描述
g6的deconfig的变量改成n,这个驱动就不编译了。
在这里插入图片描述
如下devtool modify后才出现,source后只出现build/machine/conf文件夹。除了删tmp目录,还要删软件包下oe-local-files目录再编译。删除sources和appends文件夹就不用devtool reset。
在这里插入图片描述

#!/bin/bash
# ./sy。。.sh生成yocto文件夹
# downloads() {
#     build_exist=$(grep "DL_DIR" $buildpath/conf/local.conf)
#     if [ ! -n "$build_exist" ]; then
#         echo "DL_DIR ?= \"/home/y/bak/fb/downloads\"" >> "conf/local.conf"
#     fi
# }
# buildplatform() {
#     # 如下会执行这个openbmc-init-build-env shell脚本
#     source openbmc-init-build-env meta-hua/meta-$1 build-$1  
#     buildpath=$(pwd)
#     downloads
#     bitbake $1-image
#     rm -rf conf/local.conf
# }
# buildplatform $1    ## fb,$1是MACHINEsource ./setup $1;   ## ocp
echo "DL_DIR ?= \"/home_a/y/bak/ocp/downloads_ocp\"" >> "conf/local.conf"   # build/conf/local.conf 或 conf/local.conf.sample
bitbake  obmc-phosphor-image  # 生成build/downloads文件夹,bitbake找到obmc-phosphor-image.bb
bitbake -c compile bmcweb  # 编译bmcweb, tmp/work/arm1176jzs-openbmc-linux-gnueabi/bmcweb/1.0+git目录下可以查看编译后生成的代码
# phosphor-dbus-interfaces添加dbus后必须do_cleanall才能do_compile编译,这样添加的yaml文件才能生效
bitbake -c cleanall xxx # 删除package相关所有内容,包括缓存文件和下载的源码(慎用)
bitbake -c clean systemd-conf -f # 删除编译的成果物,不会删除缓存文件,systemd-conf_*.bb# fetch有进度条,但是由于时间过长导致fecth到一定进度断开,在build/conf/local.conf文件增加fetch的retry次数以及timeout的时长:
FETCH_TIMEOUT = "3000"   
CONNECT_TIMEOUT = "3000"   # 300 秒 
RETRIES = "10"    # 重试次数 
FETCH_RETRIES = "10" 
GIT_PROXY_TIMEOUT = "180"# 如下不用DL_DIR downloads文件夹也可以:
#!/bin/bash,copy_from_downloads.sh
OPT_PATH=$1
TAR_PATH=$OPT_PATH
GIT_PATH=$OPT_PATH"/git2"  # 文件夹,里面还有.git文件夹
for FILE_NAME in `ls $TAR_PATH`; doFILE_FILTER=`echo "$FILE_NAME" | grep .done`  #过滤这些后缀if [ "$FILE_FILTER" != "" ]; thencontinuefiFILE_FILTER=`echo "$FILE_NAME" | grep .tmp`if [ "$FILE_FILTER" != "" ]; thencontinuefiFILE_FILTER=`echo "$FILE_NAME" | grep .lock`if [ "$FILE_FILTER" != "" ]; thencontinuefiif [ "$FILE_NAME" == "git2" ]; thencontinueficp $TAR_PATH"/"$FILE_NAME ./
done
CUR_PATH=$PWD
for FILE_NAME in `ls $GIT_PATH`; do# 同上过滤.done.lock.tmp文件if [ -f $CUR_PATH"/git2_"$FILE_NAME".tar.gz" ]; thencontinueficd $GIT_PATH"/"$FILE_NAMEtar -zcf $CUR_PATH"/git2_"$FILE_NAME".tar.gz" ./.
done
# /home/bmc/intel_obmc/intel_obmc_mirror $ ./copy_from_downloads.sh  ../downloads
# 如下build/conf/local.conf
BB_NO_NETWORK = "0"
BB_FETCH_PREMIRRORONLY = "0"
PREMIRRORS:prepend = "\
git://.*/.* file:///home/bmc/intel_obmc/intel_obmc_mirror/ \n\
gitsm://.*/.* file:///home/bmc/intel_obmc/intel_obmc_mirror/ \n\
ftp://.*/.* file:///home/bmc/intel_obmc/intel_obmc_mirror/ \n\
http://.*/.* file:///home/bmc/intel_obmc/intel_obmc_mirror/ \n\
https://.*/.* file:///home/bmc/intel_obmc/intel_obmc_mirror/ \n"

2.2 配置:INSANE_SKIP:${PN} += “installed-vs-shipped”(跳过FILES未声明但已安装文件QA检查)

# ./meta-phosphor/classes/phosphor-ipmi-host.bbclass定义的变量给./meta-phosphor/recipes-phosphor/ipmi/phosphor-ipmi-host_git.bb或ipmi目录下其他bb用(class是个集合,inherit phosphor-ipmi-host)# 存在一个a_1.1.bb文件,对于该文件其PN(package name)为“a”,PV(package version)为“1.1”;同时存在另外一个a_1.2.bb文件,那么BitBake将默认采用a_1.2.bb构建系统。如果在.conf文件中定义了PREFERRED_PROVIDER_a = "1.1",那么BitBake将会采用a_1.1.bb文件构建系统。# do_rootfs任务使用几个关键变量来确定创建实际安装软件包列表:
# build/conf/local.conf:
IMAGE_INSTALL_append = " strace"   # 所有的image文件安装strace软件
IMAGE_INSTALL_append_pn-core-image-minimal = " strace"   # 新增加的strace软件只对core-image-minimal的image文件有效
# image.bb:IMAGE_INSTALL += "strace" ,OBMC_IMAGE_EXTRA_INSTALL:append/remove:machine名 = (当bitbake指定这machine,这行才会生效,条件语法)
# meta-common/../packagegroup.bb:RDEPENDS
# machine/lincol.conf:MACHINE_FEATURES += "emmc emmc-ext4", MACHINE_ESSENTIAL_EXTRA_RDEPENDS +=
# meta-common/classes/obmc-phosphor-image-common.bbclass: IMAGE_INSTALL:append = e2fsprogs-e2fsck , BAD_RECOMMENDATIONS:remove = "e2fsprogs-e2fsck" (如下阻止安装,所以这里remove),提供e2fsck(命令)-a /dev/mmcblk0 挂载前修复

在这里插入图片描述

# setup脚本:
1.find meta-* -path "*/conf/machine/*.conf 查找有没有machine目录以及下面的conf文件
2.循环遍历上面获取的:机器配置文件列表 $configs。每次循环中提取出配置文件的文件名(不包括路径和扩展名),并将其存储在name变量中。通过grep命令检测配置文件所在的模板目录路径($tmpl[meta-xx/meta-xx/conf]/templates/default/bblayers.conf.sample),判断bblayers.conf里面是否包含meta-phosphor如果包含,继续如果不包含,跳过检测用户指定的machine,和当前遍历到的machine即name如果是,调用oe-init-build-env进行初始化(openbmc-init-build-env脚本也是调这个)如果没有指定machine,打印遍历的machine的值# oe-init-build-env:
1.调用poky/scripts/oe-buildenv-internal脚本设置OpenEmbedded构建环境相关的变量和路径,包括构建目录、BitBake路径、Python路径、环境变量传递等这些设置将确保后续的构建和定制操作能够正确地使用OpenEmbedded框架和工具检测环境的python版本设置环境变量 BITBAKEDIR  BUILDDIR BBPATH设置环境变量 PATH : /home/xxx/openbmc/scripts   包含 git devtool runqemu等命令/home/xxx/openbmc/poky/bitbake/bin 包含bitbake命令
2.调用poky/scripts/oe-setup-builddir脚本创建构建目录:使用mkdir -p命令创建构建目录下的conf子目录如果conf/local.conf文件不存在,使用项目中的sample文件创建文件 如果bblayers.conf文件不存在,使用项目中的sample文件创建文件打印conf/conf-notes.txt 文件中的内容# 如下在bmcweb.bb中:	
inherit systemd:继承systemd类,意味着该软件包将使用systemd作为其init系统,./poky/meta/classes/systemd.bbclass
USERADD_PARAM:创建用户时使用的参数。在这里,将创建一个名为 bmcweb 的用户,具有 /usr/sbin/nologin 作为 shell,并且是一个系统用户
GROUPADD_PARAM: 将创建名为web和redfish的用户组
LICENSE: 定义软件包的许可证为 Apache-2.0
SRC_URI: 定义软件包的源代码位置 , bitbake -c do_fetch使用
SRCREV: 使用的源代码的特定 Git 提交commit id
S: 定义源代码的工作目录
DEPENDS:定义软件包的依赖关系
RDEPENDS:定义软件包在运行时的依赖关系
FILES:定义软件包的安装文件列表
EXTRA_OEMESON:定义额外的meson构建选项, meson.build中可以通过get_option获取这个配置项的值
SYSTEMD_SERVICE:定义软件包提供的systemd服务和socket
FULL_OPTIMIZATION:定义完整优化选项# build文件夹里:bitbake-cookerdaemon.log:bitbake cooker守护进程的活动的日志bitbake.lock:锁文件,用于确保同一时间只有一个BitBake进程在运行,bitbake server无法启动,删除此文件再编译bitbake.sock:Unix套接字文件,用于与BitBake服务器通信cache:编译过程中生成的缓存文件conf:yocto系统的配置文件,包含local.conf 和 bblayers.conf 等配置sstate-cache:包含了shared state缓存,可以在不同构建之间共享已构建的临时文件,以加快构建速度symbol:符号表信息的目录,可用于coredump调试tmp:构建的主要工作目录deploy: 用于存储构建过程中生成的构建产物,比如镜像或者ipk或者rpm软件包work: 构建过程中的工作目录,用于存储源代码的中间编译结果和构建过程中生成的临时文件。work-shared: 与work目录类似,存储共享的构建结果和临时文件,主要是kernel和gcc编译工具workspace:用户修改代码和配置文件时的工作区# yocto编译系统Image优化:strip操作可理解为对编译生成的成果物(so、bin之类的)剔除其用于Debug的symbol等,strip后成果物的size会变小。Yocto系统默认对Image的成果物进行Strip操作,但可以通过设置下述变量让Yocto对成果物不进行strip。
INHIBIT_PACKAGE_STRIP = 1 (可小写,在linux-aspeed_%.bbappend中)
INHIBIT_PACKAGE_DEBUG_SPLIT =1
# 1.添加uboot宏
在conf/machine/xx.conf文件中,通过UBOOT_MACHINE变量定义编译过程中使用的配置文件即xx_defconfig(这文件新增在uboot/configs里,相当于kernel的.cfg,不是.conf),采用make xx_defconfig命令(不是menuconfig)配置U-Boot,在hqtama_defconfig中定义CONFIG_TARGET_TAMA=y。在u-boot/arch/arm/Kconfig文件中新增:config TARGET_TAMA ..,source "board/hua/Kconfig",添加u-boot/board/hua文件夹里有`Kconfig文件`(if TARGET_TAMA ..,config SYS_BOARD  default "ast-g5"  【配置宏用ast-g5】)和`MAINTAINERS文件`(include/configs/hqtama.h,configs/hqtama_defconfig)。# 2.添加uboot硬件平台头文件
mx6ullevk.h(类似hqtama.h定义的宏给u-boot/board里ast-g5.c或u-boot/driver里aspeednic.c用),某些宏定义在mx6_common.h中,CONFIG_BOOTCOMMAND,CONFIG_NET_RANDOM_ETHADDR(随机分配的ETH MAC Address)。
// 内核为了兼容适配不同的平台,在内核源码中使用了大量的宏定义:
#ifdef CONFIG_ARMvoid arm_init(void);
#elsevoid x86_init(void);
#endif

在内核源码目录下敲make menuconfig命令,会弹出内核菜单供我们配置选择:背后的机制是make通过mconf工具解析分布在内核源码各个目录下的kconfig文件来生成配置菜单。用户可以通过选择某些模块直接编译进内核,或编译成一个单独的KO模块,或不编译进内核,配置的结果会保存在内核源码顶层目录的 .config文件如下:

CONFIG_ARM=y
CONFIG_USB=m

编译工具会根据这个.config文件来编译内核:make编译工具调用syncconfig的目标规则,将.config作为输入文件,生成两个重要的文件:参考【net1】第6章节。

include/config/auto.conf  // 里面内容和上面 .config一样,内核源码顶层Makefile中会包含auto.conf 如drivers/usb/Makefile里obj-$(CONFIG _USB) += usb.o
include/generared/autoconf.h  // 将内核配置结果转换成C语言宏定义, #define CONFIG_ARM 1

2.3 内核添加驱动:单独编译devtool build linux-aspeed

# bb中添加工具pciutils:dts添加设备生成节点,驱动添加如下: 
drivers/pci/controller/Kconfig图形界面添加:config PCIE_ASPEED
drivers/pci/controller/Makefile: obj-$(CONFIG_PCIE_ASPEED) += pcie-aspeed.o aspeed-h2x.o # 移植drivers/pci/controller/pcie-aspeed.c,打开CONFIG_PCIE_ASPEED=y
// linux-aspeed/drivers/char/hello/: 3个文件
// hello.c
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
static int __init init_hello( void )
{printk("this is my first driver module:    Hello world!\n");return 0;//必须返回0
}
static void __exit exit_hello( void )
{printk("this is my first driver module:    Goodbey world!\n");
}
module_init(init_hello);
module_exit(exit_hello);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("123");// Kconfig
config HELLOtristate 'Create a my hello module'default yhelpThis is a module to print Hello World!// Makefile
obj-$(CONFIG_HELLO) += hello.o
// 修改linux-aspeed/drivers/char目录下的Kconfig文件,在尾部的endmenu之前添加:
source "drivers/char/hello/Kconfig"
// 修改linux-aspeed/drivers/char目录下的Makefile文件,在尾部添加以下:注意后面有个 / 符号
obj-$(CONFIG_HELLO) += hello/

最后source,bitbake -f linux-aspeed -c menuconfig(要sudo权限弹出下面),在Device Drivers->Character devices中找到Create a my hello module选项勾上,保存退出。
在这里插入图片描述
如下方式就不用上面Kconfig的menuconfig,=y的话lsmod看不到。
在这里插入图片描述
在这里插入图片描述

# tmp目录会保留.o中间文件
MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "\kernel-module-i2c-dev-sysfs     \kernel-module-cpld              \"
CONFIG_MODULES=y

在这里插入图片描述

3.分区:flash没有利用率,启动后就不用flash了,bmc芯片运存2G

启动过程出现如下要删除flash@1,uboot的CONFIG_SECUREBOOT(打开校验功能校验uboot,kernel,romfs数据合法性,并输出签名后的build/tmp/deploy/images/s_u-uboot-spl.bin文件)=n。
在这里插入图片描述
如下flash@0代表一整块flash,label不写默认显示"1e620000.spi.0"。
在这里插入图片描述

# mdt子系统:mtd0(字符设备用于底层擦写)/mtdblock0(块设备挂载)/mtd0ro(只读保护)都指向同一个物理闪存分区
# df -T -ah(系统挂载使用的设备,不用看包含tmpfs) ,cat /etc/fstab也可查文件系统。 如下分区4和5被挂载目录,其他分区未挂载。
/dev/mtdblock4(挂载用block块设备) squashfs      22.1M    22.1M       0   100% /run/initramfs/ro
/dev/mtdblock5                  jffs2(文件系统) 32.0M     1.1M   30.9M     3% /run/initramfs/rw# fdisk -l :查看系统真实存在的设备,和lsblk一样可查看分区。
# cat /proc/partition :查看系统已经识别的设备。
# blkid :当前系统用的哪个盘`文件系统`(可看到sonic在/dev/sda,bmc识别不到/dev/sda)。
# smartctl -a /dev/sdb :查看磁盘信息
# fdisk(或gdisk ) /dev/sda :(d,4)删除sda4分区,(n【new】,4,+408G)新建408G的sda4,(w)保存退出。
# mkfs.ext4 /dev/sda4 : 格式化并建文件系统,后面可进行mount挂载。

在这里插入图片描述

3.1 EMMC:emmc reset pin连到BMC gpio

&emmc_controller{status = "okay";
};
&emmc {non-removable;bus-width = <4>;max-frequency = <52000000>;
};

在这里插入图片描述

root@0000000000000000:/usr/share/fanmgnt# mkdir /run/initramfs/rw/cow/usr -p;
root@0000000000000000:/usr/share/fanmgnt# mkdir /run/initramfs/rw/work/usr -p;
root@0000000000000000:/usr/share/fanmgnt# mount -t overlay -o lowerdir=/usr,upperdir=/run/initramfs/rw/cow/usr,workdir=/run/initramfs/rw/work/usr olusr /usr;
root@0000000000000000:/usr/share/fanmgnt# 
root@0000000000000000:/usr/share/fanmgnt# mount
dev on /dev type devtmpfs (rw,relatime,size=457952k,nr_inodes=114488,mode=755)
sys on /sys type sysfs (rw,relatime)
proc on /proc type proc (rw,relatime)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
/dev/mtdblock4 on / type squashfs (ro,relatime,errors=continue)
/dev/mtdblock5 on /run/initramfs/rw type jffs2 (rw,relatime)
/dev/mtdblock12 on /run/initramfs/bakrsync type jffs2 (rw,relatime)
oletc on /etc type overlay (rw,relatime,lowerdir=/root/etc,upperdir=run/initramfs/rw/cow/etc,workdir=run/initramfs/rw/work/etc)
olvar on /var type overlay (rw,relatime,lowerdir=/root/var,upperdir=run/initramfs/rw/cow/var,workdir=run/initramfs/rw/work/var)
olhome on /home type overlay (rw,relatime,lowerdir=/root/home,upperdir=run/initramfs/rw/cow/home,workdir=run/initramfs/rw/work/home)
/dev/mtdblock6 on /var/log type jffs2 (rw,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620,ptmxmode=666)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,size=4096k,nr_inodes=1024,mode=755)
cgroup2 on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,nosuid,nodev,noexec,relatime)
tracefs on /sys/kernel/tracing type tracefs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,nr_inodes=1048576)
configfs on /sys/kernel/config type configfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /var/volatile type tmpfs (rw,relatime)
overlay on /srv type overlay (rw,relatime,lowerdir=/srv,upperdir=/var/volatile/srv,workdir=/var/volatile/.srv-work)
tracefs on /sys/kernel/debug/tracing type tracefs (rw,nosuid,nodev,noexec,relatime)
olusr on /usr type overlay (rw,relatime,lowerdir=/usr,upperdir=/run/initramfs/rw/cow/usr,workdir=/run/initramfs/rw/work/usr)
olusr on /usr type overlay (rw,relatime,lowerdir=/usr,upperdir=/run/initramfs/rw/cow/usr,workdir=/run/initramfs/rw/work/usr)
root@0000000000000000:/usr/share/fanmgnt# cd
root@0000000000000000:~# cd /usr/share/
root@0000000000000000:/usr/share# ls
adcmgnt                       cpusensor-mgnt                flash-journal-dump            metricreports                 phosphor-software-manager
aspeed-app                    cracklib                      flat-net-manage               misc                          polkit-1
autosensors                   crashdump                     hw-monitor                    network                       psumgnt
avahi                         dbus-1                        info                          nic                           smartnic-flatmgnt
bash-completion               dbus-timeout-monitor          ipmbbridge                    node-manager-common           storage-mgnt
bmc-func-misc                 dict                          ipmi-providers                onekeylog                     telemetry
bmc-time-manager              dreport.d                     ipmitool                      phosphor-certificate-manager  udhcpc
boardtype-info                entity-manager                lsw-monitor                   phosphor-ipmi-host            www
ca-certificates               factory                       man                           phosphor-logging              x86-power-control
cpumem                        fanmgnt                       mctp                          phosphor-pid-control          zoneinfo
root@0000000000000000:/usr/share# touch tt
root@0000000000000000:/usr/share# cd fanmgnt/
root@0000000000000000:/usr/share/fanmgnt# ls
FanDualRotor.json        FanDualRotorPlus.json    FanI2CConf.json          FanSingleRotor.json      FanSingleRotorPlus.json
root@0000000000000000:/usr/share/fanmgnt# touch gg
# mount /dev/mmcblk0p1 /overlay ,  mount /dev/mmcblk0p2 to /var/log
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
DEV="/dev/mmcblk0"   # /dev/mmcblk1是第二个整块emmc设备,打开CONFIG_MMC相关,自动rescan出
FORMAT_FLAG="/mnt/data/format"
format_fs() {mkfs.ext4 $DEV << EOF   #执行这行命令自动按下y
y
EOF
}
format_emmc() {if [ -f "$FORMAT_FLAG" ]; thenrm "$FORMAT_FLAG" > /dev/nullformat_fsfi
}
parted_emmc() {if [ -b $DEV ]; then  #文件测试运算符-b用于检测文件是否是普通文件,是则返回trueif [ "$(parted $DEV p | grep -c primary)" -eq 2 ]; thenecho "EMMC devices is already been partitioned ......"elseecho "Parted EMMC devices ......"logger -t "mount_data1.sh" "Parted EMMC devices ......"parted -s $DEV mklabel msdosparted -s $DEV mkpart primary 0 4Gparted -s $DEV mkpart primary 4G 100%parted $DEV pfielseecho "Failed to find EMMC disk ......"exit 1fi
}
format_emmc() {if [ "$format_flag" = 1 ]; thencase $obj in   #obj="$1"configuration)logger -p crit -t "$prog" "Excute $prog command to clear system configuration"rm -rf /overlay/rw/*;;all)logger -p crit -t "$prog" "Excute $prog command to clear all system data"touch "$FORMAT_FLAG" || (echo "touch $FORMAT_FLAG fail !" && exit 1);;*)usage;;esacfisyncecho "reboot after 10S"sleep 10reboot
}
confirm_prompt() {case $obj inconfiguration)read -r -p $'This operaion will restore system configurations.\x0aPlease confirm. [Y/N] ' input;;all)read -r -p $'This operaion will format emmc and discard all system configurations.\x0aPlease confirm. [Y/N] ' input;;*)usage;;esaccase $input in[yY][eE][sS] | [yY])echo "Start to perform restore default command."format_flag=1;;[nN][oO] | [nN])echo "Abort execution and exit."exit 1;;*)echo "Invalid input..."exit 1;;esac
}PART2="/dev/mmcblk0p2"
PART2_MOUNT_POINT="/var/volatile/log/"
umount_dev() {pids=$(fuser -m $PART2_MOUNT_POINT)nums=$(echo $pids | awk -F ' ' '{print NF}')for((i=1;i<=$nums;i++));dopid=$(echo $pids | awk -F ' ' '{print $'$i'}')kill -9 "$pid"doneumount $PART2  || (echo "umount $PART2 fail !" && exit 1)
}
# fuser -m /var/volatile/log/
4671 
# umount /dev/mmcblk0p2    
umount: /var/volatile/log: target is busy.
# umount -lf /dev/mmcblk0p2
# mount /dev/mmcblk0p1 /var/log/
# blkid /dev/mmcblk0 | grep ext4
/dev/mmcblk0p1: UUID="c41280ba-4eb5-442d-987b-44781f31ce1b" TYPE="ext4" PARTUUID="5e09c2ea-01"
http://www.xdnf.cn/news/1739.html

相关文章:

  • NVIDIA自动驾驶安全与技术读后感
  • 轻松完成视频创作,在线视频编辑器,无需下载软件,功能多样实用!
  • 【国产化之路】VPX-3U :基于D2000 /FT2000的硬件架构到操作系统兼容
  • postgres 导出导入(基于数据库,模式,表)
  • 优先级队列和仿函数的讲解(底层实现)
  • AWS 中国区 CloudFront SSL 证书到期更换实战指南
  • Missashe考研日记-day26
  • c++内存分布
  • 黑马点评--图形化界面连接redis
  • 【刷题】第三弹——二叉树篇(上)
  • 探寻健康密码:养生从日常细节开始
  • 10天学会嵌入式技术之51单片机-day-6
  • 一道有趣的xxe过滤题(html实体化绕过)
  • QSPI flash xip模式运行
  • 树型结构(知识点梳理及例题精讲)
  • 京东商品详情API接口调用技术指南‌
  • OCP证书介绍
  • 小白自学python第二天
  • kubernetes》》k8s》》Heml
  • 深入浅出 Python 协程:从异步基础到开发测试工具的实践指南
  • Linux-01
  • 如何使用 Apache 配置用户主页 ?
  • 如何检测Python项目哪些依赖库没有使用
  • 嵌入模型(Embedding Models)原理详解:从Word2Vec到BERT的技术演进
  • Odoo 中文版安装详解
  • vue3+element-push 实现input框粘贴图片或文本,图片上传。
  • 从 Java 到 Kotlin:在现有项目中迁移的最佳实践!
  • 区间问题大纲(贪心)
  • Linux 基础命令入门指南
  • 240424 leetcode exercises II