活动介绍
file-type

udev与sys动态创建Linux设备节点:ARM嵌入式系统实例

42KB | 更新于2024-08-30 | 132 浏览量 | 3 下载量 举报 收藏
download 立即下载
在嵌入式系统/ARM技术领域,本文探讨了在Linux 2.6内核之后,udev(用户空间设备管理系统)替代devfs作为动态创建设备结点的主要工具。devfs曾经的动态设备创建功能在udev中得到了延续和增强。Linhong Tao,作为华清远见嵌入式培训中心的讲师,通过实例展示了如何利用udev和sys(sysfs,一个内核对象文件系统)动态创建设备结点。 在现代Linux内核中,动态设备创建是通过以下步骤进行的: 1. **理解背景**: - devfs的过时:在Linux 2.6内核以后,devfs由于其复杂性和限制性被udev所取代,后者提供了更灵活且易于管理的设备节点创建方式。 2. **主要工具**: - udev:它负责根据设备树规则(udev rules)动态配置和管理设备节点,可以根据硬件设备的属性动态生成设备文件。 - sysfs:提供了一种在运行时查看和操作内核对象(如驱动程序和设备)的方法,它与udev配合使用,允许动态添加设备节点。 3. **关键代码示例**: - 示例代码展示了如何使用`cdev`(字符设备)和`device_create()`函数来创建动态设备。`#include`的头文件如`<linux/module.h>`、`<linux/device.h>`等都是为了支持这些功能。 - `hello.c`模块中的关键部分包括定义设备号(`hello_major`和`hello_minor`)、初始化设备(`cdev`结构),以及open、release和read方法,这些都是设备节点的基本操作。 4. **动态创建过程**: - 使用`device_create()`函数,通过设备号、设备名称、设备类型等参数创建设备结点。红色代码区域可能包含用于指定设备类型、属性以及路径的配置。 - 当设备被打开时(`hello_open()`),会打印相关信息表示设备已启用;关闭设备时(`hello_release()`),同样有相应的输出。 - 读取操作(`hello_read()`)则定义了数据传输逻辑,此处的`ssize_t hello_read()`展示了如何根据设备特性提供数据。 本文提供了在嵌入式系统中利用udev和sys动态创建Linux设备结点的详细指导,这对于理解和开发具有动态设备配置能力的嵌入式应用程序至关重要。通过学习和实践这些技术,开发人员能够更好地控制和管理他们的硬件资源。

相关推荐

filetype

root@test-10-1-18-12:/home/test/gpu-burn# udevadm test /sys/class/infiniband/mlx5_7 This program is for debugging only, it does not run any program specified by a RUN key. It may show incorrect results, because some values may be different, or not available at a simulation run. Trying to open "/etc/systemd/hwdb/hwdb.bin"... Trying to open "/etc/udev/hwdb.bin"... Trying to open "/usr/lib/systemd/hwdb/hwdb.bin"... Trying to open "/lib/systemd/hwdb/hwdb.bin"... Trying to open "/lib/udev/hwdb.bin"... === trie on-disk === tool version: 249 file size: 11124932 bytes header size 80 bytes strings 2374708 bytes nodes 8750144 bytes Load module index Found cgroup2 on /sys/fs/cgroup/, full unified hierarchy Found container virtualization none. Network interface NamePolicy= disabled on kernel command line, ignoring. Loaded timestamp for '/etc/systemd/network'. Loaded timestamp for '/run/systemd/network'. Parsed configuration file /usr/lib/systemd/network/99-default.link Parsed configuration file /usr/lib/systemd/network/73-usb-net-by-mac.link Created link configuration context. Loaded timestamp for '/etc/udev/rules.d'. Loaded timestamp for '/run/udev/rules.d'. Reading rules file: /usr/lib/udev/rules.d/01-md-raid-creating.rules Reading rules file: /etc/udev/rules.d/30-persistent-rdma.rules Reading rules file: /usr/lib/udev/rules.d/39-usbmuxd.rules Reading rules file: /usr/lib/udev/rules.d/40-usb_modeswitch.rules Reading rules file: /usr/lib/udev/rules.d/40-vm-hotadd.rules Reading rules file: /usr/lib/udev/rules.d/50-apport.rules Reading rules file: /usr/lib/udev/rules.d/50-firmware.rules Reading rules file: /usr/lib/udev/rules.d/50-udev-default.rules Reading rules file: /usr/lib/udev/rules.d/55-dm.rules Reading rules file: /usr/lib/udev/rules.d/55-scsi-sg3_id.rules Reading rules file: /usr/lib/udev/rules.d/56-dm-mpath.rules Reading rules file: /usr/lib/udev/rules.d/56-dm-parts.rules Reading rules file: /usr/lib/udev/rules.d/56-lvm.rules Reading rules file: /usr/lib/udev/rules.d/58-scsi-sg3_symlink.rules Reading rules file: /usr/lib/udev/rules.d/60-autosuspend.rules Reading rules file: /usr/lib/udev/rules.d/60-block.rules Reading rules file: /usr/lib/udev/rules.d/60-bridge-network-interface.rules Reading rules file: /usr/lib/udev/rules.d/60-cdrom_id.rules Reading rules file: /usr/lib/udev/rules.d/60-drm.rules Reading rules file: /usr/lib/udev/rules.d/60-evdev.rules Reading rules file: /usr/lib/udev/rules.d/60-fido-id.rules Reading rules file: /usr/lib/udev/rules.d/60-input-id.rules Reading rules file: /usr/lib/udev/rules.d/60-multipath.rules Reading rules file: /usr/lib/udev/rules.d/60-open-vm-tools.rules Reading rules file: /usr/lib/udev/rules.d/60-persistent-alsa.rules Reading rules file: /usr/lib/udev/rules.d/60-persistent-input.rules Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage-dm.rules Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage-tape.rules Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage.rules Reading rules file: /usr/lib/udev/rules.d/60-persistent-v4l.rules Reading rules file: /usr/lib/udev/rules.d/60-rdma-ndd.rules Reading rules file: /usr/lib/udev/rules.d/60-rdma-persistent-naming.rules Reading rules file: /usr/lib/udev/rules.d/60-sensor.rules Reading rules file: /usr/lib/udev/rules.d/60-serial.rules Reading rules file: /usr/lib/udev/rules.d/60-srp_daemon.rules Reading rules file: /usr/lib/udev/rules.d/60-tpm-udev.rules Reading rules file: /usr/lib/udev/rules.d/60-xpmem.rules Reading rules file: /usr/lib/udev/rules.d/61-persistent-storage-android.rules Reading rules file: /usr/lib/udev/rules.d/63-md-raid-arrays.rules Reading rules file: /usr/lib/udev/rules.d/64-btrfs-dm.rules Reading rules file: /usr/lib/udev/rules.d/64-btrfs-zoned.rules Reading rules file: /usr/lib/udev/rules.d/64-btrfs.rules Reading rules file: /usr/lib/udev/rules.d/64-md-raid-assembly.rules Reading rules file: /usr/lib/udev/rules.d/64-xorg-xkb.rules Reading rules file: /usr/lib/udev/rules.d/66-azure-ephemeral.rules Reading rules file: /usr/lib/udev/rules.d/66-snapd-autoimport.rules Reading rules file: /usr/lib/udev/rules.d/68-del-part-nodes.rules Reading rules file: /usr/lib/udev/rules.d/69-bcache.rules Reading rules file: /usr/lib/udev/rules.d/69-lvm-metad.rules Reading rules file: /usr/lib/udev/rules.d/69-md-clustered-confirm-device.rules Reading rules file: /usr/lib/udev/rules.d/70-iscsi-network-interface.rules Reading rules file: /usr/lib/udev/rules.d/70-joystick.rules Reading rules file: /usr/lib/udev/rules.d/70-memory.rules Reading rules file: /usr/lib/udev/rules.d/70-mouse.rules Reading rules file: /usr/lib/udev/rules.d/70-open-iscsi.rules Reading rules file: /usr/lib/udev/rules.d/70-power-switch.rules Reading rules file: /etc/udev/rules.d/70-snap.snapd.rules Reading rules file: /usr/lib/udev/rules.d/70-touchpad.rules Reading rules file: /usr/lib/udev/rules.d/70-uaccess.rules Reading rules file: /usr/lib/udev/rules.d/71-nvidia.rules Reading rules file: /usr/lib/udev/rules.d/71-power-switch-proliant.rules Reading rules file: /usr/lib/udev/rules.d/71-seat.rules Reading rules file: /usr/lib/udev/rules.d/71-u-d-c-gpu-detection.rules Reading rules file: /usr/lib/udev/rules.d/73-seat-late.rules Reading rules file: /usr/lib/udev/rules.d/73-special-net-names.rules Reading rules file: /usr/lib/udev/rules.d/75-net-description.rules Reading rules file: /usr/lib/udev/rules.d/75-probe_mtd.rules Reading rules file: /usr/lib/udev/rules.d/75-rdma-description.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-broadmobi-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-cinterion-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-dell-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-dlink-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-ericsson-mbm.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-fibocom-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-foxconn-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-gosuncn-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-haier-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-huawei-net-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-longcheer-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-mtk-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-nokia-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-qcom-soc.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-qdl-device-blacklist.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-quectel-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-sierra.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-simtech-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-telit-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-tplink-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-ublox-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-x22x-port-types.rules Reading rules file: /usr/lib/udev/rules.d/77-mm-zte-port-types.rules Reading rules file: /usr/lib/udev/rules.d/78-graphics-card.rules Reading rules file: /usr/lib/udev/rules.d/78-sound-card.rules Reading rules file: /usr/lib/udev/rules.d/80-debian-compat.rules Reading rules file: /usr/lib/udev/rules.d/80-drivers.rules Reading rules file: /usr/lib/udev/rules.d/80-mm-candidate.rules Reading rules file: /usr/lib/udev/rules.d/80-net-setup-link.rules Reading rules file: /usr/lib/udev/rules.d/80-udisks2.rules Reading rules file: /usr/lib/udev/rules.d/81-net-dhcp.rules Reading rules file: /usr/lib/udev/rules.d/83-mlnx-sf-name.rules Reading rules file: /usr/lib/udev/rules.d/85-hdparm.rules Reading rules file: /usr/lib/udev/rules.d/90-bolt.rules Reading rules file: /usr/lib/udev/rules.d/90-console-setup.rules Reading rules file: /usr/lib/udev/rules.d/90-fwupd-devices.rules Reading rules file: /usr/lib/udev/rules.d/90-ib.rules Reading rules file: /run/udev/rules.d/90-netplan.rules Reading rules file: /usr/lib/udev/rules.d/90-rdma-umad.rules Reading rules file: /usr/lib/udev/rules.d/95-dm-notify.rules Reading rules file: /usr/lib/udev/rules.d/95-kpartx.rules Reading rules file: /usr/lib/udev/rules.d/95-upower-hid.rules Reading rules file: /usr/lib/udev/rules.d/95-upower-wup.rules Reading rules file: /usr/lib/udev/rules.d/96-e2scrub.rules Reading rules file: /usr/lib/udev/rules.d/99-lxd-agent.rules Reading rules file: /etc/udev/rules.d/99-persistent-rdma.rules Reading rules file: /usr/lib/udev/rules.d/99-systemd.rules Reading rules file: /usr/lib/udev/rules.d/99-vmware-scsi-udev.rules value '[dmi/id]sys_vendor' is 'Giga Computing' value '[dmi/id]sys_vendor' is 'Giga Computing' mlx5_7: /usr/lib/udev/rules.d/75-rdma-description.rules:41 Importing properties from results of builtin command 'hwdb --subsystem=pci' mlx5_7: hwdb modalias key: "pci:v000015B3d00001021sv000015B3sd00000022bc02sc07i00" mlx5_7: sd-device: Created db file '/run/udev/data/+infiniband:mlx5_7' for '/devices/pci0000:c7/0000:c7:01.0/0000:c8:00.0/0000:c9:00.0/0000:ca:00.0/0000:cb:00.0/0000:cc:00.0/infiniband/mlx5_7' DEVPATH=/devices/pci0000:c7/0000:c7:01.0/0000:c8:00.0/0000:c9:00.0/0000:ca:00.0/0000:cb:00.0/0000:cc:00.0/infiniband/mlx5_7 NAME=mlx5_7 ACTION=add SUBSYSTEM=infiniband TAGS=:systemd: CURRENT_TAGS=:systemd: SYSTEMD_WANTS=rdma-ndd.service ID_RDMA_INFINIBAND=1 ID_RDMA_ROCE=1 ID_BUS=pci ID_VENDOR_ID=0x15b3 ID_MODEL_ID=0x1021 ID_PCI_CLASS_FROM_DATABASE=Network controller ID_PCI_SUBCLASS_FROM_DATABASE=Infiniband controller ID_VENDOR_FROM_DATABASE=Mellanox Technologies ID_MODEL_FROM_DATABASE=MT2910 Family [ConnectX-7] USEC_INITIALIZED=162756069 Unload module index Unloaded link configuration context. root@test-10-1-18-12:/home/test/gpu-burn#

weixin_38502915
  • 粉丝: 5
上传资源 快速赚钱