openbmc ast2600 jffs2挂载mtd5(rwfs)异常定位与SPI驱动修复

AST2600 SPI驱动XIP模式揭秘:当JFFS2挂载失败时我们该如何调试硬件寻址 本文深入探讨了AST2600 SPI驱动XIP模式下JFFS2挂载失败的根本原因,揭示了硬件寻址机制与驱动交互的深层冲突。通过分析AST2600的SPI控制器设计,提供了从硬件寄存器检查到驱动代码修改的系统化调试方法,帮助开发者解决MTD分区偏移导致的Magic值检测异常问题,确保OpenBMC平台稳定运行。 阅读详情

1. 问题现象与初步分析

最近在调试AST2600平台的OpenBMC系统时,遇到了一个让人头疼的问题:系统启动过程中rwfs分区挂载失败,导致启动超时。这个问题看似简单,但实际上涉及到了多个技术层面的排查,包括文件系统、分区配置、驱动逻辑等。让我带你一步步走进这个问题的排查过程,分享我是如何从一堆混乱的日志中定位到根本原因的。

首先来看看系统启动时的错误日志。在启动过程中,系统尝试挂载mtd5分区(即rwfs分区)时,出现了一系列jffs2文件系统的错误提示:

[  2.819160] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000000: 0x001f instead
[  2.829883] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000004: 0xf03c instead
[  2.840547] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000008: 0xf03c instead

这些错误信息表明,jffs2文件系统在扫描擦除块时,无法在预期的位置找到正确的魔数(0x1985)。相反,它读取到的数据是0x001f、0xf03c等。这些数据看起来非常眼熟——它们实际上是u-boot分区开头的内容,而不是rwfs分区应该包含的数据。

这里需要简单解释一下jffs2文件系统的基本原理。jffs2是一种日志结构的文件系统,专门为Flash设备设计。它在挂载时会扫描整个分区,寻找有效的节点(node)和擦除块(eraseblock)。每个擦除块的开头应该有一个魔数,用于标识这是一个有效的jffs2节点。如果魔数不匹配,系统就会报错。

在我的板子上,分区配置如下:

[  1.499195] Creating 5 MTD partitions on "bmc":
[  1.504287] 0x000000000000-0x000000140000 : "u-boot"
[  1.511120] 0x000000140000-0x000000160000 : "u-boot-env"
[  1.518231] 0x000000160000-0x000000960000 : "kernel"
[  1.525004] 0x000000960000-0x000002e00000 : "rofs"
[  1.531470] 0x000002e00000-0x000004000000 : "rwfs"

rwfs分区(mtd5)的起始地址是0x2e00000,结束地址是0x4000000。理论上,jffs2应该从这个地址范围读取数据,但日志显示它却在0x00000000处读取,这明显是u-boot分区的起始地址。

2. 分区配置与镜像检查

遇到这种问题,首先怀疑的往往是分区配置或镜像打包是否正确。毕竟,如果分区配置错误或者镜像文件本身有问题,挂载失败是很常见的。因此,我花了些时间仔细检查了这些方面。

首先,确认分区配置是否正确。在OpenBMC中,分区配置通常通过设备树(device tree)或内核配置来定义。我检查了设备树文件,确认mtd5的分区定义与内核日志中的信息一致:

partitions {
    compatible = "fixed-partitions";
    #address-cells = <1>;
    #size-cells = <1>;

    partition@0 {
        label = "u-boot";
        reg = <0x0 0x140000>;
    };
    partition@140000 {
        label = "u-boot-env";
        reg = <0x140000 0x20000>;
    };
    partition@160000 {
        label = "kernel";
        reg = <0x160000 0x800000>;
    };
    partition@960000 {
        label = "rofs";
        reg = <0x960000 0x24a0000>;
    };
    partition@2e00000 {
        label = "rwfs";
        reg = <0x2e00000 0x1200000>;
    };
};

从配置来看,分区定义没有问题。rwfs分区的起始地址确实是0x2e00000,大小是0x1200000(18MB),这与内核日志中的信息吻合。

接下来,检查镜像文件是否正确生成。在OpenBMC构建过程中,通常会生成一个完整的Flash镜像,包含所有分区。我使用hexdump工具查看了镜像文件的内容:

hexdump -C flash-image.bin | head -n 20

输出显示,rwfs分区区域(从0x2e00000开始)确实全是0xffffffff,这意味着该分区是空的,没有被正确格式化。这是正常的,因为rwfs分区是读写分区,通常在第一次启动时由系统格式化。问题不在于镜像内容,而在于挂载时读取的位置错误。

我还尝试手动挂载rwfs分区,以确认问题是否与自动挂载过程有关:

mount -t jffs2 /dev/mtdblock5 /mnt/rwfs

结果同样失败,错误信息与内核日志一致。这说明问题不是出在挂载脚本或启动过程,而是更底层的读取逻辑。

3. 深入jffs2挂载过程

为了更深入地理解问题,我决定跟踪jffs2的挂载过程。jffs2文件系统的挂载从jffs2_scan_eraseblock()函数开始,这个函数负责扫描每个擦除块,识别有效的节点。

从错误日志可以看出,系统在读取偏移0x0、0x4、0x8等位置时,得到的不是预期的魔数0x1985,而是0x001f、0xf03c等。这些数据实际上是u-boot分区开头的内容。例如,u-boot通常以特定的指令序列开头,0x001f可能是一条ARM指令的操作码。

这说明jffs2在读取数据时,偏移量计算错误。它应该从rwfs分区的起始地址(0x2e00000)开始读取,但实际上却从Flash的绝对地址0x0开始读取。

为什么会这样?问题可能出在MTD(Memory Technology Device)层或SPI驱动层。MTD层负责提供统一的Flash访问接口,而SPI驱动则负责具体的读写操作。

我首先检查了MTD分区的映射是否正确。通过/proc/mtd文件,可以查看每个分区的信息:

cat /proc/mtd

输出显示:

dev:    size   erasesize  name
mtd0: 00140000 00010000 "u-boot"
mtd1: 00020000 00010000 "u-boot-env"
mtd2: 00800000 00010000 "kernel"
mtd3: 024a0000 00010000 "rofs"
mtd4: 01200000 00010000 "rwfs"

这里注意到,/proc/mtd中的分区编号与设备树中的略有不同。设备树中rwfs是mtd5,但在这里是mtd4。这是因为MTD分区的编号从0开始,而设备树中的分区索引是从0开始计算的。但这不是问题的关键,因为挂载操作使用的是设备节点(如/dev/mtdblock4),而不是分区编号。

接下来,我使用mtdinfo工具查看rwfs分区的详细信息:

mtdinfo /dev/mtd4

输出显示该分区的类型为jffs2,大小和擦除块大小都符合预期。这说明MTD层对分区的识别是正确的。

那么问题可能出在SPI驱动层。AST2600的SPI控制器支持XIP(eXecute In Place)模式,这意味着CPU可以直接通过内存映射访问Flash内容,而不需要经过SPI控制器进行数据传输。在XIP模式下,Flash的前256MB被映射到系统的内存空间,CPU可以直接读写。

但是,这种模式下,SPI驱动需要正确处理分区的偏移量。当MTD层请求读取rwfs分区的数据时,它应该将分区偏移(0x2e00000)传递给SPI驱动,驱动再将其转换为实际的内存映射地址。

4. SPI驱动问题定位

基于以上分析,我怀疑问题出在ASPEED SPI驱动对分区偏移的处理上。于是,我决定深入驱动代码,跟踪数据读取的过程。

ASPEED SPI驱动的核心函数是aspeed_spi_read_reg()和aspeed_spi_read_from_ahb(),这些函数负责从Flash读取数据。在XIP模式下,读取操作直接通过内存映射完成,而不需要经过SPI传输。

我添加了一些调试打印,跟踪读取操作的偏移量:

static int aspeed_spi_read_from_ahb(void *buf, const void __iomem *addr, size_t len)
{
    pr_info("Reading from AHB address: %p, length: %zu\n", addr, len);
    memcpy_fromio(buf, addr, len);
    return 0;
}

添加调试代码后重新编译内核,启动系统。观察日志输出,发现当jffs2尝试读取rwfs分区时,驱动确实是从基地址(0x0)开始读取,而不是从分区偏移(0x2e00000)开始。

这说明驱动在处理MTD读取请求时,没有正确加上分区的偏移量。根本原因在于驱动代码中的地址计算错误。

在ASPEED SPI驱动中,每个MTD分区都应该有自己的偏移量,当MTD层发起读取请求时,驱动应该将分区偏移加上请求的偏移量,得到实际的Flash地址。但当前的实现中,驱动忽略了分区偏移,直接使用请求的偏移量作为绝对地址。

5. 驱动修复方案

找到问题根源后,修复就比较直接了。需要修改SPI驱动,在处理读取请求时加上分区的偏移量。

首先,需要获取分区的偏移量。在MTD层,每个分区都有其偏移量信息,存储在mtd_info结构体的priv字段中。对于ASPEED SPI驱动,可以通过aspeed_spi_flash结构体获取分区偏移。

修改驱动代码,在读取函数中加入分区偏移:

static int aspeed_spi_read(struct mtd_info *mtd, loff_t from, size_t len,
                           size_t *retlen, u_char *buf)
{
    struct aspeed_spi_flash *flash = mtd->priv;
    struct aspeed_spi *aspi = flash->aspi;
    u32 addr = flash->base_addr + from;  // 加上分区基地址
    
    // 使用addr进行读取操作
    aspeed_spi_read_from_ahb(buf, aspi->ahb_base + addr, len);
    
    *retlen = len;
    return 0;
}

这里的关键是flash->base_addr,它存储了分区的起始偏移。在驱动初始化时,需要为每个分区正确设置这个值。

此外,还需要确保其他操作(如擦除、写入)也使用正确的偏移量。例如,擦除操作的修改类似:

static int aspeed_spi_erase(struct mtd_info *mtd, struct erase_info *instr)
{
    struct aspeed_spi_flash *flash = mtd->priv;
    struct aspeed_spi *aspi = flash->aspi;
    u32 addr = flash->base_addr + instr->addr;  // 加上分区基地址
    
    // 使用addr进行擦除操作
    // ...
}

修改完成后,重新编译内核并刷写到设备。启动系统,观察日志输出,发现jffs2不再报魔数错误,rwfs分区成功挂载。

为了验证修复是否彻底,我进行了一些额外测试:

  1. 读写测试:在rwfs分区创建文件,写入内容,然后读取验证:

    echo "test content" > /run/initramfs/rwfs/test.txt
    cat /run/initramfs/rwfs/test.txt
    
  2. 重启测试:多次重启系统,确认rwfs分区每次都能正常挂载,数据持久化正确。

  3. 压力测试:在rwfs分区进行大量文件操作,验证系统的稳定性。

这些测试都通过了,确认驱动修复成功。

6. 经验总结与预防措施

通过这次问题排查,我深刻体会到嵌入式系统中硬件与软件交互的复杂性。一个小小的驱动bug,可能导致整个系统无法正常启动。总结几点经验,供大家参考:

首先,始终怀疑驱动问题。当遇到类似的文件系统挂载失败时,不要轻易认为是分区配置或镜像问题。驱动层的bug往往更加隐蔽,需要深入代码才能发现。

其次,善用调试工具。在这个案例中,内核的调试打印、mtdinfo工具、hexdump等都非常有用。合理添加调试信息,可以大大缩短问题定位的时间。

第三,理解硬件特性。AST2600的XIP模式是一把双刃剑,它提高了读取性能,但也增加了驱动的复杂性。只有深入理解硬件工作原理,才能写出正确的驱动代码。

为了预防类似问题,我建议在驱动开发中采取以下措施:

  1. 完善的日志系统:在驱动中添加详细的调试信息,包括地址计算、数据传输等关键步骤。这些信息在问题排查时非常有用。

  2. 单元测试:为驱动编写单元测试,覆盖各种边界情况,如分区偏移、跨擦除块读写等。

  3. 代码审查:特别关注地址计算和偏移处理,这是驱动中最容易出错的部分。

  4. 文档记录:详细记录硬件特性和驱动设计思路,方便后续维护和问题排查。

最后,遇到问题不要慌张,耐心分析日志,一步步缩小问题范围。嵌入式调试往往需要多次尝试和验证,但只要方法得当,总能找到解决方案。

6、Windows Server 2008 文件管理与权限设置全解析 本文详细解析了Windows Server 2008中的文件管理和权限设置,涵盖了NTFS文件和文件夹的标准与特殊权限、继承与所有权管理、有效权限的确定、基于访问的枚举(ABE)以及对象访问审计等内容。此外,还深入介绍了文件服务器资源管理器(FSRM)的功能与配置方法,包括配额管理、文件类型筛选、存储报告生成等,帮助用户提高数据安全性和存储效率。通过实际案例分析和操作流程可视化,为系统管理员提供了实用的指导和参考。 阅读详情

相关推荐

73、Windows Server 2008 文件系统管理与容错技术详解

本文详细介绍了 Windows Server 2008 的文件系统管理和容错技术,涵盖了 NTFS 文件系统、磁盘分区格式、配额管理、数据压缩与加密、卷影复制服务、分布式文件系统(DFS)等关键功能。同时,还探讨了磁盘管理、数据访问控制、文件筛选、备份与恢复策略等内容,为企业管理员提供了一套完整的文件服务解决方案,助力构建高可用性、可靠且安全的存储基础设施。

k8s6orchestrator的博客 149

Windows server2008r2基础学习(12):NTFS磁盘与权限

簇:磁盘空间的最小划分,可以理解为磁盘的单位,比如NTFS的簇为4K(也可以手动修改),那么小于4k的文件在磁盘中也会占用4K的空间。若一个用户属于多个组,且这些组对某个文件有不同的权限设置,则该用户对相应文件的权限为这些组所设置的权限之和。虽然用户对文件权限=其所属组们对文件权限的集合,但只要有一项权限被某个组设置为拒绝,则用户就不会拥有此权限。如上图所示,user1用户对文件的读取权限是打灰√的,表示它是从父文件夹继承来的权限。对文件夹设置的权限会被文件夹内的子文件夹和文件继承。

ab149162536的博客 1410

深度学习赋能胶囊内镜:AI如何实现胃肠道出血的自动检测与分割

在计算机视觉领域,图像分类与目标检测是处理医学影像分析的核心技术。其原理在于通过卷积神经网络(CNN)自动学习图像中的多层次特征表示,实现对特定目标的识别与定位。这项技术的价值在于能够将医生从海量、重复的阅片工作中解放出来,提升诊断效率与一致性,尤其在处理如胶囊内镜产生的数万张连续图像时优势显著。其应用场景广泛覆盖了医学影像的辅助诊断,例如在消化内科,对胃肠道出血的早期发现与精准定位具有重要临床意义。本文聚焦于利用深度学习模型,如U-Net和EfficientNet,构建一个能够从复杂多变的胶囊内镜图像中,

weixin_42533910的博客 387

windows服务器文件夹只读,win2008 服务器文件夹权限配置

通过控制文件夹权限来提高站点的安全性。这一篇权限设置包括二个方面,一个是系统目录、盘符的权限,一个是应用程序的上传文件夹权限设置。系统目录确保所有盘符都是NTFS格式,如果不是,可以用命令 convert d:/fs:ntfs 转换为NTFS格式。所有磁盘根目录只给system和administrators权限,其它删除。其中系统盘符会有几个提示,直接确定就可以了。在做这步操作之前,你的运行环境软...

weixin_29092031的博客 2765

使用GitLab+Drone CI持续集成自动部署web项目,图文详细

kind: pipeline # 定义对象类型,还有secret和signature两种类型 type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型 name: mall-tiny-drone # 定义流水线名称 steps: # 定义流水线执行步骤,这些步骤将顺序执行 - name: package # 流水线名称 image: maven:3-jdk-8 # 定义创建容器的Docker镜像 volumes: # 将容器内目录挂载到宿主机,仓库

4106

行车记录仪 - 碰撞检测

功能需求 行车记录仪的核心功能是记录,大部分时候,行车记录仪都是在循环录制视频和音频,而设备的存储空间是有限的,因此录制机制一般是循环覆盖录制,如此一些重要的记录(例如:发生碰撞时的记录)就可能会被覆盖,为了避免这种情况的发生,行车记录仪设备就需要感知这些情况并做特殊处理(例如:备份相应时刻的录像数据)。 实现原理 碰撞检测是通过物理芯片G-sensor来实现的,加速度发生变化时G-sensor驱动会将加速度上报给应用层,应用层做相应处理。 G-sensor G-sensor(Gravity se

qazw9600的专栏 5219

关于flash分区打印信息jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985

uboot中的bootargs设置如下: bootargs=noinitrd console=ttyS0,115200n8 maxcpus=1mem=240Mmtdparts=S29GL:768K(boot),128K(env),15M(system),13M(rootfs),-(custfs);spi1.0:640k(uboot),320k(env),64k(mac),6M(system)

shuijingshizhe的博客 8769

2023最新扫码连wifi-扫码挪车-聚合CPS返利多合一小程序源码

2023最新扫码连wifi-扫码挪车-聚合CPS返利多合一系统 系统特点: 目前已接入的 CPS 渠道: 充值:话费充值、电费充值、影视会员充值、会员卡券充值 本地团购:联联周边游 电商平台:京东、拼多多、唯品会、淘宝、抖音美团:外卖、闪购、酒店、到店、优选饿了么:外卖、商超 出行服务:滴滴打车、滴滴加油、滴滴货运、花小猪打车、高德打车、同程打车 连锁餐饮点餐:肯德基、麦当劳、百果园、奈雪的茶、瑞幸咖啡、星巴克、喜茶、汉堡王、必胜客电影票:特价电影票 注意:以上涉及到需要支付的 CPS 渠道,不需要预存!

qq_41837379的博客 3113

内核挂载JFFS2文件系统出现的问题:jffs2_scan_eraseblock() magic bitmask 0x1985 not found at instead

上周在做HI3521开发板烧写根文件系统后,再次启动后一直出现jffs2文件系统挂载不上的情况,就如题目上jffs2_scan_eraseblock() magic bitmask 0x1985 not found at instead;这种情况一直打印,直到打印“累了”才不再打印(呵呵),其实上周五就跟这个套件公司沟通过,看是出了什么问题,今天又问了一天,看来以后是不能指望他们给解决技术问题了,

哲的专栏 1万+

电子发票二维码背后的秘密:10分钟看懂校验码、加密字符含义与防伪设计

本文深入解析电子发票二维码的结构与防伪设计,揭示校验码和加密字符的生成原理及验证方法。通过实际案例和技术细节,帮助财务人员理解电子发票的安全机制,提升防伪识别能力,确保税务合规。

weixin_29248611的博客 533

LangChain与LangGraph核心区别解析

LangChain与LangGraph是当前大语言模型(LLM)应用开发中两个紧密相关且极具影响力的开源框架。它们源于LangChain AI公司,设计哲学互补,旨在解决不同维度的LLM工程化问题,共同构成了构建复杂智能应用的强大工具集。

weixin_35774598的博客 1930

OpenBMC启动流程全解析:从芯片上电到服务就绪的底层原理与实践

嵌入式Linux系统启动是一个从底层硬件初始化到上层应用服务就绪的精密过程,其核心在于引导加载程序、内核与文件系统的协同。以U-Boot为代表的引导加载程序负责初始化硬件、加载内核与设备树,而设备树作为硬件描述文件,是连接固件与操作系统的关键桥梁。这种启动链设计对于系统可靠性、安全启动和快速恢复至关重要,尤其在服务器带外管理场景中,它确保了基板管理控制器(BMC)的稳定运行。OpenBMC作为开源BMC固件的典型代表,其启动过程完美诠释了这一技术栈,涉及SPL阶段的内存初始化、U-Boot的环境变量配置、内

weixin_30791095的博客 351

EPLAN 电气制图(六):结构盒与设备管理器核心概念(基础知识选看)

结构盒是 EPLAN 中用于标识元件安装位置的逻辑容器,非实际设备或黑盒,仅用于原理图中划分功能区域或物理位置(如 “柜内”“柜外”)。标识符设置:在 “显示设备标识符” 中输入位置代号(如 “+ 柜外”),完整格式为 “= 高层代号 + 位置代号”;筛选与定位:通过 “筛选器” 按类别(如电机、接触器)快速查找设备,右键 “转到(图形)” 可高亮定位图纸中的元件;设备保护:重要设备可启用保护(【项目数据】→【设备】→【启用设备保护】),防止误删除(显示橙色圆圈标记)。

电工 1060

配置共享文件夹--不同文件夹设置不同访问权限

1 目的     用户可以远程访问服务器上的共享文件夹,每个用户只能访问所在分组的文件夹。管理员拥有全部文件夹的完全控制权限。 2 设置服务器的文件共享属性 点击右下角的”网络和共享中心“,”共享和发现“的设置如下。 关闭密码保护则使所有用户可以以guest身份直接访问,不用输入账号和密码。 3 新建用户和分组     1)在Wind

Horsdy123的专栏 1万+

零基础入门simulink1000例--第112例:在 Simulink 中构建一个基本的相控阵雷达波束形成系统仿真模型

摘要:本文详细介绍了使用Simulink实现相控阵雷达波束形成技术的完整流程。从创建Simulink模型、设计天线阵列、信号生成,到波束形成算法实现和结果可视化,涵盖了关键步骤。文章重点讲解了均匀线性阵列的设计、线性调频信号生成、相位偏移计算等核心技术,并提供了MATLAB代码示例。通过Scope或ArrayPlot模块进行结果分析,最终可导出为嵌入式代码部署。该系统展现了电子扫描波束的技术优势,为雷达系统设计提供了有效的仿真方法。

amy_mhd的博客 212

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x000a0000: 0x3030 instead 问题分析

嵌入式设备中,如果系统打印出很多类似这样的的消息:jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x000a0000: 0x3030 instead 可以确认的是系统在挂载jffs文件系统的时候出错了。我有遇到出多次,总体分为两类: (1)调整分区表之后出现这样的情况,或是更换文件系统的时候出现............

Biao 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

关于Windows Server 2008 文件夹共享权限设置问题

测试环境: Windows 2008R2 做共享,所用账号均为本地账号,无AD环境。  访问的客户端:XP SP2 分享一: 在服务器上开设一账户:User1 并加入administrators组   设置一共享文件夹,权限为:     设置完成后,在一客户端用user1访问test文件夹,结果提示没权限 为了证实确实是User1用户访问,请

私_有_云 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

windows server 2008 NTFS权限与共享文件夹

目录一、NTFS权限二、共享文件夹三、共享文件夹的NTFS权限 一、NTFS权限 二、共享文件夹 三、共享文件夹的NTFS权限 感谢观看 不足之处 还请多多批评指正。谢谢大家

jx1501211的博客 865

windows server 用户权限设置,三个案例。

在windows server中创建成员和组需要相应的权限,我们在系统创建完成初始就会有一个Administrator,也就是默认的管理员账户,具有完全控制权限,这个案例1就是让我们再额外创建两个用户账户,再为他们赋予权限,新建的账户权限一般都比较有限。选择 工具--计算机管理打开本地用户和组,选择用户再在空白处打开鼠标右键菜单,创建新用户按照题目案例要求设置即可设置密码时按照案例中的密码可能设置失败,系统会提示设置的密码不符合安全要求或者说复杂度不够,这是因为windows密码设置有安全性要求,只需要设置

qwe985124的博客 1万+

Windows下权限设置详解

创建时间:2005-02-15文章属性:原创文章提交:mrcool (mrcoolfuyu_at_tom.com)随着动网论坛的广泛应用和动网上传漏洞的被发现以及SQL注入式攻击越来越多的被使用,WEBSHELL让防火墙形同虚设,一台即使打了所有微软补丁、只让80端口对外开放的WEB服务器也逃不过被黑的命运。难道我们真的无能为力了吗?其实,只要你弄明白了NTFS系统下的权限设置问题,我们可以对cr

wangxiaoling的专栏 776

Windows Server 2008 共享文件夹

今天整了个WindowsServer 2008的文件共享,差点给我整出高血压网上相关的东西描述的都不大一样,整了几个小时终于整出来了。

jc_hook的博客 6192

Gromacs必学技巧:5分钟搞定xtc文件配置(附2024最新mdp参数模板)

本文详细介绍了Gromacs中xtc文件的配置技巧,帮助用户有效控制分子动力学模拟生成的文件大小。通过2024最新mdp参数模板和实战场景配置建议,用户可以在保留关键数据的同时避免存储空间不足的问题,特别适合初学者和实验室环境。

xxx12的博客 741

《解锁Windows Server用户权限管理秘籍,打造高效安全办公环境》

要为某个用户组赋予“读取和写入”权限,点击“添加”,输入该用户组的名称,点击“检查名称”,确认后选中该用户组,在下方的权限列表中勾选“读取”和“写入”权限,点击“确定”即可完成设置。在弹出的“计算机管理”窗口中,展开“本地用户和组”,右键点击“用户”,选择“新用户”。想象一下,企业的数据是一座宝库,员工是进入宝库的访客。在弹出的组属性窗口中,点击“添加”,在“选择用户或组”对话框中,输入要添加的用户名,点击“检查名称”,系统会自动匹配用户名,确认无误后点击“确定”,该用户就成功加入了指定的组。

xy520521的博客 560

Windows server2008r2基础学习(13):ntfs磁盘配额

如果不勾选此项,则某用户使用磁盘空间超过配额限制后,依然可以在磁盘内存储数据;如果勾选此项,用户使用磁盘空间达到配额后就无法再在磁盘内存储数据,而且会弹出拒绝对话框。磁盘配额是以文件和文件夹的所有权来计算:只要文件或文件夹的所有权属于某用户,就会占用该用户的磁盘配额。虽然名字里说是新用户,但对于开启磁盘配额前就已在磁盘内存储数据的用户来说,同样会受到磁盘配额的限制。配额项还可以对单个用户设置特定配额值和警告值,只需双击上图中的用户即可。点击配额界面中的配额项,可以看到用户配额的使用情况。

ab149162536的博客 1043

在linux的PC上挂载jffs2根文件系统映像

我们在调试硬件板时,经常需要做多个jffs2的根文件系统映像,有时也要对比其他途径得到的可用的jffs2根文件系统映像。 但jffs2的文件系统映像不象光盘的映像文件一样可以通过loop设备来挂载,总不可能一个个烧录到硬件板去看吧。 后来到网上google了一把,左翻右翻之后总算找到了一个方法。因为jffs2是构建于MTD设备上的文件系统,所以无法 通过loop设备来挂载,但是可以通过mtd

qiongguishanglu的专栏 1340

从零构建USB HID设备:一个嵌入式工程师的避坑指南与实战反思

本文分享了从零构建USB HID设备的实战经验与避坑指南,涵盖STM32CubeMX配置、报告描述符设计、硬件陷阱及主机兼容性测试。重点解析USB HID核心机制与自定义设备开发中的常见问题,帮助嵌入式工程师高效实现稳定可靠的HID设备。

y9z0a1b的博客 1040
上一篇: 利用位域与共用体优化CAN通信数据帧的嵌入式实践
下一篇: 从冯诺依曼到LED:用Qt点亮嵌入式系统的‘输出艺术’
普通网友
博客等级 码龄4年 95粉丝 1459原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值