Ubuntu绑定设备与设备节点

本文旨在解决Linux发行版之一的Ubuntu设备节点绑定的问题,其他Linux发行版也可参照本文步骤。该问题具体描述如下:

例如,现在有两个USB设备,一个为卫星通信模块(以下简称卫星模块),另外一个为无线电通信模块(以下简称无线模块)。

默认情况下,Ubuntu会按照接入顺序接入设备分配设备节点。但是,由于这两个模块均一直插在Ubuntu设备上,并没有强烈的先后顺序,因此其接入顺序是随机的:可能/dev/ttyUSB0对应卫星模块,/dev/ttyUSB1对应无线模块;也可能/dev/ttyUSB0对应无线模块,/dev/ttyUSB1对应卫星模块。

对于这种情况,由于设备与设备节点之间的关系并不固定,实际使用时会造成诸多不便。因此,往往需要将设备与特定的设备节点相绑定。

看完本文,您将了解如何在Ubuntu系统上绑定设备与设备节点。

一、查看厂商id与设备id

为了绑定设备与设备节点,我们首先需要查看设备的厂商id和设备id。假设该设备当前的设备节点为/dev/ttyUSB0,此时打开终端,键入下面的命令:

udevadm info -q property -n /dev/ttyUSB0

可以得到下面的执行结果,其中,ID_VENDOR_ID即为厂商ID,ID_MODEL_ID即为设备ID。我们记录这两个ID的值。

二、创建绑定规则

接着,我们需要创建绑定规则。Ubuntu的绑定规则位于/etc/udev/rules.d目录下,我们在该目录下创建规则文件,文件名可以任意,但尽量规范,方便后续管理。

sudo nano /etc/udev/rules.d/add-usb-rule.rules

在打开的编辑窗口中输入以下内容,其中,idVendor的等号后填写前面的厂商ID,idProduct的等号后填写前面的设备ID,SYSLINK+等号后填写你想绑定的设备节点。这里我的厂商ID为“1a86”,设备ID为“7523”,设备节点为“wirelessModule”。如果想添加多条绑定规则,则换行后按照相同的方式添加即可。

KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="wirelessModule"

创建完成后,请务必重启Ubuntu系统

三、检验绑定

重启完成后,打开Ubuntu终端,输入以下命令检验是否绑定成功,请将grep之后的名称替换为你设定的设备节点名称:

ls /dev | grep wirelessModule

执行结果如图所示:

此后,我们就可以通过/dev/wirelessModule节点访问该设备,该映射是持久的,重启或者关机之后该映射依旧存在。

### 如何在 Ubuntu 18.04 上配置和使用设备树(Device Tree)驱动 #### 配置设备树编译环境 为了能够在 Ubuntu 18.04 上成功配置并使用设备树驱动,首先需要安装必要的工具链以及依赖项。可以通过以下命令来设置开发环境: ```bash sudo apt update && sudo apt upgrade -y sudo apt install build-essential device-tree-compiler git-core u-boot-tools -y ``` 这些软件包提供了构建设备树所需的工具和支持库[^1]。 #### 获取目标平台的设备树源码 通常情况下,Linux 内核已经包含了大多数常见硬件的默认设备树支持。如果需要自定义修改或者针对特定板卡调整,则可以从 Linux 内核仓库克隆最新的设备树文件: ```bash git clone https://github.com/torvalds/linux.git linux-source cd linux-source/arch/arm/boot/dts/ ``` 这里假设目标架构为 ARM;如果是其他架构,请替换 `arm` 路径部分。通过浏览该目录下的 `.dts` 文件可以找到适合的目标设备树模板[^2]。 #### 修改设备树文件 编辑对应的 `.dts` 文件以满足具体需求。例如增加新的 GPIO 定义、I2C 总线扩展或者其他外设连接参数等操作均在此阶段完成。以下是简单的 GPIO 设置例子: ```dts &gpio { pinctrl-names = "default"; status = "okay"; led_pins: pinmux_leds { mux { function = "gpio"; pins = <PINCTRL_PIN(7, PINCTRL_PINGROUP_7)>; }; }; gpio-leds { compatible = "gpio-leds"; myled { label = "status"; gpios = <&gpio 7 0>; /* 假定GPIO编号 */ }; }; }; ``` 此片段展示了如何向现有 DTS 添加一个新的 LED 控制节点,并将其绑定到指定的 GPIO 引脚上[^3]。 #### 编译设备树二进制对象 (DTB) 当所有的更改完成后,利用之前安装好的 dtc 工具将更新后的 .dts 文件转换成内核可读取的形式即 DTB 文件: ```bash dtc -O dtb -o /path/to/output.dtb -b 0 -@ input-file.dts ``` 其中 `-O dtb` 表明输出格式为目标 DTB 文件形式,而 `-o` 参数指定了最终生成文件的位置路径[^4]。 #### 加载验证设备树 最后一步就是确保新创建出来的 DTB 文件能够被正确加载至运行中的系统当中去。这可能涉及到重新编译整个内核镜像或将额外的模块加入引导程序之中。对于某些嵌入式项目来说,也可能仅仅只需要简单地复制覆盖原有的 DTB 即可生效。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值