Hikey 970安装系统出错 ./binaries/recovery-flash.sh: 第 11 行: cd: /home/wsb/桌面/Hikey: 没有那个文件或目录

本文记录了一次使用Hikey970Lebian系统刷写过程中的错误解决经历,作者在尝试刷写系统时遇到了无法加载指定路径的问题,经过多次尝试,最终发现将文件夹移至桌面可以解决此问题。

wsb@wsb-System-Product-Name:~/桌面/Hikey 970 Lebian/hikey970-lebian-9$ sudo ./binaries/recovery-flash.sh
[sudo] wsb 的密码:
./binaries/recovery-flash.sh: 第 11 行: cd: /home/wsb/桌面/Hikey: 没有那个文件或目录
sudo: /home/wsb/桌面/Hikey:找不到命令
Flashing ptable
error: cannot load ‘/home/wsb/桌面/Hikey’
error: cannot load ‘/home/wsb/桌面/Hikey’
error: cannot load ‘/home/wsb/桌面/Hikey’
error: cannot load ‘/home/wsb/桌面/Hikey’
error: cannot load ‘…/boot-hikey970.uefi.img’
Flashing rootfs takes over 3 mins, So please be patient…
error: cannot load ‘…/hikey970-lebian9.img’
装了还几次系统老是出错,不过装系统这一步还挺顺利,后来回来再重新装就出错了,看了半天,发现有这个文件夹,为什么还是找不到呢?
后来想了一下,是不是文件夹过多导致的,我只是猜测,结果把这个文件及移到桌面上之后就可以了,你也可以试一试。

<think>我们正在处理一个Kconfig配置警告:`choice value used outside its choice group`。这个警告通常发生在Kconfig配置中,当一个选项(symbol)被定义为某个choice的一部分,但又在choice之外被引用(例如通过`select`语句)时出现。 ### 问题分析 在Kconfig中,`choice`用于定义一组互斥的选项。用户只能选择其中一个。每个选项(即choice中的条目)是一个独立的配置项(config)。当我们在choice之外使用`select`语句直接选择某个choice条目时,就会导致这个警告。 例如: ```kconfig choice prompt "Select one option" default OPTION_A config OPTION_A bool "Option A" config OPTION_B bool "Option B" endchoice config FEATURE_X bool "Feature X" select OPTION_A # 这里会触发警告,因为OPTION_A是choice的一部分 ``` ### 解决方法 1. **避免直接select choice中的条目** 不要直接`select` choice中的条目,而应该通过选择该choice中的某个条目来间接影响。者,重新设计配置依赖关系。 2. **使用`select`作用于choice本身** 如果可能,将`select`作用于整个choice,而不是其中的某个条目。但注意,Kconfig并不允许直接`select`一个choice。 3. **将依赖项改为`depends on`** 如果某个配置项依赖于choice中的某个条目,应该使用`depends on`而不是`select`。 4. **重构配置项** 如果上述方法不可,可能需要重构Kconfig文件- 将choice中的条目设置为一个中间符号(symbol),然后在choice之外使用这个符号。 - 者将需要被外部引用的配置项移出choice。 ### 具体步骤示例 假设我们有如下配置,导致警告: ```kconfig choice prompt "Select one option" default OPTION_A config OPTION_A bool "Option A" config OPTION_B bool "Option B" endchoice config FEATURE_X bool "Feature X" select OPTION_A # 错误:直接select了choice中的条目 ``` **修改方法1:使用`depends on`代替`select`** 如果`FEATURE_X`要求`OPTION_A`被选择,我们可以改为: ```kconfig config FEATURE_X bool "Feature X" depends on OPTION_A # 这样当OPTION_A被选中时,FEATURE_X才能被选 ``` **修改方法2:重构choice** 如果`FEATURE_X`需要强制选择`OPTION_A`,我们可以将`OPTION_A`作为依赖条件,并通过配置逻辑确保当`FEATURE_X`被选中时,用户必须选择`OPTION_A`(比如通过菜单提示)。者,将`OPTION_A`拆分成一个独立的配置项,并在choice中引用它: ```kconfig config OPTION_A_STANDALONE bool "Option A standalone" choice prompt "Select one option" default OPTION_A config OPTION_A bool "Option A" if !OPTION_A_STANDALONE config OPTION_B bool "Option B" endchoice config FEATURE_X bool "Feature X" select OPTION_A_STANDALONE # 这样就不会有警告了 ``` 这样,`FEATURE_X`通过`select`一个不在choice中的独立配置项`OPTION_A_STANDALONE`,而`OPTION_A`在choice中则通过条件表达式(`if !OPTION_A_STANDALONE`)来避免同时出现两个`OPTION_A`。 ### 内核配置中的实际案例 在内核配置中,我们可能会遇到类似问题。例如,在编译HiKey970时出现的错误可能与配置依赖有关。虽然错误信息不同,但配置的正确性至关重要[^1]。 ### 总结 - 警告原因:在choice外部直接`select`了choice内部的条目。 - 解决思路:避免直接`select` choice条目,改用`depends on`重构配置项。 - 重构技巧:引入中间配置项,调整依赖关系。 §§相关问题§§ 1. 如何理解Linux内核Kconfig中的choice结构? 2. 在Kconfig中,`select`和`depends on`有什么区别? 3. 如何调试Linux内核配置错误? 4. Kconfig语法中如何定义条件表达式? [^1]: 引用中提到的HiKey970编译错误,可能与配置有关,但此处主要解决Kconfig警告问题。</think>### Kconfig "choice value used outside its choice group" 警告解决方法 这个警告表示您在Kconfig配置中错误地引用了`choice`组内的选项值。以下是详细解决步骤: #### 问题原因分析 在Kconfig语法中: 1. `choice`定义了一组**互斥选项**(只能选其一) 2. 组内选项(如`config OPTION_A`)**不应**在`choice`外部被直接引用 3. 违反此规则会导致编译警告和潜在错误[^2] #### 解决方法 **步骤1:识别违规引用** 在编译输出中查找类似警告: ``` warning: (FEATURE_X) selects OPTION_A which has unmet direct dependencies (CHOICE_GROUP) ``` **步骤2:修改Kconfig文件** 找到违规的`select`语句(通常在`choice`外部),例如: ```kconfig # 错误示例 config FEATURE_X bool "Advanced feature" select OPTION_A # ← 错误:直接引用了choice内的选项 ``` 修改为以下任一正确方式: **方案A:使用`depends on`代替`select`**(推荐) ```kconfig config FEATURE_X bool "Advanced feature" depends on OPTION_A # 正确:声明依赖关系 ``` **方案B:重构配置层次** ```kconfig choice prompt "Select mode" default OPTION_A config OPTION_A bool "Standard mode" config OPTION_B bool "Advanced mode" select FEATURE_X # 正确:在choice内部引用外部选项 endchoice config FEATURE_X bool "Extra features" depends on OPTION_B # 确保正确依赖 ``` **方案C:使用中间符号** ```kconfig config NEED_OPTION_A bool select OPTION_A if CHOICE_GROUP # 通过条件选择 config FEATURE_X select NEED_OPTION_A # 间接引用 ``` #### 验证方法 1.配置检查: ```bash make ARCH=arm64 olddefconfig # 对于ARM64架构 ``` 2. 确认警告消失 3. 检查`.config`文件是否生成正确选项 #### 典型错误场景对比 | 错误模式 | 正确模式 | 说明 | |----------|----------|------| | `select CHOICE_OPTION` | `depends on CHOICE_OPTION` | 依赖声明代替直接选择 | | 外部引用choice选项 | 在choice内部`select`外部选项 | 保持引用方向正确 | | 跨组选择 | 通过中间符号间接引用 | 避免破坏choice互斥性 | > **重要提示**:在修改Kconfig后,建议清理配置缓存: > `make clean && make mrproper`[^1]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值