10-openwrt-one调整rootfs_data卷,新增fit2、log、plugins等卷

固件镜像生成的时候没有设置rootfs_data卷,为啥内核启动后可以查到呢,这个卷的创建过程和挂载过程分析和调整,有便于我们重新创建我们自己想要的卷。

1、rootfs_data卷的创建过程

我们在使用ubinfo -a查看卷信息的时候,可以看到最后面多出了一个rootfs_data的卷,可是我们生成镜像的时候没有设置,说明是代码自动创建的。

root@OpenWrt:~# ubinfo /dev/ubi0 -N rootfs_data
Volume ID:   5 (on ubi0)
Type:        dynamic
Alignment:   1
Size:        1717 LEBs (218017792 bytes, 207.9 MiB)
State:       OK
Name:        rootfs_data
Character device major/minor: 251:6

rootfs_data卷其实是uboot建立的。

上面的章节我们分析过uboot如何启动kernel,其中还有一个流程就是uboot会自动创建rootfs_data卷,代码如下:

ubi_prepare_rootfs=
if ubi check rootfs_data ; then 

else 
    if env exists rootfs_data_max ; then 
        ubi create rootfs_data $rootfs_data_max dynamic || u
find /opt -name '*aarch64_cortex-a53*' -type d 2>/dev/null /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/build_dir/target-aarch64-openwrt-linux_musl/mtd-utils-2.1.2/ipkg-aarch64_cortex-a53 /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/build_dir/target-aarch64-openwrt-linux_musl/8021xd/ipkg-aarch64_cortex-a53 /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/build_dir/target-aarch64-openwrt-linux_musl/lua-5.1.5/ipkg-aarch64_cortex-a53 /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/build_dir/target-aarch64-openwrt-linux_musl/mii_mgr/ipkg-aarch64_cortex-a53 /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/build_dir/target-aarch64-openwrt-linux_musl/regs/ipkg-aarch64_cortex-a53 /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/build_dir/target-aarch64-openwrt-linux_musl/libnl-tiny-2020-08-05-c291088f/ipkg-aarch64_cortex-a53 /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/build_dir/target-aarch64-openwrt-linux_musl/wireless_tools.29/ipkg-aarch64_cortex-a53 /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/build_dir/target-aarch64-openwrt-linux_musl/toolchain/ipkg-aarch64_cortex-a53 /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/build_dir/target-aarch64-openwrt-linux_musl/util-linux-2.36.1/ipkg-aarch64_cortex-a53 /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/build_dir/target-aarch64-openwrt-linux_musl/ncurses-6.2/ipkg-aarch64_cortex-a53 /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/build_dir/target-aarch64-openwrt-linux_musl/switch/ipkg-aarch64_cortex-a53 /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/build_dir/target-aarch64-openwrt-linux_musl/linux-mediatek_mt7981/conninfra/ipkg-aarch64_cortex-a53 /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/build_dir/target-aarch64-openwrt-linux_musl/linux-mediatek_mt7981/packages/ipkg-aarch64_cortex-a53 /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/build_dir/target-aarch64-openwrt-linux_musl/linux-mediatek_mt7981/mt_wifi/ipkg-aarch64_cortex-a53 /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/build_dir/target-aarch64-openwrt-linux_musl/linux-mediatek_mt7981/mtd/ipkg-aarch64_cortex-a53 /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/build_dir/target-aarch64-openwrt-linux_musl/linux-mediatek_mt7981/warp/ipkg-aarch64_cortex-a53 /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/build_dir/target-aarch64-openwrt-linux_musl/libubox-2021-05-16-b14c4688/ipkg-aarch64_cortex-a53 /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/build_dir/target-aarch64-openwrt-linux_musl/json-c-0.15/ipkg-aarch64_cortex-a53 /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/build_dir/target-aarch64-openwrt-linux_musl/wifi-profile/ipkg-aarch64_cortex-a53 /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/build_dir/target-aarch64-openwrt-linux_musl/ated_ext/ipkg-aarch64_cortex-a53 /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/bin/packages/aarch64_cortex-a53 /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_musl 怎么办
最新发布
11-20
<think> 根据用户提供的find命令输出,工具链的真实路径为: `/opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_musl` ### 配置Makefile的步骤 1. **设置工具链路径**: ```makefile TOOLCHAIN_PATH := /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_musl ``` 2. **添加关键环境变量(在Makefile中或编译前导出)**: ```makefile export STAGING_DIR=$(TOOLCHAIN_PATH) ``` 3. **配置交叉编译变量**: ```makefile CROSS_COMPILE := aarch64-openwrt-linux- CC := $(CROSS_COMPILE)gcc ``` 4. **添加sysroot和头文件路径**: ```makefile CFLAGS += --sysroot=$(TOOLCHAIN_PATH) CFLAGS += -I$(TOOLCHAIN_PATH)/include # 额外包含目标系统的头文件(重要!) CFLAGS += -I$(TOOLCHAIN_PATH)/target/include ``` 5. **完整示例片段**: ```makefile TOOLCHAIN_PATH := /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_musl export STAGING_DIR=$(TOOLCHAIN_PATH) CROSS_COMPILE := aarch64-openwrt-linux- CC := $(CROSS_COMPILE)gcc CFLAGS := -Os -Wall CFLAGS += --sysroot=$(TOOLCHAIN_PATH) CFLAGS += -I$(TOOLCHAIN_PATH)/include CFLAGS += -I$(TOOLCHAIN_PATH)/target/include # 链接选项 LDFLAGS := --sysroot=$(TOOLCHAIN_PATH) ``` ### 验证time.h存在 运行以下命令确认头文件位置: ```bash ls $(TOOLCHAIN_PATH)/target/include/time.h ``` 如果不存在,尝试在工具链目录下搜索: ```bash find $(TOOLCHAIN_PATH) -name time.h ``` ### 特殊处理 如果发现`time.h`位于非标准路径(如`.../staging_dir/target-.../usr/include`),需显式添加: ```makefile CFLAGS += -I$(TOOLCHAIN_PATH)/staging_dir/target-aarch64_cortex-a53_musl/usr/include ``` §§相关问题§§ 1. 当工具链路径中包含版本号变量时,如何在Makefile中实现动态路径解析? 2. 如何解决交叉编译时出现的"multiple definition of `time'"链接错误? 3. 在OpenWRT SDK环境中,`STAGING_DIR`和`TOOLCHAIN_DIR`环境变量有何区别? 4. 为什么需要同时包含工具链的`include`目录和目标的`include`目录? 5. 当项目依赖pkg-config时,如何配置交叉编译环境使其正确找到库文件? </think>根据您的 `find` 命令结果,您的交叉编译工具链真实路径已确认: **工具链路径**: ``` /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_musl ``` ### 配置 Makefile 的完整方案 #### 步骤 1:设置基础路径 ```makefile # 设置工具链根目录 TOOLCHAIN_DIR := /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_musl # 设置目标系统头文件路径(关键!) TARGET_DIR := /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/staging_dir/target-aarch64-openwrt-linux_musl ``` #### 步骤 2:配置编译选项 ```makefile # 交叉编译前缀 CROSS_COMPILE := aarch64-openwrt-linux- CC := $(CROSS_COMPILE)gcc # 关键头文件路径(解决 time.h 问题) CFLAGS := -I$(TOOLCHAIN_DIR)/include \ -I$(TARGET_DIR)/usr/include \ -I$(TARGET_DIR)/include \ --sysroot=$(TOOLCHAIN_DIR) # 链接选项 LDFLAGS := --sysroot=$(TOOLCHAIN_DIR) \ -L$(TARGET_DIR)/usr/lib \ -L$(TARGET_DIR)/lib ``` #### 步骤 3:完整 Makefile 示例 ```makefile TOOLCHAIN_DIR := /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_musl TARGET_DIR := /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/staging_dir/target-aarch64-openwrt-linux_musl CROSS_COMPILE := aarch64-openwrt-linux- CC := $(CROSS_COMPILE)gcc CFLAGS := -O2 -Wall CFLAGS += -I$(TOOLCHAIN_DIR)/include CFLAGS += -I$(TARGET_DIR)/usr/include CFLAGS += -I$(TARGET_DIR)/include CFLAGS += --sysroot=$(TOOLCHAIN_DIR) LDFLAGS := --sysroot=$(TOOLCHAIN_DIR) LDFLAGS += -L$(TARGET_DIR)/usr/lib LDFLAGS += -L$(TARGET_DIR)/lib TARGET := your_app OBJS := main.o utils.o all: $(TARGET) $(TARGET): $(OBJS) $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ clean: rm -f $(OBJS) $(TARGET) ``` ### 验证 time.h 路径 执行以下命令确认 time.h 位置: ```bash # 检查工具链头文件 find /opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/staging_dir -name time.h # 典型路径可能是: # /opt/bba/.../staging_dir/target-aarch64-openwrt-linux_musl/usr/include/time.h ``` ### 额外建议 1. **环境变量设置**(在编译前执行): ```bash export STAGING_DIR=/opt/bba/NX505_EU1_1/sdk/mt7986/openwrt-21.02/staging_dir ``` 2. **如果仍有错误**,添加 musl 特定路径: ```makefile CFLAGS += -I$(TOOLCHAIN_DIR)/include/musl ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Creator_Ly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值