内核启动出现Partially written xxx block detected

本文探讨了ARM板启动过程中出现大量Partially written block警告的原因及解决方法。主要原因是yaffs2文件系统未能及时同步数据至NAND Flash。文章提供了两种解决方案:一是使用sync命令确保数据同步;二是修改yaffs2源码减少警告输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

arm板启动后出现大量的

Partially written block 53 detected

Partially written block 53 detected

Partially written block 53 detected

Partially written block 53 detected

Partially written block 53 detected

Partially written block 53 detected

Partially written block 53 detected

Partially written block 53 detected

Partially written block 53 detected

.......

.....

而且随着启动次数越来越多

 

原因:是yaffs2文件系统,在关闭之前,要将dirty数据写入nand flash,否则下一次开机yaffs2 scan的时候,就会发现这些block是Partially written 部分写入的,所以就会提示。是yaff2文件系统常见的错误

方法

1.解决办法就是,每次要关机之前,要去做一次:sync

让yaffs2将dirty的数据写入到nand flash里面。

但这个错误是可以积累的,

所以,随着不能正常sync而关机,会导致这些yaffs2的警告累积性地增加

 

2.修改fs/yaffs2/yaffs_guts.cstatic int yaffs_ScanBackwards(yaffs_Device * dev) 函数中


。。。。

        T(YAFFS_TRACE_ALWAYS,    /*YAFFS_TRACE_SCAN*/
        (TSTR("Partially written block %d detected" TENDSTR),
        blk));

。。。。

报错是由于YAFFS_TRACE_ALWAYS造成的。只要把它改成YAFFS_TRACE_SCAN 就OK了

 

 

但这肯定不是好办法,当然如果只是为了开发调试,只能自己去手动注释掉,也是可以的

有空可以研究下yaff2文件系统

<think>我们被要求解决Python中的ImportError: cannot import name 'xxx' from partially initialized module 'yyy'错误。根据引用,这个错误通常涉及循环依赖、初始化顺序错误或文件名冲突。我们将逐步分析并提供解决方案。 步骤1:理解错误 当模块yyy在初始化过程中(即还未完全加载)就尝试导入另一个模块(或自身)中的名称xxx时,会出现此错误。最常见的原因是循环导入:两个模块相互导入,或模块导入自身。 步骤2:检查循环导入 循环导入是主要原因。例如: module_a.py: from module_b import some_function def a_func(): some_function() module_b.py: from module_a import a_func def some_function(): a_func() 这里,module_a导入module_b,而module_b又导入module_a,形成循环。 步骤3:解决方案 根据引用[1][2][3],提供以下解决方案: 方案1:重构代码以避免循环导入 - 将相互导入的代码移到需要的地方(例如函数内部),而不是在模块顶部导入。 - 将公共依赖提取到第三个模块中。 方案2:设计接口模块 - 创建一个新的模块,将循环导入的两个模块都需要的内容放在这个新模块中。 方案3:重新组织代码结构 - 检查是否真的需要相互导入,考虑使用依赖注入或回调函数等方式解耦。 - 将导入语句放在函数或方法内部,这样在模块初始化时不会立即执行导入,从而避免循环。 方案4:检查文件名冲突 - 确保你的模块文件名没有与Python标准库或第三方库的模块同名。例如,如果你有一个名为`json.py`的文件,那么导入标准库的json模块时就会出错。 方案5:延迟导入 - 在函数内部导入,这样在模块初始化时不会发生导入,直到函数被调用时才导入。 步骤4:实例分析 引用[3]中提到了一个具体例子:导入`SummaryWriter`时出错,原因是循环导入。我们可以这样解决: 原代码(可能): from torch.utils.tensorboard import SummaryWriter 错误原因:可能是由于在模块的顶层导入,而该模块又间接导致了循环导入。 解决方案:将导入语句放在使用它的函数内部。 修改后: def my_function(): from torch.utils.tensorboard import SummaryWriter writer = SummaryWriter() 步骤5:总结 处理此类错误的关键是打破循环导入。通过重构代码、延迟导入或重新组织项目结构,可以解决大部分问题。 生成相关问题: 1. 如何检测Python项目中的循环导入? 2. 除了循环导入,还有哪些原因会导致ImportError? 3. 在大型项目中如何避免循环导入问题?</think>### Python ImportError: cannot import name 'xxx' from partially initialized module 解决方案 此错误通常由**循环导入**、**模块初始化顺序冲突**或**文件名冲突**引起。以下是系统化的解决方案: --- #### 1. **解决循环导入**(最常见原因) 当模块A导入模块B,同时模块B又导入模块A时形成循环依赖: ```python # 文件: module_a.py from module_b import func_b # 问题点:此时module_b尚未完全初始化 def func_a(): ... ``` **解决方案**: - **重构代码**:将相互依赖的代码提取到第三个模块中: ```python # 新文件: common.py def shared_func(): ... # module_a.py 和 module_b.py 分别导入 common.py ``` - **延迟导入**:在函数内部导入模块 ```python # 修改后: module_a.py def func_a(): from module_b import func_b # 使用时才导入 func_b() ``` --- #### 2. **处理初始化顺序问题** 当模块在初始化过程中(如全局变量计算)就尝试导入其他未完成初始化的模块: ```python # 文件: utils.py from config import SETTING # 此时config可能未初始化 CONSTANT = SETTING * 2 # 触发错误 ``` **解决方案**: - **动态加载配置**:改用函数封装初始化逻辑 ```python # 修改后: utils.py def get_constant(): from config import SETTING # 延迟导入 return SETTING * 2 ``` --- #### 3. **避免文件名冲突** 若自定义模块与标准库同名(如 `json.py`、`os.py`),会导致导入混乱: ```bash 项目结构 ├── json.py # 自定义模块 └── main.py ``` **解决方案**: - 重命名自定义模块(如 `my_json.py`) --- #### 4. **其他关键技巧** - **检查 `__init__.py`**:确保包初始化文件不包含循环导入逻辑 - **打印导入路径**:调试时添加 `print(sys.path)` 检查模块搜索路径 - **使用绝对导入**:在包内使用完整导入路径(`from package.sub import module`) - **虚拟环境检查**:确认未混用不同环境的包(如 `pip list` 检查) --- ### 典型场景示例 **问题代码**: ```python # main.py from analyzer import analyze_data # 报错 ImportError # analyzer.py from visualizer import plot_data # 依赖visualizer # visualizer.py from analyzer import raw_data # 反向依赖analyzer → 循环! ``` **修复方案**: 1. 创建 `data_utils.py` 存放 `raw_data` 2. `analyzer.py` 和 `visualizer.py` 分别导入 `data_utils.py` 3. 移除 `analyzer` 与 `visualizer` 的直接交叉引用 > 通过代码重构解耦模块,是解决此类问题的根本方法[^1][^2][^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值