Linux 从初始化脚本(PID=1)启动PSFlash时,PSFlash写入不工作
我已经为NVIDIA Jetson Nano将PSFlash集成到定制的Yocto层中。我想从第一个init脚本(PID=1)运行psplash。原因是为了涵盖systemd加载单元和服务文件所花费的时间。我已经在Linux内核参数中添加了Linux 从初始化脚本(PID=1)启动PSFlash时,PSFlash写入不工作,linux,bash,yocto,nvidia-jetson,Linux,Bash,Yocto,Nvidia Jetson,我已经为NVIDIA Jetson Nano将PSFlash集成到定制的Yocto层中。我想从第一个init脚本(PID=1)运行psplash。原因是为了涵盖systemd加载单元和服务文件所花费的时间。我已经在Linux内核参数中添加了init=/bin/newinit.sh。下面是替换我的/sbin/init的/bin/newinit.sh的内容 #!/bin/sh /usr/bin/psplash & /bin/psplashanimator.sh & exec /sbi
init=/bin/newinit.sh
。下面是替换我的/sbin/init
的/bin/newinit.sh
的内容
#!/bin/sh
/usr/bin/psplash &
/bin/psplashanimator.sh &
exec /sbin/init
以下是/bin/psplashanimator.sh
#!/bin/sh
/bin/sleep 0.1 && /usr/bin/psplash-write "PROGRESS 50"
我通过禁用systemd守护进程(psplash start,psplash systemd),确保任何其他进程都不会调用psplash write
。但是,我无法使用这些脚本更新进度条。PSFlash显示得很好,但进度条上没有显示任何内容。
如果我将/bin/sleep 0.1&&/usr/bin/psplash写入/bin/newinit.sh
之前的exec
,它工作正常;但它会阻止init脚本的主执行
总而言之,如果在自定义init脚本中启动psplash,那么psplash write只在调用exec之前工作。我不明白为什么会这样以及如何解决
如果有一个简单的解决方案或理由来解释为什么这不起作用,我将非常感谢您的指导
注1:请注意,使用systemd服务(psplash systemd.service
)更新psplash的传统方法在使用psplash start.service
启动psplash时工作正常,我会获得进度条更新
注2:PSFlash使用帧缓冲区驱动程序和FIFO
注3:相关源文件:
注意4:当前systemd执行(让您看看我是否缺少在运行PSFlash之前必须准备好的内容)
我对PSFlash和systemd没有100%的把握,但在这种情况下,您可能需要在您的环境中使用类似的东西来控制PSFlash:
导出TMPDIR=/mnt/.psplash你知道为什么了吗?我想我正在处理同样的问题。@AdamLee不幸的是,我无法解决这个问题,并使用一些无效的变通方法解决了我的问题,因为解决方案对我的应用程序并不重要。