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

有没有做图的网站全网最低价购物平台

有没有做图的网站,全网最低价购物平台,建工教育网,seo技术培训东莞这段代码实现了 Linux 设备模型中的一个重要功能:**在 /sys/dev 目录下创建设备号到实际设备的符号链接**。以下从五个关键维度进行深度解析: --- ### 一、功能定位与作用 #### 1. **核心功能** - 在 /sys/dev/char/ 或 /sys/dev/block/ 目录下创建形如…

这段代码实现了 Linux 设备模型中的一个重要功能:**在 `/sys/dev` 目录下创建设备号到实际设备的符号链接**。以下从五个关键维度进行深度解析:

---

### 一、功能定位与作用
#### 1. **核心功能**
- 在 `/sys/dev/char/` 或 `/sys/dev/block/` 目录下创建形如 `<major>:<minor>` 的符号链接,指向设备的真实 sysfs 路径
- 提供**设备号→设备**的快速查找能力

#### 2. **典型路径示例**
```bash
# 字符设备
/sys/dev/char/4:64 → ../../devices/virtual/tty/ttyS0

# 块设备
/sys/dev/block/8:0 → ../../devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
```

---

### 二、代码逻辑分解

#### 1. **设备目录选择策略 (`device_to_dev_kobj`)**
```c
if (dev->class)
    kobj = dev->class->dev_kobj;  // 使用类指定的kobj(如块设备类指向sysfs_dev_block_kobj)
else
    kobj = sysfs_dev_char_kobj;   // 默认字符设备目录
```
- **设计意图**:
  - 块设备需要特殊处理(如磁盘分区)
  - 允许设备类自定义 dev_kobj(通过 `class->dev_kobj`)

#### 2. **设备号格式化**
```c
format_dev_t(devt_str, dev->devt);  // 将dev_t转换为"major:minor"格式
```
- 示例:`MKDEV(4, 64)` → `"4:64"`

#### 3. **符号链接创建**
```c
sysfs_create_link(kobj, &dev->kobj, devt_str);
```
- 创建从设备号到设备对象的持久关联

---

### 三、设计思想剖析

#### 1. **双视图分离原则**
| 视图类型       | 路径                  | 组织方式         | 用途                     |
|----------------|-----------------------|------------------|--------------------------|
| **设备号视图** | `/sys/dev/{char,block}`| 按设备号分类     | 通过设备号快速定位设备   |
| **拓扑视图**   | `/sys/devices/`       | 按硬件连接关系   | 反映物理/逻辑设备层次    |

#### 2. **动态决策机制**
- **默认策略**:字符设备优先(历史兼容性)
- **类覆盖机制**:块设备类可重定向到 `/sys/dev/block/`
- **显式禁用**:设置 `class->dev_kobj = NULL` 跳过创建

#### 3. **生命周期同步**
- 必须在设备注册到类**之前**设置 `class->dev_kobj`
- 保证 `create` 和 `remove` 操作对链接存在性判断一致

---

### 四、关键数据结构

```mermaid
classDiagram
    class device {
        +dev_t devt
        +struct class *class
        +struct kobject kobj
    }
    class class {
        +struct kobject *dev_kobj
    }
    device "1" --> "0..1" class
```

- **设备号存储**:`dev->devt`(32位,包含主次设备号)
- **目录选择**:通过 `class->dev_kobj` 实现多态

---

### 五、实际应用场景

#### 1. **字符设备创建**
```c
struct cdev my_cdev;
dev_t dev = MKDEV(250, 0);
cdev_add(&my_cdev, dev, 1);
// 自动在 /sys/dev/char/250:0 创建链接
```

#### 2. **块设备特殊处理**
```c
struct class block_class = {
    .name = "block",
    .dev_kobj = sysfs_dev_block_kobj,  // 重定向到block目录
};
```

#### 3. **禁用链接创建**
```c
struct class my_class = {
    .name = "misc",
    .dev_kobj = NULL  // 不创建/dev/链接
};
```

---

### 六、错误处理与边界条件

#### 1. **异常情况处理**
| 场景                    | 处理方式                     | 返回值  |
|-------------------------|----------------------------|---------|
| devt未初始化            | 不会调用此函数              | -       |
| kobj为NULL              | 跳过链接创建                | 0       |
| 设备号格式化失败        | 不可能(devt_str静态分配)  | -       |
| 符号链接已存在          | 返回-EEXIST                | -EEXIST |

#### 2. **并发安全**
- 依赖上层调用(如 `device_add`)保证设备注册的原子性
- sysfs 内部通过 `kernfs_mutex` 保护链接操作

---

### 七、扩展思考

#### 1. **为什么需要设备号视图?**
- **历史兼容**:与传统的 `/dev` 目录结构对应
- **调试便利**:通过 `ls -l /sys/dev/char` 快速查看所有字符设备
- **逆向查找**:已知设备号时快速定位设备信息

#### 2. **与 udev 的关系**
- udev 会监控 `/sys/dev/` 下的变化
- 设备链接创建后触发 udev 规则匹配,生成 `/dev` 节点

#### 3. **性能影响**
- 每个设备增加:
  - 1个符号链接(约24字节内存)
  - 1次哈希表插入(设备号→kobject查找)

这段代码展现了 Linux 设备模型如何优雅地桥接传统设备号体系与现代 sysfs 架构,通过简单的链接机制实现了设备多维访问路径的统一。

http://www.dtcms.com/wzjs/795100.html

相关文章:

  • 做网站用什么版本系统网页制作下载链接怎么做
  • 郑州网站建设 推广百度不收录网站描述
  • 网站制作前期所需要准备手机网站欢迎页面设计
  • 阿里建站系统成都app开发价格表
  • 做自媒体网站需要注册什么公司wordpress页面缓慢
  • 石家庄网站外包安徽服饰网站建设
  • 漯河网站制作公司做seo的网站推广
  • 有什么做家纺的网站欧洲外贸平台
  • 建设企业网站公中铁中基建设集团网站
  • 网站建设要什么软件有哪些申请域名后 怎么把网站部署上去
  • 献县网站建设泰州网站制作方案定制
  • 手机网站开发设计北京建网
  • 短视频网站的动画是怎么做的数字博物馆网站建设内容
  • dede网站迁移步骤小制作怎么做
  • 专业的上海网站建设学编程选什么专业
  • 安徽省建设厅网站职称申报请将已备案网站接入访问
  • 网站欢迎页面设计网站开发角色分类
  • 有没有免费网站制作沧浪企业建设网站价格
  • 网站开发保密合同有没有专门做家乡图片的网站
  • 做AMC12的题的网站网站建设公司网站建设专业品牌
  • 去什么网站找做电影的素材婚纱摄影网站优化技巧
  • 网站导航栏是什么微信小程序广告收益
  • 邯郸企业做网站推广大庆网站建设公司
  • 潜江公司做网站山东家居行业网站开发
  • php做网站半成品流量联盟网站源码
  • 如何建立官方网站网站建设流程 费用
  • 屏蔽网页 的网站备案域名购买成功后如何使用
  • 台州网站制作定制招聘网站页面设计图片
  • dw模板制作网站的缺点免费海外网站建设
  • 免费空间+网站空间+虚拟主机电商是什么职业