我想在终端上工作时检索当前的BIOS版本和名称.
可以找到它的命令是什么?
我并不疯狂,只是重新发明轮子:D
我写过启动加载器,鼠标和键盘迷你驱动程序,迷你操作系统等等.
我总是试图避免DOS中断,只使用BIOS,尝试前进一个统一的迷你操作系统,但突然我决定编写自己的BIOS :)
传说:
我是高级程序员,然后是低级程序员.有一天,我将成为机器语言程序员!
BIOS是用汇编语言编写的吗?我该如何闪光?机制是什么?我可以开始编辑当前的BIOS吗?
问题:我必须为每个联网客户端提供唯一ID,例如:
一点点解释和一些背景故事:
这个问题基本上是古老的问题,也触及了软件拷贝保护的主题,因为这里提到了该领域中使用的一些机制.在这一点上我应该清楚,我不是在寻找一种复制保护方案.请继续阅读.:)
我正在开发一个应该在本地网络中工作的客户端 - 服务器软件.我必须解决的一个问题是识别网络中的每个唯一客户端(而不是问题),以便我可以将某些属性应用于每个特定客户端,在特定部署的生命周期中保留并强制执行这些属性.客户.
在我寻找解决方案时,我发现了以下情况:
这种问题的明显选择是找出BIOS标识符(不过100%确定这是否通过相同的主板型号是唯一的),因为这是我唯一可以依赖的不重复,通过克隆传输,并且不能改变(至少不能通过使用一些用户空间程序).其他一切都失败了,因为要么不可靠(MAC克隆,任何人?),要么太苛刻(就其对配置变化过于敏感而言).
我想问的一个子问题是,我是否正确地进行了架构方面的工作?也许有一个更好的工具来完成我必须完成的任务......
我想到的另一种方法类似于握手机制,其中服务器维护一个连接的客户端ID的内部查找表(在任何给定时刻甚至可以完全基于软件和非唯一),并告诉客户端如果在连接时提供重复的ID,则在握手期间提供不同的ID.遗憾的是,这种方法不能很好地满足在生命周期内将属性绑定到特定客户端的要求之一.
我正在尝试以编程方式找出特定PCIe设备连接的物理插槽.前提是我有卡的PCI-ID肯定会占用一个插槽,解决方案是找出哪一个.
请注意,我只对使用PCI Express总线感兴趣,尽管我认为设备识别/枚举过程与旧PCI相同.
该SMBIOS包含可用的主板插槽信息.可以从linux命令行检查这些信息:
$ sudo dmidecode -t slot
# dmidecode 2.11
SMBIOS 2.7 present.
Handle 0x003A, DMI type 9, 17 bytes
System Slot Information
Designation: PCIEX16_1
Type: x16 PCI Express x16
Current Usage: In Use
Length: Short
ID: 1
Characteristics:
3.3 V is provided
Opening is shared
PME signal is supported
Bus Address: 0000:03:02.0
Handle 0x003B, DMI type 9, 17 bytes
System Slot Information
Designation: PCIEX16_2
Type: x8 PCI Express x8
Current Usage: In Use …Run Code Online (Sandbox Code Playgroud) 从Oracle虚拟盒加载图像时出现此错误.我该如何解决?我通过远程桌面连接将虚拟机4.3.12安装到Windows 7 64位,32G RAM计算机上.

我查看了英特尔可视化设置,它对硬件可视化说"是".

我在网上看到这个问题看起来像是同一个问题.但我正在使用远程桌面控制,所以我无法在重启页面上更改设置.重新启动此计算机时,我将自动注销.
BIOS在现代操作系统中的作用是什么?它在启动后仍然使用吗?是否有某种BIOS API?
对.今天我花了三个多小时试图理解为什么你不能在保护模式下调用bios ISR.我得到的一旦你设置和IDT它不一定是在通常的地址为IVT加段没有固定的大小在保护模式等.但我仍然不明白为什么不能你jsut创建一个4GB段,将您的IDT段映射到BIOS IVT,将所有内容设置为0,然后调用它们.不应该那样吗?
大多数文章要么说:"记住你不能在保护模式下使用BIOS中断!" 没有探索主题或极具描述性和引用陷阱,例外,图片重新制作,缺乏权利和段记录的问题作为其背后的原因.
如果有人能够提出一个更人性化的解释,那将是非常有帮助的...我不怀疑文章所说的内容,我只是想明白为什么会这么"痛苦"!
提前致谢!
假设我想在Linux中更改计算机BIOS中的设置(如果重要的话,请说Ubuntu 11.)有哪些类型的API可用于查询和操作BIOS设置?
此外,进行此类开发的资源是什么?
我正在研究我的机器中的BIOS代码(x86_64 Linux,IvyBridge).我使用以下过程来转储BIOS代码:
$ sudo cat /proc/iomem | grep ROM
000f0000-000fffff : System ROM
$ sudo dd if=/dev/mem of=bios.dump bs=1M count=1
Run Code Online (Sandbox Code Playgroud)
然后我radare2用来读取和反汇编二进制转储:
$ r2 -b 16 bios.dump
[0000:0000]> s 0xffff0
[f000:fff0]> pd 3
: f000:fff0 0f09 wbinvd
`=< f000:fff2 e927f5 jmp 0xff51c
f000:fff5 0000 add byte [bx + si], al
Run Code Online (Sandbox Code Playgroud)
我知道x86处理器初始化始终以16位8086环境开始,并且要执行的第一条指令是at f000:fff0,即0xffff0.所以我去那个地方并反汇编代码.
令我惊讶的是WBINVD,第一条指令的功能是使缓存无效,这在处理器上电或复位时似乎无关紧要.我希望第一条指令只是jmp一个较低的内存地址.
为什么WBINVD以前有jmp?
我已经搜索了英特尔手册第3卷第9章处理器管理和初始化的相关部分,但它没有提及任何相关内容WBINVD.我也搜索了一些在线资源,但没有找到任何解释.
遵循jmp指令后0xff51c,代码更有趣; 它正在进行自我检查:
[f000:f51c]> pd
f000:f51c dbe3 …Run Code Online (Sandbox Code Playgroud) 当您将一个字节(例如(0x31)存储到物理线性地址的VGA 文本(模式 03)帧缓冲区中时),在以 16 位传统 BIOS MBR 模式启动的现代 PC 硬件上究竟发生了什么? 将该地区的MTRR设置为 UC的商店有多慢? (在一台 Kaby Lake iGPU 笔记本电脑上的实验测试表明,WC 上的 clflushopt 与 VGA 内存的 UC 速度大致相同。但没有 clflushopt,存储到 WC 内存永远不会离开 CPU 并且根本不更新屏幕,运行速度超快.)'1'B8000mov [es:di], eaxmov
如果它不是每个商店的 SMI,是否有任何方法可以在用户空间中的一块 WB 内存上估算此成本,以进行性能实验而无需实际重新启动到实模式?(例如,使用 BSS 页面作为实际上并不在任何地方显示的假装帧缓冲区)。
相应的字体字形在下一次刷新时出现在屏幕上,但硬件扫描是否真的从 VRAM(或 iGPU 的 DRAM)读取该 ASCII 字符并动态映射到位图字体字形?或者每个存储或每个 vblank 都有一些软件拦截,所以真正的硬件只需要处理位图帧缓冲区?
众所周知,传统 BIOS 引导使用系统管理模式 (SMM)将 USB kbd/鼠标模拟为 PS/2 设备。我想知道它是否也用于 VGA 文本模式帧缓冲区。我认为它是用于VGA的I …