You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yocto Poky Warrior只读根文件系统下如何修改时区?

在只读根文件系统的Yocto Poky Warrior中修改时区的解决方案

我之前在基于树莓派CM3的Yocto Poky Warrior环境里碰到过完全一样的问题——只读根FS下timedatectl会因为无法写入/etc/localtime或/etc/timezone这类配置文件而报错。下面给你分场景提供实用的解决思路:

一、临时修改(重启后失效)

如果只是临时测试或者单次生效,最快的方法是通过环境变量TZ直接设置:

export TZ="America/New_York"

执行后当前shell会话的时区会立即生效,你可以用date命令验证。如果想让所有用户登录后都生效,可临时把根FS挂载为可读写,把这条命令追加到/etc/profile里:

mount -o remount,rw /
echo 'export TZ="America/New_York"' >> /etc/profile
mount -o remount,ro /

不过这种方式重启后会失效,适合临时场景。

二、永久修改(推荐,适配Yocto只读FS特性)

因为你的系统是Yocto构建的,最规范的做法是在构建阶段就配置好时区,这样生成的只读根FS会自带正确的时区设置,不需要在设备上修改:

  1. 打开Yocto构建目录下的conf/local.conf文件
  2. 添加或修改以下变量:
    TIMEZONE = "America/New_York"
    
  3. 重新构建镜像(替换成你实际使用的镜像名):
    bitbake core-image-minimal
    
    构建完成后,新镜像的/etc/localtime会自动指向正确的时区文件,而且因为是构建时生成的,只读FS下完全没问题。

三、已部署设备的永久修改(无需重新构建镜像)

如果设备已经部署,无法重新烧录镜像,可以利用overlayfs让/etc目录可写(这是Yocto只读FS场景下修改配置的标准做法):

  1. 先临时挂载根FS为可读写:
    mount -o remount,rw /
    
  2. 创建overlayfs所需的目录(如果不存在的话):
    mkdir -p /var/lib/overlay/etc/upper /var/lib/overlay/etc/work
    
  3. 修改/etc/fstab,添加overlayfs挂载项:
    echo "overlay /etc overlay lowerdir=/etc,upperdir=/var/lib/overlay/etc/upper,workdir=/var/lib/overlay/etc/work 0 0" >> /etc/fstab
    
  4. 重新挂载/etc:
    mount /etc
    
  5. 现在就可以正常执行timedatectl命令修改时区了:
    timedatectl set-timezone "America/New_York"
    
    这个修改会被存在/var/lib/overlay/etc/upper目录下,重启后依然生效,而且根FS其他部分还是只读状态,兼顾了稳定性和可配置性。

内容的提问来源于stack exchange,提问作者thesillywhat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 20:27:41