如何判断smmu是否初始化成功呢?
来源:互联网 发布:软件测试加班 编辑:程序博客网 时间:2024/06/05 15:02
kernel 开机的时候会执行postcore_initcall
static struct class iommu_class = {
.name = "iommu",
.dev_release = iommu_release_device,
.dev_groups = iommu_dev_groups,
};
static int __init iommu_dev_init(void)
{
return class_register(&iommu_class);
}
postcore_initcall(iommu_dev_init);
从而会调用class_register,这个函数调用之后会在sys目录下建立一个新的class,如下所示
[root@centos iommu]# pwd
/sys/class/iommu
不过这个/sys/class/iommu下是空的。
static struct attribute *devices_attr[] = {
NULL,
};
static const struct attribute_group iommu_devices_attr_group = {
.name = "devices",
.attrs = devices_attr,
};
static const struct attribute_group *iommu_dev_groups[] = {
&iommu_devices_attr_group,
NULL,
};
从attribute 也可以看出这个/sys/class/iommu 应该是空的。按照文档上说当一个device添加到smmu时候,会link到这个group,但是在我已经有两个device的情况下这个目录也还是空的
oot@ubuntu:/sys/kernel/iommu_groups/1/devices/000d:30:00.0# ll
total 0
drwxr-xr-x 4 root root 0 Jan 1 1970 ./
drwxr-xr-x 6 root root 0 Jan 1 1970 ../
-rw-r--r-- 1 root root 65536 Mar 7 10:35 broken_parity_status
-r--r--r-- 1 root root 65536 Mar 7 10:26 class
-rw-r--r-- 1 root root 4096 Mar 7 10:35 config
-r--r--r-- 1 root root 65536 Mar 7 10:35 consistent_dma_mask_bits
-rw-r--r-- 1 root root 65536 Mar 7 10:35 d3cold_allowed
-r--r--r-- 1 root root 65536 Mar 7 10:35 device
-r--r--r-- 1 root root 65536 Mar 7 10:35 devspec
-r--r--r-- 1 root root 65536 Mar 7 10:35 dma_mask_bits
lrwxrwxrwx 1 root root 0 Mar 7 10:35 driver -> ../../../bus/pci/drivers/pcieport/
-rw-r--r-- 1 root root 65536 Mar 7 10:35 driver_override
-rw-r--r-- 1 root root 65536 Mar 7 10:35 enable
lrwxrwxrwx 1 root root 0 Mar 7 10:35 iommu_group -> ../../../kernel/iommu_groups/1/
-r--r--r-- 1 root root 65536 Mar 7 10:26 irq
-r--r--r-- 1 root root 65536 Mar 7 10:35 local_cpulist
-r--r--r-- 1 root root 65536 Mar 7 10:26 local_cpus
-r--r--r-- 1 root root 65536 Mar 7 10:35 modalias
-rw-r--r-- 1 root root 65536 Mar 7 10:35 msi_bus
-rw-r--r-- 1 root root 65536 Mar 7 10:26 numa_node
drwxr-xr-x 3 root root 0 Jan 1 1970 pci_bus/
drwxr-xr-x 2 root root 0 Mar 7 10:35 power/
--w--w---- 1 root root 65536 Mar 7 10:35 remove
--w--w---- 1 root root 65536 Mar 7 10:35 rescan
--w------- 1 root root 65536 Mar 7 10:35 reset
-r--r--r-- 1 root root 65536 Mar 7 10:35 resource
-rw------- 1 root root 131072 Mar 7 10:35 rom
lrwxrwxrwx 1 root root 0 Jan 1 1970 subsystem -> ../../../bus/pci/
-r--r--r-- 1 root root 65536 Mar 7 10:35 subsystem_device
-r--r--r-- 1 root root 65536 Mar 7 10:35 subsystem_vendor
-rw-r--r-- 1 root root 65536 Jan 1 1970 uevent
-r--r--r-- 1 root root 65536 Mar 7 10:35 vendor
例如在/sys/kernel/iommu_groups 下面已经有两个device的情况下/sys/class/iommu 也还是空的
而这个iommu_groups 也是kernel 初始化阶段通过调用iommu_init 来添加的。
static int __init iommu_init(void)
{
iommu_group_kset = kset_create_and_add("iommu_groups",
NULL, kernel_kobj);
BUG_ON(!iommu_group_kset);
return 0;
}
core_initcall(iommu_init);
因此smmu是否成功初始化,应该要看iommu_groups 下是否有device,如本例就是有两个device,其中device的编号从0开始.
static struct class iommu_class = {
.name = "iommu",
.dev_release = iommu_release_device,
.dev_groups = iommu_dev_groups,
};
static int __init iommu_dev_init(void)
{
return class_register(&iommu_class);
}
postcore_initcall(iommu_dev_init);
从而会调用class_register,这个函数调用之后会在sys目录下建立一个新的class,如下所示
[root@centos iommu]# pwd
/sys/class/iommu
不过这个/sys/class/iommu下是空的。
static struct attribute *devices_attr[] = {
NULL,
};
static const struct attribute_group iommu_devices_attr_group = {
.name = "devices",
.attrs = devices_attr,
};
static const struct attribute_group *iommu_dev_groups[] = {
&iommu_devices_attr_group,
NULL,
};
从attribute 也可以看出这个/sys/class/iommu 应该是空的。按照文档上说当一个device添加到smmu时候,会link到这个group,但是在我已经有两个device的情况下这个目录也还是空的
oot@ubuntu:/sys/kernel/iommu_groups/1/devices/000d:30:00.0# ll
total 0
drwxr-xr-x 4 root root 0 Jan 1 1970 ./
drwxr-xr-x 6 root root 0 Jan 1 1970 ../
-rw-r--r-- 1 root root 65536 Mar 7 10:35 broken_parity_status
-r--r--r-- 1 root root 65536 Mar 7 10:26 class
-rw-r--r-- 1 root root 4096 Mar 7 10:35 config
-r--r--r-- 1 root root 65536 Mar 7 10:35 consistent_dma_mask_bits
-rw-r--r-- 1 root root 65536 Mar 7 10:35 d3cold_allowed
-r--r--r-- 1 root root 65536 Mar 7 10:35 device
-r--r--r-- 1 root root 65536 Mar 7 10:35 devspec
-r--r--r-- 1 root root 65536 Mar 7 10:35 dma_mask_bits
lrwxrwxrwx 1 root root 0 Mar 7 10:35 driver -> ../../../bus/pci/drivers/pcieport/
-rw-r--r-- 1 root root 65536 Mar 7 10:35 driver_override
-rw-r--r-- 1 root root 65536 Mar 7 10:35 enable
lrwxrwxrwx 1 root root 0 Mar 7 10:35 iommu_group -> ../../../kernel/iommu_groups/1/
-r--r--r-- 1 root root 65536 Mar 7 10:26 irq
-r--r--r-- 1 root root 65536 Mar 7 10:35 local_cpulist
-r--r--r-- 1 root root 65536 Mar 7 10:26 local_cpus
-r--r--r-- 1 root root 65536 Mar 7 10:35 modalias
-rw-r--r-- 1 root root 65536 Mar 7 10:35 msi_bus
-rw-r--r-- 1 root root 65536 Mar 7 10:26 numa_node
drwxr-xr-x 3 root root 0 Jan 1 1970 pci_bus/
drwxr-xr-x 2 root root 0 Mar 7 10:35 power/
--w--w---- 1 root root 65536 Mar 7 10:35 remove
--w--w---- 1 root root 65536 Mar 7 10:35 rescan
--w------- 1 root root 65536 Mar 7 10:35 reset
-r--r--r-- 1 root root 65536 Mar 7 10:35 resource
-rw------- 1 root root 131072 Mar 7 10:35 rom
lrwxrwxrwx 1 root root 0 Jan 1 1970 subsystem -> ../../../bus/pci/
-r--r--r-- 1 root root 65536 Mar 7 10:35 subsystem_device
-r--r--r-- 1 root root 65536 Mar 7 10:35 subsystem_vendor
-rw-r--r-- 1 root root 65536 Jan 1 1970 uevent
-r--r--r-- 1 root root 65536 Mar 7 10:35 vendor
例如在/sys/kernel/iommu_groups 下面已经有两个device的情况下/sys/class/iommu 也还是空的
而这个iommu_groups 也是kernel 初始化阶段通过调用iommu_init 来添加的。
static int __init iommu_init(void)
{
iommu_group_kset = kset_create_and_add("iommu_groups",
NULL, kernel_kobj);
BUG_ON(!iommu_group_kset);
return 0;
}
core_initcall(iommu_init);
因此smmu是否成功初始化,应该要看iommu_groups 下是否有device,如本例就是有两个device,其中device的编号从0开始.
0 0
- 如何判断smmu是否初始化成功呢?
- 如何判断easyui是否初始化
- c#中如何判断查找是否成功
- 如何判断statement插入是否成功
- 如何判断statement插入是否成功
- opencv如何判断图片是否加载成功
- mongodb如何判断一次操作是否成功
- 如何判断TCP包是否发送成功
- 如何判断TCP数据包是否发送成功
- 如何判断hibernate 存储数据是否成功
- smmu学习笔记之smmu v3 初始化
- 如何判断图形文件的格式是否是JPEG呢?
- 如何判断一个数是否是素数呢?<小学生>
- smmu 学习笔记 之初始化
- 如何判断android 短信发送(sendTextMessage)是否成功
- 如何判断配置的JDK和AndroidSDK是否成功
- shell 中如何判断前一个命令是否执行成功
- 如何判断android 短信发送(sendTextMessage)是否成功
- Android高级学习之xUtils3源码解析
- 对SDM算法的一些改进
- Pandas数据类型及操作
- 图片压缩的两种形式(压缩到指定尺寸和压缩到指定大小)
- activiti工作流的web流程设计器整合视频教程 SSM和独立部署
- 如何判断smmu是否初始化成功呢?
- Datatables 自定义按钮
- c和c++中动态内存分配
- Ansible 系列之 Playbooks 剧本 (1)
- 万万没想到吧?三星竟然已悄悄展出S8
- Configuration System Initialization Process
- 今天先说说看到的 上海商创网络科技有限公司被刷屏
- tomcat7 catalina.out切割
- 【自定义控件】圆形时钟