Windows将u盘烧录为ext4 linux磁盘类型并进行读写

项目需求是创建一个跨平台的U盘烧录工具,用于在Windows和Linux上将文件写入EXT4格式的U盘以制作ARM系统启动盘。在Windows环境下使用Qt和CMake进行开发,遇到的主要问题包括Windows下烧录EXT4格式后权限限制只对root有效且缺少执行权限。作者提到了使用diskpart.exe进行磁盘操作的步骤,并指出此过程复杂,因此项目是收费的。
摘要由CSDN通过智能技术生成

Windows将u盘烧录为ext4 linux磁盘类型并进行读写

介绍

项目中要求做一个跨平台的烧录u盘软件, windows/linux 将文件写入到烧录的u盘中作为一个arm系统启动盘,中间遇到很多坑故记录于此
有坑* windows去烧录ext4系统后,所有权限只有root有 并且没有x执行权限
需要的可以直接私聊我,收费

处理过程

我用了Qt作为开发工具进行开发,项目构建使用cmake,windows 使用powershell 而linux较简单,直接用bash启动shell脚本,由于开发过程比较繁琐,本项目进行收费下面是一些使用的部分代码

windows(核心,较麻烦)

//windows
    QString  exepath = "diskpart.exe";
    QProcess process;
    process.start(exepath);
    bool res = process.waitForStarted();
    if(!res){
        emit signalMessageShow("Failed to start Disk Management tool!");
        return false;
    }
    process.write("list disk\n");
    process.closeWriteChannel();
    process.waitForFinished();
    QByteArray qba = process.readAllStandardOutput();
    QTextCodec* pTextCodec = QTextCodec::codecForName("System");
    assert(pTextCodec != nullptr);
    QString info = pTextCodec->toUnicode(qba);
    QTextCodec *mTextCodec = QTextCodec::codecForName("GBK");
    qDebug()<< mTextCodec->toUnicode(info.toUtf8()).toStdString().c_str();
    process.close();
    QStringList strlist,typelist;
    std::map<QString,int> map_disksize;
    int npos=0;
    while(info.indexOf(QStringLiteral("磁盘 "),npos) != -1){
        int nindex = info.indexOf(QStringLiteral("磁盘 "),npos);
        npos = nindex+4;
        if(QStringLiteral("磁盘 #") != info.mid(nindex,4)){
            strlist<<info.mid(nindex,4);
            QString strsize = "    联机              931 ";
            int ngb_index = info.indexOf("GB",npos);
            if(ngb_index  != -1 && ngb_index<strsize.size() *2 + nindex){
                map_disksize[info.mid(nindex,4)] = info.mid(ngb_index-7,7).toInt();
            }
        }
    }
    std::vector<int> disk_number;
    QStringList enddisk;
    for (int i = 0;i<strlist.size();i++) {
        QString str ="select disk "+QString::number(i)+ "\n detail disk\n";
        process.start(exepath);
        bool res = process.waitForStarted();
        if(!res){
            emit signalMessageShow("Failed to start Disk Management tool!");
            return false;
        }
        process.write(str.toStdString().c_str());
        process.closeWriteChannel();
        process.waitForFinished();
        qba = process.readAllStandardOutput();
        info = pTextCodec->toUnicode(qba);
        int nindex =  info.indexOf(QStringLiteral("类型   :"),0);
        QString strtype = info.mid(nindex+6,4);
        nindex =  info.indexOf(QStringLiteral("磁盘 ID:"),0);
        int rindex = info.left(nindex-2).lastIndexOf("\r\n");
        //拼硬盘名称
        QString strname = info.mid(rindex+2,nindex-rindex-4);
        if(strtype.indexOf("USB")!= -1){
            enddisk<<strname;
            disk_number.push_back(i);
        }
        process.close();
    }
    if(enddisk != m_disk_name || disk_number != m_disk_number){
        emit signalMessageShow(QStringLiteral("磁盘顺序已发生改变,请先刷新后重新进行烧录"));
        return false;
    }

    if(!diskToFromat(m_disk_number.at(ui->cb_upan->currentIndex()))){
        return false;
    }
    return true;
可以读写Ext2,以Ext2方式挂载Ext3文件系统(不支持Ext3日志),不支持中文! It provides Windows NT4.0/2000/XP/2003/Vista/2008 with full access to Linux Ext2 volumes (read access andwrite access). This may be useful if you have installed both Windows and Linux as a dual boot environment on your computer. What features are supported? Complete reading and writing access to files and directories of volumes with theExt2 orExt3 file system. Supports features which are specific to the I/O-system of Windows: Byte Range Locks, Directory Notfication (so the Explorer updates the view of a directory on changes within that directory), Oplocks (so SMB clients are able to cache the content of files). Allows Windows to run with paging files on Ext2 volumes. UTF-8 encoded file names are supported. The driver treats files with file names that start with a dot "." character ashidden. Supports GPT disks if the Windows version used also does. Supports use of the Windows mountvol utility to create or delete drive letters for Ext2 volumes (except on Windows NT 4.0). See also section"Can drive letters also be configured from scripts?". What features are *not* supported? Inodes that are larger than 128 bytes are not supported. Access rights are not maintained. All users can access all the directories and files of an Ext2 volume. If a new file or directory is created, it inherits all the permissions, the GID and the UID from the directory where it has been created. There is one exception to this rule: a file (but not a directory) the driver has created always has cleared "x" permissions, it inherits the "r" and the "w" permissions only. See also section"What limitations arise from not maintaining access rights?". The driver does not allow accessing special files at Ext2 volumes, the access will be always denied. (Special files are sockets, soft links, block devices, character devices and pipes.) Alternate 8.3-DOS names are not supported (just because there is no place to store them in an Ext2 file system). This can prevent legacy DOS applications, executed by the NTVDM of Windows, from accessing some files or directories. Currently the driver does not implement defragging support. So defragmentation applications will neither show fragmentation information nor defragment any Ext2 volume. This software does not achieve booting a Windows operating system from an Ext2 volume. LVM volumes are not supported, so it is not possible to access them.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值