Firefly开源社区

打印 上一主题 下一主题

[技术讨论] ff_export_rootfs_buildroot导出rootfs成 ext2 格式后,新固件无法启动系统

154

积分

0

威望

0

贡献

技术小白

积分
154

ff_export_rootfs_buildroot导出rootfs成 ext2 格式后,新固件无法启动系统

发表于 2022-9-6 13:40:08      浏览:6601 | 回复:7        打印      只看该作者   [复制链接] 楼主
  • 固件类型: 官方提供的固件
  • 固件文件名称: official debian10_2021_0429_1902
  • 固件下载地址: noexits.com
  • Log日志: none.zip
问题描述及复现步骤:
本帖最后由 music1913 于 2022-9-6 13:48 编辑

最开始,在基于官方的 debian10_2021_0429_1902 镜像上,我加入了一些私有的程序,之后进行打包,打包的基本步骤如下:

1. 拷贝打包工具到 /home/firefly/Download/ff_export_rootfs_buildroot
https://dev.t-firefly.com/forum.php?mod=attachment&aid=NzQzMXxhNzE5MjRjZnwxNjYyNDM5MjMwfDB8MTE4NDMz
2. 通过在 Windows PC 上安装 diskgenius, 将一个 64G 的 U盘 格式化为 ext4 单分区,再将 U盘 插在板子上
3. 在板子上创建文件夹 usb_drive, 并将其 mount 到 U盘
mkdir /media/usb_drive
mount/dev/sda1 /media/usb_drive

4. 开始打包
  1. ./ff_export_rootfs /media/usb_drive/
复制代码
输出如下:   
EXPORT IMAGE SIZE        8568    MBytes
    find: '/proc/896/task/896/net': Invalid argument
    find: '/proc/896/net': Invalid argument
    find: '/proc/936/task/936/net': Invalid argument
    find: '/proc/936/net': Invalid argument
    find: '/proc/1139/task/1139/net': Invalid argument
    find: '/proc/1139/net': Invalid argument
    BLOCK_COUNT 9290489
    INODE_COUNT 169877
    sync...
    sync finish
    Export rootfs to /media/usb_drive//Firefly_ext4_202206170232.img Success

可见导出结果是一个格式为 ext4 的文件。
5. 压缩
/sbin/e2fsck
/sbin/resize2fs

最终得到一个 5.84G 的文件
6. 更新parameters.txt
0x00C00000@0x00038000(rootfs),0x00060000@0x00C38000(oem)

7. 能成功将上述得到的 rootfs.img 写入板子并成功启动


==========================================================================
今天,我在基于上述镜像固件的系统上,尝试进行打包(因为我又新加入了一些私有程序),这次有遇到一些不一样的情况:
在上述步骤 4 中,现在有看到 mounting ext2 这样的输出:
./ff_export_rootfs /media/usb_drive/
    MEDIA FREE SPACE SIZE    55975   MBytes
    EXPORT IMAGE SIZE        8040    MBytes
    find: ‘/proc/697/task/1199’: No such file or directory
    find: ‘/proc/697/task/1200’: No such file or directory
    find: ‘/proc/697/task/1201’: No such file or directory
    find: ‘/proc/697/task/1202’: No such file or directory
    BLOCK_COUNT 8713964
    INODE_COUNT 215955
    [  178.260587] EXT4-fs (loop0): mounting ext2 file system using the ext4 subsystem
    [  178.282640] EXT4-fs (loop0): mounted filesystem without journal. Opts: (null)
    sync...
    sync finish
    e2fsck 1.44.5 (15-Dec-2018)
    Export rootfs to /media/usb_drive//Firefly_ext2_202209060150.img Success

可见这次导出的是 ext2 格式的文件,我不确定这次为什么不再是 ext4 了???
先不管它,继续执行压缩,后得到一个 6.53G 的文件,更新 parameters.txt  为:
0x00DAC000@0x00038000(rootfs),0x00060000@0x00DE4000(oem)

最后,将新导出的 rootfs.img 固件重新写入板子后,板子的系统启动出错 EXT4-fs error :

/scripts/init-top/console_setup: line 1: can't open /dev/tty2: No such device or address
/scripts/init-top/console_setup: line 1: can't create /dev/tty3: No such device or address
/scripts/init-top/console_setup: line 1: can't open /dev/tty3: No such device or address
/scripts/init-top/console_setup: line 1: can't create /dev/tty4: No such device or address
/scripts/init-top/console_setup: line 1: can't open /dev/tty4: No such device or address
/scripts/init-top/console_setup: line 1: can't create /dev/tty5: No such device or address
/scripts/init-top/console_setup: line 1: can't open /dev/tty5: No such device or address
/scripts/init-top/console_setup: line 1: can't create /dev/tty6: No such device or address
/scripts/init-top/console_setup: line 1: can't open /dev/tty6: No such device or address
Begin: Loading essential drivers ... done.
Begin: Running /scripts/init-premount ... done.
Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done.
Begin: Running /scripts/local-premount ... done.
Warning: fsck not present, so skipping root file system
[    3.590926] EXT4-fs (mmcblk0p6): mounted filesystem without journal. Opts: (null)
done.
Begin: Running /scripts/local-bottom ... done.
Begin: Running /scripts/init-bottom ... Warning: overlayroot: configuring overlayroot with driver=overlay mode=device opts='dev=PARTLABEL=userdata,fstype=ext4,mkfs=1' per kernel cmdline
[    3.742349] EXT4-fs (mmcblk0p8): warning: mounting unchecked fs, running e2fsck is recommended
[    3.749444] EXT4-fs (mmcblk0p8): mounted filesystem without journal. Opts: (null)
[[: missing ]]
[    3.792694] EXT4-fs error (device mmcblk0p6): ext4_lookup:1706: inode #2: comm overlayroot: deleted inode referenced: 169729
[    3.800716] EXT4-fs error (device mmcblk0p6): ext4_lookup:1706: inode #2: comm overlayroot: deleted inode referenced: 169729
[    3.801680] EXT4-fs error (device mmcblk0p6): ext4_lookup:1706: inode #2: comm overlayroot: deleted inode referenced: 169729
ln: /root/var/lib/docker: Structure needs cleaning
Success: overlayroot: configured root with 'device:dev=PARTLABEL=userdata,fstype=ext4,mkfs=1' using overlay per kernel cmdline
Warning: Something odd, no /lib/modules/4.19.111 in initramfs.
done.
[    3.886249] EXT4-fs error (device mmcblk0p6): ext4_lookup:1706: inode #2: comm run-init: deleted inode referenced: 169313
run-init: /sbin/init: Structure needs cleaning
Target filesystem doesn't have requested /sbin/init.
[    3.890317] EXT4-fs error (device mmcblk0p6): ext4_lookup:1706: inode #2: comm run-init: deleted inode referenced: 169313
run-init: /sbin/init: Structure needs cleaning
run-init: /etc/init: No such file or directory
run-init: /bin/init: No such file or directory
/bin/sh: 0: can't access tty; job control turned off

我不确定是否和 ext2 有关系,但尝试了更改以下强行指定为 ext4:
mount -t ext4 /dev/sda1 /media/usb_drive
##最终测试结果,依然失败。
./ff_export_rootfs /media/usb_drive/ -t ext4
##此命令不支持指定为 ext4,  仅支持显示指定为:  ext2

还请帮忙看一下



none.zip

154 Bytes, 下载次数: 2, 下载积分: 灯泡 -1 , 经验 -1

回复

使用道具 举报

1306

积分

0

威望

0

贡献

中级创客

Rank: 4

积分
1306
发表于 2022-9-7 16:38:13        只看该作者  沙发
ff_export_rootfs_buildroot 这个脚本是用来导出 ext2 的 rootfs 的,你可以看下里面执行的命令;固件本身的 rootfs 是 ext4 格式的,你这样导出可能导致 rootfs 损坏,是正常现象;

你用这个脚本,重新去导出,缺少命令就用 apt 安装下。
ff_export_rootfs.zip (2.34 KB, 下载次数: 16)

回复

使用道具 举报

154

积分

0

威望

0

贡献

技术小白

积分
154
发表于 2022-9-7 16:44:11        只看该作者  板凳
时间的蝴蝶 发表于 2022-9-7 16:38
ff_export_rootfs_buildroot 这个脚本是用来导出 ext2 的 rootfs 的,你可以看下里面执行的命令;固件本身 ...

请问我第一次打包和导出,也是用的 ff_export_rootfs_buildroot ,它导出的 .img 文件名是类似 Firefly_ext4_202206170232.img 这样的, 文件名里面也包含了  ext4  这个字段,说明它是能导出 ext4 格式的,为什么我第二次打包,再使用此命令的时候,导出文件却变成了  ext2  的呢
回复

使用道具 举报

154

积分

0

威望

0

贡献

技术小白

积分
154
发表于 2022-9-8 18:06:17        只看该作者  地板
本帖最后由 music1913 于 2022-9-8 18:27 编辑
时间的蝴蝶 发表于 2022-9-7 16:38
ff_export_rootfs_buildroot 这个脚本是用来导出 ext2 的 rootfs 的,你可以看下里面执行的命令;固件本身 ...

我觉得可能需要澄清一下我的问题。
我的目标是随着我业务的变化,我需不断的打包固件(安装新的私有程序),且每次打包都是在上一次的基础上进行,而不用从官方的Debian从头开始。

我第一次从官方debian上打包出来的固件(称: 第一个打包固件),是可以成功加到板子上的。 现在问题是出在,我基于 第一个打包固件 的基础上,进入Debian系统后,我用和第一次完全一样的打包工具,又进行第二次打包时,得到了 ex2的 第二个打包固件 后,再加载 第二个打包固件 到板子上时出现不能正常启动系。
以上打包均使用的是这个工具:ff_export_rootfs_buildroot/ff_export_rootfs

我刚才又将 第一个打包固件  写入到板子上,一切正常,进入系统后,可以看到rootfs就已经是ext2了:

root@firefly:~# parted -l
Error: /dev/mmcblk0boot0: unrecognised disk label
Model: Generic SD/MMC Storage Card (sd/mmc)
Disk /dev/mmcblk0boot0: 4194kB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

Error: /dev/mmcblk0boot1: unrecognised disk label
Model: Generic SD/MMC Storage Card (sd/mmc)
Disk /dev/mmcblk0boot1: 4194kB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

Model: MMC AJTD4R (sd/mmc)
Disk /dev/mmcblk0: 15.6GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name      Flags
1      8389kB  12.6MB  4194kB               uboot
2      12.6MB  16.8MB  4194kB               misc
3      16.8MB  50.3MB  33.6MB               boot
4      50.3MB  83.9MB  33.6MB               recovery
5      83.9MB  117MB   33.6MB               backup
6      117MB   6560MB  6442MB  ext2         rootfs
7      6560MB  6761MB  201MB   ext4         oem
8      6761MB  15.6GB  8873MB  ext2         userdata


同时,我用您在回复里给的新的打包工具(其提示安装 rsync试着 第一个打包固件 的系统,安装一些私有程序后,再次打包,可以看到,此工具导出的仍然是ext2 的分区固件内容:
root@firefly:/home/firefly/Download# ./ff_export_rootfs /media/usb_drive/
MEDIA FREE SPACE SIZE    55975   MBytes
EXPORT IMAGE SIZE        6863    MBytes
./ff_export_rootfs: line 157: lsb_release: command not found
BLOCK_COUNT 7378262
INODE_COUNT 144566
[ 2068.783566] EXT4-fs (loop0): mounted filesystem with ordered data mode. Opts:                                                                                   (null)
sync...
sync finish
Export rootfs to /media/usb_drive//Firefly__ext2_202209080949.img Success

还请帮忙查看。

回复

使用道具 举报

1306

积分

0

威望

0

贡献

中级创客

Rank: 4

积分
1306
发表于 2022-9-8 19:48:01        只看该作者  5#
music1913 发表于 2022-9-7 16:44
请问我第一次打包和导出,也是用的 ff_export_rootfs_buildroot ,它导出的 .img 文件名是类似 Firefly_e ...

官方 Debian 固件是 ext4 格式的,ext4 这个字段是因为读到系统分区是 ext4 格式的,仅次而已;但脚本本身依然按照 ext2 格式去导出 rootfs;
所以你导出的这个文件 `Firefly_ext4_202206170232.img` 就是 ext2 格式的,这就是为什么你第二次导出时是 ext2 字段;
如前面所说,你看看脚本就会很清楚了;
回复

使用道具 举报

1306

积分

0

威望

0

贡献

中级创客

Rank: 4

积分
1306
发表于 2022-9-8 20:05:35        只看该作者  6#
music1913 发表于 2022-9-8 18:06
我觉得可能需要澄清一下我的问题。
我的目标是随着我业务的变化,我需不断的打包固件(安装新的私有程序 ...

`我的目标是随着我业务的变化,我需不断的打包固件(安装新的私有程序),且每次打包都是在上一次的基础上进行,而不用从官方的Debian从头开始。`
- 这个是没问题的,用我发的新工具就行;

`我刚才又将 第一个打包固件  写入到板子上,一切正常,进入系统后,可以看到rootfs就已经是ext2了:`
- 如上面所说;

`同时,我用您在回复里给的新的打包工具(其提示安装 rsync试着 第一个打包固件 的系统,安装一些私有程序后,再次打包,可以看到,此工具导出的仍然是ext2 的分区固件内容:
`
- 你之前导出的 rootfs,是将 ext4 导出为 ext2,本身就有问题了,不能保证使用过程中不会出现其它问题;需要用官方固件重新导出;
回复

使用道具 举报

15

积分

0

威望

0

贡献

技术小白

积分
15
发表于 2023-3-30 10:40:09        只看该作者  7#
时间的蝴蝶 发表于 2022-9-8 20:05
`我的目标是随着我业务的变化,我需不断的打包固件(安装新的私有程序),且每次打包都是在上一次的基础 ...

你好,方便帮看下是什么原因备份不成功,谢谢
root@linaro-alip:/mnt/sdcard# bash ff_export_rootfs /mnt/sdcard
MEDIA FREE SPACE SIZE    12331   MBytes
EXPORT IMAGE SIZE        2371    MBytes
BLOCK_COUNT 2974660
INODE_COUNT 216063
Could not open /mnt/sdcard/DebianGNU/Linux9.6(stretch)_Firefly_ext4_202303300213                                                                                        .img: No such file or directory

The device apparently does not exist; did you specify it correctly?

==========================不同版本ff_export_rootfs,以上失败,以下成功====================

root@linaro-alip:/home/linaro/ff_export_rootfs_buildroot# bash ff_export_rootfs

        ff_export_rootfs </path/to/store> [-t <ext2|btrfs>]

root@linaro-alip:/home/linaro/ff_export_rootfs_buildroot# bash ff_export_rootfs /mnt/sdcard
MEDIA FREE SPACE SIZE    12331   MBytes
EXPORT IMAGE SIZE        2375    MBytes
BLOCK_COUNT 2385890
INODE_COUNT 215565
sync...
sync finish
Export rootfs to /mnt/sdcard/Firefly_ext4_202303300224.img Success
回复

使用道具 举报

15

积分

0

威望

0

贡献

技术小白

积分
15
发表于 2023-3-30 10:45:18        只看该作者  8#
music1913 发表于 2022-9-8 18:06
我觉得可能需要澄清一下我的问题。
我的目标是随着我业务的变化,我需不断的打包固件(安装新的私有程序 ...

可以试下如下方法:
导出开发板根文件系统
此节讲述将如何将一块开发板上的根文件系统导出并打包成镜像文件。适用于将某一开发板的环境完整地复制到其他开发板上,或制作升级固件。

操作步骤
在开发板,PC 机安装 ssh, rsync:

    sudo apt-get install -y ssh rsync
在开发板上设置 ssh 允许用 root 用户访问

修改 /etc/ssh/sshd_config 文件中的 #PermitRootLogin prohibit-password 为 PermitRootLogin yes

重新启动 ssh 服务:

    sudo /etc/init.d/ssh restart
在 PC 机中同步开发板的文件系统,请先将开发板和 PC 机置于同一局域网内。(假设开发板地址为 192.168.100.100)

    mkdir rootfs
    sudo rsync -avx root@192.168.100.100:/ ./rootfs
此时,rootfs 目录中保存的就是开发板文件系统中的所有文件,可以开始制作根文件系统镜像:

    dd if=/dev/zero of=linuxroot.img bs=1M count=4000
    mkfs.ext4 linuxroot.img
    mkdir temp && sudo mount linuxroot.img ./temp
    sudo cp -rfp rootfs/*  temp/
    sudo umount temp/
    e2fsck -p -f linuxroot.img
    resize2fs  -M linuxroot.img
最终 linuxroot.img 就是做好的根文件系统镜像,和你的开发板的文件系统是一致的。
链接:https://wiki.t-firefly.com/zh_CN ... ubuntu_support.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表