15AH, San Francisco

California, United States.

Send Your Mail At:

tianyingkejishe@sina.cn

Working Hours

Mon-Sat: 9.30am To 7.00pm

归档标题

Autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et dolore feugait.

月度归档 7月 24, 2023

【shell】脚本实现字符串操作

1、获取字符串长度

abc="huihuiuhiihu"
echo ${#abc}

利用#号实现字符串长度统计

2、截取字符串内容

${hui:5}

利用:加数字的形式截取固定长度字符串内容

3、实现固定长度字符串拼接

hui="sssdsdsdsjkdhskhdksd"
abc="12346"
kji=${abc}${hui:${#abc}}

echo $kji

【Lx2160】双系统启动设计

一、启动分析

uboot启动后会通过检测lx2160ardb_boot.scr配置文件,实现默认启动引导。此系列芯片引导方式一样。

打开./configs/board/lx2160ardb_rev2/manifest文件分析

vim ./configs/board/lx2160ardb_rev2/manifest
distroboot=\
'env exists dtb || setenv dtb fsl-lx2160a-rdb.dtb;'\
'env exists kernel_image || setenv kernel_image Image;'\
'env exists devpart_boot || setenv devpart_boot 2;'\
'env exists devpart_root || setenv devpart_root 4;'\
'part uuid $devtype $devnum:$devpart_root partuuidr;'\
'setenv bootargs console=ttyAMA0,115200 earlycon=pl011,mmio32,0x21c0000 root=PARTUUID=$partuuidr rw rootwait pci=pcie_bus_perf $othbootargs;'\
'load $devtype $devnum:$devpart_boot $kernel_addr_r $kernel_image;'\
'load $devtype $devnum:$devpart_boot $fdt_addr_r $dtb;'\
'env exists secureboot && echo validating secureboot && run secureboot_validate;'\
'booti $kernel_addr_r - $fdt_addr_r'


distroboot_ima=\
'env exists dtb || setenv dtb fsl-lx2160a-rdb.dtb;'\
'env exists kernel_image || setenv kernel_image Image;'\
'env exists devpart_boot || setenv devpart_boot 2;'\
'env exists devpart_root || setenv devpart_root 4;'\
'part uuid $devtype $devnum:$devpart_root partuuidr;'\
'load $devtype $devnum:$devpart_boot $kernel_addr_r $kernel_image;'\
'load $devtype $devnum:$devpart_boot $fdt_addr_r $dtb;'\
'setenv initramfs_addr_r 0xb0000000; setenv initramfsheader_addr_r 0x80300000;'\
'load $devtype $devnum:$devpart_boot $initramfs_addr_r initramfs.img;'\
'env exists secureboot && echo validating secureboot && run secureboot_validate;'\
'setenv bootargs console=ttyAMA0,115200 earlycon=pl011,mmio32,0x21c0000 root=PARTUUID=$partuuidr rw rootwait pci=pcie_bus_perf $othbootargs;'\
'booti $kernel_addr_r $initramfs_addr_r $fdt_addr_r'

通过分析配置文件,发现Linux和rootfs的引导取决于devpart_boot和devpart_root两个变量,所以通过修改这两个变量值,便可动态实现,分区引导切换。

二、手动引导切换

进入uboot命令行

setenv devpart_boot  2
setenv devpart_root  4
saveenv

2和4代表分区号

三、动态引导切换

如实现动态引导切换需要通过fw_env工具实现。请参照《fw-env开启文件系统设置uboot环境变量》http://www.recologypower.com:9080/?p=1247

四、分区处理

flex-installer -i pf -p 6P=200M:1536M:128M:13G:1536M:-1 -d /dev/sdx

五、烧录程序

【lx2160】fw-env开启文件系统设置uboot环境变量

1、进入uboot修改源码

vim include/configs/lx2160a_common.h

最后增加

/*Begin:add by zhaobaoxing for env*/
#define CONFIG_SYS_MMC_ENV_DEV          0
#define CONFIG_ENV_SIZE                 0x2000          /* 8KB */
#define CONFIG_ENV_SECT_SIZE            0x20000
#define CONFIG_ENV_OFFSET               0x500000
#define CONFIG_ENV_ADDR                 (CONFIG_SYS_FLASH_BASE + CONFIG_ENV_OFFSET)
/*End:add by zhaobaoxing for env*/

2、修改fw_env.config文件

# Configuration file for fw_(printenv/setenv) utility.
# Up to two entries are valid, in this case the redundant
# environment sector is assumed present.
# Notice, that the "Number of sectors" is not required on NOR and SPI-dataflash.
# Futhermore, if the Flash sector size is omitted, this value is assumed to
# be the same as the Environment size, which is valid for NOR and SPI-dataflash
# Device offset must be prefixed with 0x to be parsed as a hexadecimal value.

# NOR example
# MTD device name       Device offset   Env. size       Flash sector size       Number of sectors
#/dev/mtd1              0x0000          0x4000          0x4000
#/dev/mtd2              0x0000          0x4000          0x4000

# MTD SPI-dataflash example
# MTD device name       Device offset   Env. size       Flash sector size       Number of sectors
#/dev/mtd5              0x4200          0x4200
#/dev/mtd6              0x4200          0x4200

# NAND example
#/dev/mtd0              0x4000          0x4000          0x20000                 2

# On a block device a negative offset is treated as a backwards offset from the
# end of the device/partition, rather than a forwards offset from the start.

# Block device example
/dev/mmcblk0            0x500000                0x2000
#/dev/mmcblk0           -0x20000        0x20000

# VFAT example
#/boot/uboot.env        0x0000          0x4000

# UBI volume
#/dev/ubi0_0            0x0             0x1f000         0x1f000
#/dev/ubi0_1            0x0             0x1f000         0x1f000

# UBI volume by name
#/dev/ubi0:env          0x0             0x1f000         0x1f000
#/dev/ubi0:env-redund   0x0             0x1f000         0x1f000
~