mkfs.ubifs -c 计算工具

mkfs.ubifs -c 输入的logical erase block count,是指除掉ubi文件系统自身管理和坏块处理后的逻辑可擦除最大块数。

参考信息如下:

logical erase block count 计算工具,实现代码如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os
import xml.sax
import sys
import time
import getopt
import math

class ANSI:
    RED = '\033[31m'
    RESET = '\033[m'

def print_red(text):
    print(ANSI.RED + text + ANSI.RESET)
def contains_chars(s,chars):
    for c in chars:
        if c in s:
            return True
    return False

def trams_str_digital(text):
    tramsNumber = 0
    tramstr = text
    if contains_chars(tramstr,'M'):
        valueStr = tramstr.replace('M','')
        tramsNumber = int(valueStr) * 1024 * 1024
    elif contains_chars(tramstr,'m'):
        valueStr = tramstr.replace('m','')
        tramsNumber = int(valueStr) * 1024 * 1024
    elif contains_chars(tramstr,'K'):
        valueStr = tramstr.replace('K','')
        tramsNumber = int(valueStr) * 1024
    elif contains_chars(tramstr,'k'):
        valueStr = tramstr.replace('k','')
        tramsNumber = int(valueStr) * 1024
    else:
        tramsNumber = int(tramstr)
    return tramsNumber

def show_help():
    print("ubi_lebc.py -e <logical erase block size> -s <mtd volume total size>")
    print("eg:ubi_lebc.py -e 124K -s 30M")

'''
input:mtd volume total size
input:logical erase block size
input:Physical Erase Block size
out:maximum logical erase block count
'''
if __name__ == "__main__":
    peb_size = 128 * 1024
    leb_size = 124 * 1024
    lebc_max = 0

    mtd_total_size=0
    try:
        opts, args = getopt.getopt(sys.argv[1:],"hb:e:s:",['help',"block_size=","erase_size=","size="])
        for opt, arg in opts:
            if opt in ('-b',"--block_size="):
                peb_size = trams_str_digital(arg)
            elif opt in ('-e',"--erase_size="):
                leb_size = trams_str_digital(arg)
            elif opt in ('-s',"--size="):
                mtd_total_size = trams_str_digital(arg)
            elif opt in ("-h","--help"):
                show_help()
                sys.exit(0)
            else:
                show_help()
                sys.exit(0)
    except getopt.GetoptError as e:
        print(sys.argv)
        print(e.msg)
        print(e.opt)
        show_help()
        sys.exit(0)

    if mtd_total_size == 0:
        show_help()
        sys.exit(0)

    block_total_number = mtd_total_size//peb_size
    bad_block_max = math.ceil(block_total_number * 0.02)
    if(bad_block_max < 2):
        bad_block_max = 2

    over_head = peb_size - leb_size
    over_head_total_size = over_head * (block_total_number - bad_block_max - 4)
    loss_total_size = (bad_block_max + 4) * peb_size
    overhead_manager_size = over_head_total_size + loss_total_size
    user_data_size = mtd_total_size - overhead_manager_size
    lebc_max = int(user_data_size // leb_size)
    #print("hysical Erase Block size:"+ "%dK" % (peb_size/1024) + " logical erase block size:" + "%dK" % (leb_size/1024) + " out logical erase block count:" + "%d" % lebc_max)
    print(lebc_max)
    sys.exit(0)

python ubi_lebc.py -b 128K -e 124K -s 40M
运行结果为:309

相关推荐

  1. 计算鞍点(C++)

    2024-06-08 23:32:01       61 阅读
  2. c++计算岛屿数量

    2024-06-08 23:32:01       49 阅读
  3. c#计算闰年

    2024-06-08 23:32:01       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-08 23:32:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-08 23:32:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-08 23:32:01       87 阅读
  4. Python语言-面向对象

    2024-06-08 23:32:01       96 阅读

热门阅读

  1. 计算机网络期末知识点(第六章)

    2024-06-08 23:32:01       29 阅读
  2. Ubuntu 20.04的安装过程

    2024-06-08 23:32:01       39 阅读
  3. 【Python入门与进阶】Anaconda包管理与所有指令

    2024-06-08 23:32:01       32 阅读
  4. python怎么倒包:深入探索Python中的逆向导入技术

    2024-06-08 23:32:01       35 阅读
  5. ffmpeg解码播放

    2024-06-08 23:32:01       23 阅读
  6. 如何轻松修改Windows远程连接的端口号

    2024-06-08 23:32:01       35 阅读
  7. Oracle数据库面试题-4

    2024-06-08 23:32:01       25 阅读