gpt4 book ai didi

linux - 查找视频缓冲区的物理内存偏移量

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:19 24 4
gpt4 key购买 nike

我正在使用集成显卡的 Fedora 17。鉴于我能够操纵物理内存的内容,我如何找出我可以写入的物理内存偏移量以便在屏幕上显示某些内容?

我试图查找 0xB8000 和 0xB0000 偏移量,但它们包含所有 0xff。

内存中是否有启动视频缓冲区的特定模式?是否有关于此主题的任何良好信息来源?

我的问题的根本原因是 Linux 没有使用传统视频模式,因此 0xB8000 处的内存受到限制(在我的例子中是只读的)。但是发出中断可以切换到其他模式:

INT 10 - VIDEO - SET VIDEO MODE

AH = 00h
AL = desired video mode (see #00010)

发现于:http://www.delorie.com/djgpp/doc/rbinter/id/74/0.html

最佳答案

像 1989 年一样生活

    #include <linux/fb.h>
#define DEV_MEM "/dev/fb0"

/* Screen parameters (probably via ioctl() and /sys. */
#define YRES 240
#define XRES 320
#define BYTES_PER_PIXEL (sizeof(unsigned short)) /* 16 bit pixels. */
#define MAP_SIZE XRES*YRES*BYTES_PER_PIXEL
unsigned short *map_lbase;

if((fd = open(DEV_MEM, O_RDWR | O_SYNC)) == -1) {
fprintf(stderr, "cannot open %s - are you root?\n", DEV_MEM);
exit(1);
}

// Map that page.
map_lbase = (unsigned short *)mmap(NULL, MAP_SIZE,
PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if((long)map_lbase == -1) {
perror("cannot mmap");
exit(1);
}

人类 - Framebuffer API doc , Framebuffer Doc dir .
聪明的Humons - Internals , Deferred I/O doc或者如何模拟内存映射视频。


您不能直接使用 0xB80000xB0000,因为它们是物理地址。我假设你在用户空间而不是编写内核驱动程序。在 Linux 下,我们通常启用 MMU;换句话说,我们有虚拟内存。并非所有进程/用户都可以访问显存。但是,如果允许,您可以mmap framebuffer 设备到您的地址空间。最好让内核给你一个地址,而不是请求一个特定的地址。

或者看看如何professionals do it .

男人:mmap

编辑:如果您不是 root,您仍然可以在 /dev/fb0(或任何设备)上使用 Unix 权限授予组读/写权限或使用某种登录进程,授予用户当前tty权限。

关于linux - 查找视频缓冲区的物理内存偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15663487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com