当前位置: 首页 > news >正文

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/ptsmount -t tmpfs tmpfs /runmkdir -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

启动完成!!!

http://www.lryc.cn/news/94629.html

相关文章:

  • 网络协议与攻击模拟-15-DNS协议
  • ChatGPT将改变教育,而不是摧毁它
  • springboot在线考试
  • C国演义 [第三章]
  • 数字化时代,企业的数据指标体系
  • 三分钟了解 RocketMQ消息队列
  • golang redis第三方库github.com/go-redis/redis/v8实践
  • 校园网WiFi IPv6免流上网
  • java 阿里云直播配置及推拉流地址获取
  • PostgreSql 限制
  • 2023年java还是golang还是c#?
  • 微服务、SpringBoot、SpringCloud 三者的区别
  • 2023-07-10 cmake管理的项目中使用vcpkg管理第三方库
  • 【剑指offer】学习计划day3
  • QT DAY1
  • Mybatis-puls——条件查询的三种格式+条件查询null判定+查询投影
  • 网络安全(黑客)自学
  • 通过一个实际例子说明Django中的数据库操作方法OneToOneField()的用法【数据表“一对一”关系】
  • HarmonyOS学习路之开发篇—数据管理(对象关系映射数据库)
  • 实验:验证TCP套接字传输的数据不存在数据边界
  • 【网络】协议的定制与Json序列化和反序列化
  • 浙大数据结构第一周最大子列和问题
  • Selenium基础 — Selenium自动化测试框架介绍
  • 力扣竞赛勋章 | 排名分数计算脚本
  • win10 远程 ubuntu 18.04 桌面
  • c++ -- STL
  • 文字识别(OCR)介绍与开源方案对比
  • Modbus tcp转ETHERCAT在Modbus软件中的配置方法
  • 开源点云数据集整理汇总
  • 【全栈开发指南】VUE前端路由设计及配置