当逻辑设备表上查不到想要使用的物理设备会进程等待还是会查询SDT
时间: 2024-04-03 21:32:22 浏览: 22
当逻辑设备表上查不到想要使用的物理设备时,操作系统会进入等待状态,直到该物理设备可用,并由设备驱动程序完成设备的初始化和分配。在等待期间,操作系统可以将进程挂起或者放入阻塞队列中,等待设备可用再唤醒进程。
如果该物理设备一直没有变为可用状态,操作系统会尝试查询SDT(系统设备表),以查找该设备是否已经存在于系统中。如果该设备已经存在于系统中,操作系统会尝试重新初始化该设备,并将其分配给请求使用该设备的进程。否则,操作系统会返回错误信息,提示无法找到该设备。
相关问题
Linux C bitstream生成SDT表
生成SDT(System Description Table)表需要对ACPI(Advanced Configuration and Power Interface)进行操作。ACPI是一种电源管理和设备配置标准,它定义了一套接口和数据结构,于操作系统与硬件之间的通信。
在Linux中,可以使用ACPI编译器工具集(ACPI Compiler Toolset)来生成SDT表。ACPI编译器工具集包含了一个名为`iasl`的工具,它可以将ACPI源代码编译成二进制的AML(ACPI Machine Language)文件。
以下是一个简单的示例,展示如何使用`iasl`工具生成SDT表:
1. 首先,确保你的系统上已经安装了ACPI编译器工具集。可以使用以下命令来安装:
```shell
sudo apt-get install acpica-tools
```
2. 创建一个名为`my_sdt.asl`的ACPI源代码文件,内容如下:
```c
DefinitionBlock ("my_sdt.aml", "DSDT", 2, "CUST", "CUST", 0x1)
{
Scope (\_SB)
{
Device (MYDEV)
{
Name (_HID, "MYDEV001")
Name (_CID, "MYDEV001")
// 添加其他必要的设备描述
}
}
}
```
这是一个简单的SDT表定义,它定义了一个名为`MYDEV`的设备,并设置了一些设备描述符。你可以根据你的需求进行修改。
3. 使用以下命令将ACPI源代码编译成AML文件:
```shell
iasl -tc my_sdt.asl
```
这将生成一个名为`my_sdt.aml`的AML文件,其中包含了SDT表的二进制数据。
请注意,生成SDT表需要对ACPI和操作系统内核有一定的了解。在实际应用中,你可能需要根据具体的硬件和需求进行更详细的配置和操作。
Linux C libpsisi库实现生成DVB sdt表
你可以使用C语言编写代码来生成DVB SDT(Service Description Table)表。要实现这个功能,你可以使用libpsisi库来构建和生成SDT表的数据。
首先,你需要安装libpsisi库并包含它的头文件。然后,你可以使用以下步骤来生成SDT表:
1. 创建一个PSI(Program Specific Information)的结构体,并初始化它。这个结构体包含了SDT表的各个字段,如table_id、section_length、transport_stream_id等。
```c
psi_sdt_t sdt;
memset(&sdt, 0, sizeof(psi_sdt_t));
// 设置SDT表的字段
sdt.table_id = PSI_SDT_TABLE_ID; // SDT表的table_id
sdt.section_length = 0; // 后续数据的长度,在生成SDT表后会被更新
sdt.transport_stream_id = transport_stream_id; // 传输流ID
// ...
```
2. 创建一个PSI的数据流,并将SDT表的结构体添加到数据流中。
```c
psi_data_t psi_data;
psi_data_init(&psi_data);
// 添加SDT表的结构体到数据流中
psi_data_add_sdt(&psi_data, &sdt);
```
3. 生成SDT表的二进制数据。
```c
uint8_t *sdt_data;
size_t sdt_data_length;
// 生成SDT表的二进制数据
psi_data_generate(&psi_data, &sdt_data, &sdt_data_length);
```
4. 更新SDT表的section_length字段。
```c
// 更新SDT表的section_length字段
sdt.section_length = sdt_data_length - PSI_SECTION_HEADER_LENGTH;
```
现在,你就可以使用生成的SDT表的二进制数据进行后续的处理,比如写入到文件或发送到DVB设备中。
请注意,上述代码只是一个简单的示例,你可能需要根据你的具体需求进行适当的修改。此外,生成SDT表还需要填充其他字段,如service_id、service_name等,以确保生成的SDT表符合你的要求。你可以参考libpsisi库的文档和示例代码来了解更多细节和用法。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)