qemu中建立spcr的acpi table

2024-04-05 07:58
文章标签 table 建立 qemu acpi spcr

本文主要是介绍qemu中建立spcr的acpi table,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在qemu/hw/arm/virt-apci-build.c 中会创建传给guest的acpi table。这里我们以组建spcr为例
virt_acpi_build->build_spcr
static void
build_spcr(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
{AcpiSerialPortConsoleRedirection *spcr;const MemMapEntry *uart_memmap = &vms->memmap[VIRT_UART];int irq = vms->irqmap[VIRT_UART] + ARM_SPI_BASE;int spcr_start = table_data->len;
#得到spcr的首地址指针spcr = acpi_data_push(table_data, sizeof(*spcr));
#下面就是spcr的个个成员变量的赋值spcr->interface_type = 0x3;    /* ARM PL011 UART */spcr->base_address.space_id = AML_SYSTEM_MEMORY;spcr->base_address.bit_width = 8;spcr->base_address.bit_offset = 0;spcr->base_address.access_width = 1;spcr->base_address.address = cpu_to_le64(uart_memmap->base);spcr->interrupt_types = (1 << 3); /* Bit[3] ARMH GIC interrupt */spcr->gsi = cpu_to_le32(irq);  /* Global System Interrupt */spcr->baud = 3;                /* Baud Rate: 3 = 9600 */spcr->parity = 0;              /* No Parity */spcr->stopbits = 1;            /* 1 Stop bit */spcr->flowctrl = (1 << 1);     /* Bit[1] = RTS/CTS hardware flow control */spcr->term_type = 0;           /* Terminal Type: 0 = VT100 */spcr->pci_device_id = 0xffff;  /* PCI Device ID: not a PCI device */spcr->pci_vendor_id = 0xffff;  /* PCI Vendor ID: not a PCI device */
#将创建spcr table 的头信息build_header(linker, table_data, (void *)(table_data->data + spcr_start),"SPCR", table_data->len - spcr_start, 2, NULL, NULL);
}build_header(BIOSLinker *linker, GArray *table_data,AcpiTableHeader *h, const char *sig, int len, uint8_t rev,const char *oem_id, const char *oem_table_id)
{unsigned tbl_offset = (char *)h - table_data->data;unsigned checksum_offset = (char *)&h->checksum - table_data->data;memcpy(&h->signature, sig, 4);h->length = cpu_to_le32(len);h->revision = rev;
#scpr是否包括oem idif (oem_id) {strncpy((char *)h->oem_id, oem_id, sizeof h->oem_id);} else {memcpy(h->oem_id, ACPI_BUILD_APPNAME6, 6);}if (oem_table_id) {strncpy((char *)h->oem_table_id, oem_table_id, sizeof(h->oem_table_id));} else {memcpy(h->oem_table_id, ACPI_BUILD_APPNAME4, 4);memcpy(h->oem_table_id + 4, sig, 4);}h->oem_revision = cpu_to_le32(1);memcpy(h->asl_compiler_id, ACPI_BUILD_APPNAME4, 4);h->asl_compiler_revision = cpu_to_le32(1);/* Checksum to be filled in by Guest linker */
ask guest to add checksum of ACPI  * table in the specified file at the specified offset.
#在表中加入check sum信息,这段组建spcr table的逻辑和bios中的类似bios_linker_loader_add_checksum(linker, ACPI_BUILD_TABLE_FILE,tbl_offset, len, checksum_offset);
}

 

这篇关于qemu中建立spcr的acpi table的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/878044

相关文章

建立升序链表

题目1181:遍历链表 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2744 解决:1186 题目描述: 建立一个升序链表并遍历输出。 输入: 输入的每个案例中第一行包括1个整数:n(1<=n<=1000),接下来的一行包括n个整数。 输出: 可能有多组测试数据,对于每组数据, 将n个整数建立升序链表,之后遍历链表并输出。 样例输

vue2实践:el-table实现由用户自己控制行数的动态表格

需求 项目中需要提供一个动态表单,如图: 当我点击添加时,便添加一行;点击右边的删除时,便删除这一行。 至少要有一行数据,但是没有上限。 思路 这种每一行的数据固定,但是不定行数的,很容易想到使用el-table来实现,它可以循环读取:data所绑定的数组,来生成行数据,不同的是: 1、table里面的每一个cell,需要放置一个input来支持用户编辑。 2、最后一列放置两个b

Linux 云计算底层技术之一文读懂 Qemu 架构

Qemu 架构概览 Qemu 是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备,我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机,虚拟机认为自己和硬件打交道,但其实是和 Qemu 模拟出来的硬件打交道,Qemu 将这些指令转译给真正的硬件。 正因为 Qemu 是纯软件实现的,所有的指令都要经 Qemu 过一手,性能非常低,所以,在生产环境中,大多数的做法都是配合 KVM 来完成

通过Ajax请求后台数据,返回JSONArray(JsonObject),页面(Jquery)以table的形式展示

点击“会商人员情况表”,弹出层,显示一个表格,如下图: 利用Ajax和Jquery和JSONArray和JsonObject来实现: 代码如下: 在hspersons.html中: <!DOCTYPE html><html><head><meta charset="UTF-8"><title>会商人员情况表</title><script type="text/javasc

【内网】ICMP出网ew+pingtunnel组合建立socks5隧道

❤️博客主页: iknow181 🔥系列专栏: 网络安全、 Python、JavaSE、JavaWeb、CCNP 🎉欢迎大家点赞👍收藏⭐评论✍ 通过环境搭建,满足以下条件: 攻击机模拟公网vps地址,WEB边界服务器(Windows Server 2008)模拟公司对外提供Web服务的机器,该机器可以通内网,同时向公网提供服务。内网同网段存在一台Windows内网服务

UVa 10820 Send a Table (Farey数列欧拉函数求和)

这里先说一下欧拉函数的求法 先说一下筛选素数的方法 void Get_Prime(){ /*筛选素数法*/for(int i = 0; i < N; i++) vis[i] = 1;vis[0] = vis[1] = 0;for(int i = 2; i * i < N; i++)if(vis[i]){for(int j = i * i; j < N; j += i)vis[j] =

【IDEA】建立多个子模块依赖于一个父模块(maven)

第一步,建立父模块(在IDEA中就是工程) 第二步,选中父模块(也就是工程)右键New Module建立子模块 勾选创建模板原型并一般选择 maven-archetype-quickstart,当创建web模块时选择 maven-archetype-webapp 其他子模块都是类似这样创建~ packaging打包类型有: jar,默认类型warejbea

css-table

设置table的文字不换行:给th,td添加white-space: nowrap; 设置单元格内容及其边框的距离:使用html的cellpadding属性,还有一种方式设置padding。在CSS中,table, th, td{padding:0;}效果等同于cellpadding="0″。 设置table的单元格边距:border-spacing如果定义一个 length 参数,那么定义的是水

QEMU用户模式测试AARCH64程序

QEMU的两种模式 QEMU(快速模拟器)是一个开源的机器模拟器和虚拟化器,它能够模拟多种处理器架构,并且可以在不同平台上运行。QEMU 支持两种模式:用户模式和系统模式。 用户模式(User Mode): 用户模式下的 QEMU 仅模拟用户空间的二进制执行环境,不模拟底层硬件。这种模式下,QEMU 可以运行不同架构编译的二进制程序,而不需要这些程序与宿主机的架构相匹配。用户模式通常用于测试和

react antd table expandable defaultExpandAllRows 不生效问题

原因:defaultExpandAllRows只会在第一次渲染时触发 解决方案:渲染前判断table 的datasource 数据是否已准备好 {pageList.length > 0 ? (<TablerowSelection={rowSelection}columns={columns}dataSource={pageList}style={{ marginTop: 24 }}pagina