解释一下 CP= for file in ${COMMON_LIBEXT_HOME}/*; do CP=${CP}:$file; done for file in ${COMMON_LIB_HOME}/*; do CP=${CP}:$file; done
时间: 2023-02-28 08:38:04 浏览: 160
这段代码是一个 shell 脚本,它的作用是将多个文件夹中的文件的路径拼接起来,最终将它们的路径保存在环境变量 CP 中。
具体来说,它会首先遍历文件夹 "${COMMON_LIBEXT_HOME}" 中的所有文件,并将它们的路径拼接到环境变量 CP 的末尾,拼接的格式是 "${CP}:$file",其中 "$file" 是当前遍历到的文件的路径。
接着它再遍历文件夹 "${COMMON_LIB_HOME}" 中的所有文件,并将它们的路径拼接到环境变量 CP 的末尾,与上面类似。
最终,环境变量 CP 中的值就是两个文件夹中所有文件的路径,每个文件路径之间用 ":" 隔开。
相关问题
这是没编到badblocks吧rm -rf /home/bba/projects/nvr/repo_reconstruct/torchlight/staging_dir/target-arm-openwrt-linux-uclibcgnueabihf/root-mstar/tmp-libext2fs touch /home/bba/projects/nvr/repo_reconstruct/torchlight/staging_dir/target-arm-openwrt-linux-uclibcgnueabihf/root-mstar/stamp/.libext2fs_installed WARNING: skipping tune2fs -- package not selected WARNING: skipping resize2fs -- package not selected WARNING: skipping badblocks -- package not selected WARNING: skipping dumpe2fs -- package not selected WARNING: skipping e2freefrag -- package not selected WARNING: skipping filefrag -- package not selected WARNING: skipping debugfs -- package not selected WARNING: skipping chattr -- package not selected WARNING: skipping lsattr -- package not selected make[2]: Leaving directory `/home/bba/projects/nvr/repo_reconstruct/tp_package/u_packages/e2fsprogs' make[1]: Leaving directory `/home/bba/projects/nvr/repo_reconstruct/torchlight' rm -rf /home/bba/projects/nvr/repo_reconstruct/torchlight/staging_dir/target-arm-openwrt-linux-uclibcgnueabihf/root-mstar/tmp-libext2fs touch /home/bba/projects/nvr/repo_reconstruct/torchlight/staging_dir/target-arm-openwrt-linux-uclibcgnueabihf/root-mstar/stamp/.libext2fs_installed WARNING: skipping tune2fs -- package not selected WARNING: skipping resize2fs -- package not selected WARNING: skipping badblocks -- package not selected WARNING: skipping dumpe2fs -- package not selected WARNING: skipping e2freefrag -- package not selected WARNING: skipping filefrag -- package not selected WARNING: skipping debugfs -- package not selected WARNING: skipping chattr -- package not selected WARNING: skipping lsattr -- package not selected make[2]: Leaving directory `/home/bba/projects/nvr/repo_reconstruct/tp_package/u_packages/e2fsprogs' make[1]: Leaving directory `/home/bba/projects/nvr/repo_reconstruct/torchlight'
<think>根据用户提供的编译输出,出现了多个警告信息,如“WARNING: skipping badblocks -- package not selected”,这表明在编译过程中badblocks工具没有被选中进行编译。因此,用户的问题是如何在OpenWrt源码编译中确保badblocks被正确编译。
解决方案:
1. 检查e2fsprogs的配置:在OpenWrt中,badblocks是e2fsprogs包的一部分。需要确保在编译配置中已经启用了e2fsprogs,并且选中了badblocks。
2. 通过menuconfig配置:在OpenWrt源码目录下,运行`make menuconfig`,然后导航到`Utilities` -> `Filesystem` -> `e2fsprogs`,确保e2fsprogs被选中(按`y`键选择为内置),然后进入其子菜单,确保`badblocks`被选中。
3. 如果e2fsprogs已经选中,但badblocks没有被选中,则需要进入e2fsprogs的子菜单,选中badblocks(通常有一个选项如“Compile badblocks”)。
4. 重新编译:配置完成后,保存退出,然后重新编译e2fsprogs包:
```bash
make package/feeds/packages/e2fsprogs/clean
make package/feeds/packages/e2fsprogs/compile V=s
```
或者,如果e2fsprogs在另一个feed中,请调整路径。根据用户的输出,路径可能是`package/u_packages/e2fsprogs`,所以命令可能是:
```bash
make package/u_packages/e2fsprogs/{clean,compile} V=s
```
5. 如果上述方法无效,可以尝试直接修改e2fsprogs的Makefile,强制编译badblocks。在e2fsprogs的Makefile中,通常有类似如下的配置:
```makefile
define Package/e2fsprogs/Default
SECTION:=utils
CATEGORY:=Utilities
TITLE:=Ext2/3/4 filesystem utilities
URL:=http://e2fsprogs.sourceforge.net/
SUBMENU:=Filesystem
endef
define Package/e2fsprogs-badblocks
$(call Package/e2fsprogs/Default)
TITLE:=badblocks utility for e2fsprogs
DEPENDS:=+e2fsprogs
endef
define Package/e2fsprogs-badblocks/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/misc/badblocks $(1)/usr/sbin/
endef
```
确保在Makefile中有类似上面定义e2fsprogs-badblocks的部分,并且该包被选中(在menuconfig中会出现)。如果没有,需要添加并确保在编译配置中选中。
6. 如果用户只需要badblocks,而不需要整个e2fsprogs,可以单独编译badblocks。但是,在OpenWrt中,通常badblocks是作为e2fsprogs的一个子包存在的。因此,确保在menuconfig中选中了`e2fsprogs-badblocks`(或类似名称的包)。
7. 编译完成后,在编译输出目录(通常是`bin/packages/`下的相应架构目录)中找到生成的ipk包,其中包含badblocks。或者,可以直接从编译目录中提取badblocks二进制文件,路径为`build_dir/target-*/e2fsprogs-*/misc/badblocks`。
8. 如果用户希望生成静态链接的badblocks,可以在e2fsprogs的Makefile中的配置参数中添加`--enable-static`,如:
```makefile
CONFIGURE_ARGS += --enable-static
```
然后重新编译。
由于用户之前编译时出现了“skipping badblocks”的警告,所以重点在于确保badblocks在配置中被选中。
注意:用户提供的编译命令中使用了`PR_NAME=2016pv2`,这可能是一个特定的环境变量或目标,请确保在menuconfig中配置时也选择了正确的目标(Target System和Target Profile)。
根据用户提供的编译输出路径,用户的OpenWrt源码路径为`/home/bba/projects/nvr/repo_reconstruct/torchlight`,因此menuconfig命令应在该目录下执行。
步骤总结:
- 进入OpenWrt源码目录(/home/bba/projects/nvr/repo_reconstruct/torchlight)
- 运行`make menuconfig`
- 确保在Utilities -> Filesystem -> e2fsprogs中选中badblocks
- 保存配置,然后重新编译e2fsprogs包
如果问题依旧,可能需要检查编译日志,查看为何badblocks被跳过。
现在,根据用户的问题和上述回答,提出相关问题。</think>根据您提供的编译输出,出现"WARNING: skipping badblocks -- package not selected"警告,表明在编译过程中badblocks工具未被正确包含。以下是解决方案:
### 解决方案步骤
1. **启用badblocks编译选项**
在OpenWrt的`make menuconfig`中启用badblocks:
```bash
cd /home/bba/projects/nvr/repo_reconstruct/torchlight
make menuconfig
```
- 导航路径:`Utilities → Filesystem → e2fsprogs`
- 选中`< > badblocks`(按空格键标记为`<*> badblocks`)
- 保存配置后退出
2. **强制重新编译e2fsprogs**
```bash
make package/u_packages/e2fsprogs/{clean,compile} V=s
```
或完整编译:
```bash
make PR_NAME=2016pv2 package/u_packages/e2fsprogs/{clean,compile} V=s
```
3. **验证编译结果**
编译成功后,二进制文件将出现在:
```bash
build_dir/target-*/e2fsprogs-*/misc/badblocks
```
使用`file badblocks`确认文件类型(应为ARM ELF)
### 关键问题分析
1. **包未选择**:日志显示多个工具被跳过,说明menuconfig中未启用这些子组件
2. **路径问题**:您的编译路径为`package/u_packages/e2fsprogs`而非标准路径,需保持路径一致
3. **依赖处理**:确保`libext2fs`已正确安装(日志显示其安装完成)
### 备选方案
若仍失败,可直接从e2fsprogs官网编译:
```bash
wget https://mirrors.edge.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v1.47.0/e2fsprogs-1.47.0.tar.gz
tar zxvf e2fsprogs-*.tar.gz
cd e2fsprogs-*/
./configure --host=arm-openwrt-linux-uclibcgnueabihf
make
# 生成的二进制在 misc/badblocks
```
./mkfs.ext4: error while loading shared libraries: libext2fs.so.2: cannot open shared object file: No such file or directory
当遇到 "./mkfs.ext4: error while loading shared libraries: libext2fs.so.2: cannot open shared object file: No such file or directory" 这样的错误时,它意味着你在尝试运行 `mkfs.ext4` 工具时,系统找不到名为 `libext2fs.so.2` 的动态链接库文件。这个错误通常发生在以下情况:
1. 缺少必要的库文件:可能是你的系统中缺少 ext2 或 ext4 文件系统的依赖库,这通常发生在从源码安装软件或者更新系统后新功能缺失的时候。
2. 库文件路径未设置或配置错误:系统无法找到指定的库文件路径,你需要检查环境变量 `LD_LIBRARY_PATH` 确保包含有该库文件所在的目录。
3. 安装问题:如果你是从第三方包管理器安装的 mkfs.ext4,确保安装完整且正确。
要解决这个问题,你可以尝试以下步骤:
1. 更新系统库:使用包管理器(如 apt、yum 或 brew)搜索并安装 `libext2fs-dev` 或者 `libext4-devel` 类似的库开发套件。
2. 检查并添加库路径:如果安装了库文件但系统仍找不到,可能需要手动添加到 `LD_LIBRARY_PATH` 或者修改系统配置使其生效。
3. 重新编译或安装:如果是软件源码安装的情况,可能需要重新编译或者按照文档中的说明正确安装。
阅读全文
相关推荐
















