arm海思启动udev的错误

近日在配置HI3531D的文件时发现错误

random: udevd: uninitialized urandom read (16 bytes read)
random: udevd: uninitialized urandom read (16 bytes read)

udev 是一个为你的计算机提供设备事件的 Linux 子系统。通俗来讲就是,当你的计算机上插入了像网卡、外置硬盘(包括 U 盘)、鼠标、键盘、游戏操纵杆和手柄、DVD-ROM 驱动器等等设备时,代码能够检测到它们。这样就能写出很多可能非常有用的实用程序,而它已经很好了,普通用户就可以写出脚本去做一些事情,比如当某个硬盘驱动器插入时,执行某个任务。

这篇文章教你去如何写一个由一些 udev 事件触发的 udev 脚本,比如插入了一个 U 盘。当你理解了 udev 的工作原理,你就可以用它去做各种事情,比如当一个游戏手柄连接后加载一个指定的驱动程序,或者当你用于备份的驱动器连接后,自动执行备份工作。

在网络上搜到如下内容:

udevd uninitialized urandom read 错误通常与系统启动时加载的 udev 守护程序有关。udev 用于管理 Linux 系统中的设备,并创建相应的设备节点。

该错误通常出现在系统启动时,当 udev 守护程序启动时,如果系统没有足够的随机数种子,就会出现该错误。随机数种子用于创建随机数,在 Linux 中,随机数种子是通过读取 /dev/urandom 设备文件来获取的。

因此,如果系统启动时无法读取足够的随机数种子,udev 守护程序就会失败并显示“udevd uninitialized urandom read”错误。

最终分析是因为 /dev/random 设备启动过慢,随机数还不能用。

要解决此问题,可以尝试以下方法:

1.在启动时添加“random.trust_cpu=on”参数

可以通过在系统启动时添加“random.trust_cpu=on”参数来解决此问题。这会告诉系统使用 CPU 内部的随机数生成器来生成随机数种子,从而避免出现“udevd uninitialized urandom read”错误。
本人试过此方法,在uboot中加了“random.trust_cpu=on“没有什么用,估计是CPU架构不同。也可以在内核中添加补丁来实现,操作比较复杂,就没有试了。

2.安装“haveged”软件包

下载链接:
haveged-1.9.2.tar.gz或
https://github.com/jirka-h/haveged

解压后。

./configure --host=aarch64-himix200-linux --prefix=pwd/install --enable-static --disable-shared
其中 --host=aarch64-himix200-linux 是指定交叉编译平台
–prefix=pwd/install 指定目标库和可执行程序的路径为目前路径的install目录下

–enable-static --disable-shared 指定为静态编译。
由于是开机haveged是开机启动,动态库的路径还没有指定,所以用静态库好一些

将编译好的install/sbin/haveged 拷贝到文件系统的sbin目录下。
在udev的启动脚本/etc/init.d/S01udev中添加

#!/bin/sh
haveged -F -d 32 -w 1024 --verbose=1 &
sleep 1
mkdir /dev/pts
mount -t devpts devpts /dev/pts

mount -t tmpfs tmpfs /run

mkdir -p /dev/.udev
udevd --daemon
udevadm trigger
mdev -s

重新启动后
显示

haveged starting up
haveged: ver: 1.9.2; arch: generic; vend: ; build: (gcc 7.3.0 CTV); collect: 128K
haveged: cpu: (VC); data: 32K (P); inst: 16K (D); idx: 10/40; sz: 15464/71260
haveged: tot tests(BA8): A:1/1 B:1/1 continuous tests(B):  last entropy estimate 7.99538
haveged: fills: 0, generated: 0 
random: crng init done
udevd[985]: starting version 3.2.9
udevd[986]: starting eudev-3.2.9
[RCS]: /etc/init.d/S80network

启动完成!!!

你可能感兴趣的:(arm开发)