diff --git a/fbsize/Makefile b/fbsize/Makefile new file mode 100644 index 00000000..a537fa58 --- /dev/null +++ b/fbsize/Makefile @@ -0,0 +1,10 @@ + +CFLAGS = -Wall -pedantic + +all: fbsize + +fbsize: main.o + cc -o $@ $^ + +clean: + rm -f fbsize *.o diff --git a/fbsize/fbsize b/fbsize/fbsize new file mode 100644 index 00000000..1a6c1e72 Binary files /dev/null and b/fbsize/fbsize differ diff --git a/fbsize/main.c b/fbsize/main.c new file mode 100644 index 00000000..235601a2 --- /dev/null +++ b/fbsize/main.c @@ -0,0 +1,91 @@ +#include +#include +#include +#include +#include +#include +#include + +#define VERSION "1.0" + +int main(int argc, char *argv[]) +{ + int c; + + while (1) + { + int option_index = 0; + static struct option long_options[] = { + {"resolution", required_argument, 0, 'r'}, + {"buffer", required_argument, 0, 'b'}, + {"offset", required_argument, 0, 'o'}, + {"screen", required_argument, 0, 's'}, + {"help", no_argument, 0, 'h'}, + {0, 0, 0, 0}}; + + c = getopt_long(argc, argv, "r:b:o:s:h", long_options, &option_index); + if (c == -1) + break; + + switch (c) + { + case 'r': + case 'b': + case 'o': + case 's': + int fbfd = 0; + struct fb_var_screeninfo var_info; + + // 打开设备文件 + fbfd = open(optarg, O_RDWR); + if (fbfd == -1) + { + perror("Error: cannot open framebuffer device"); + return 1; + } + + // 获取屏幕参数 + if (ioctl(fbfd, FBIOGET_VSCREENINFO, &var_info) == -1) + { + perror("Error reading variable information"); + return 1; + } + + if (c == 'r') + { + printf("%dx%d\n", var_info.xres, var_info.yres); + } + else if (c == 'b') + { + printf("%dx%d\n", var_info.xres_virtual, var_info.yres_virtual); + } + else if (c == 'o') + { + printf("%dx%d\n", var_info.xoffset, var_info.yoffset); + } + else if (c == 's') + { + printf("%dx%d\n", var_info.height, var_info.width); + } + + // 关闭设备文件 + close(fbfd); + break; + case 'h': + case '?': + printf("Usage: %s [options] \n", argv[0]); + printf("Version: %s\n", VERSION); + printf("Options:\n"); + printf(" -r, --resolution Display the resolution of the screen\n"); + printf(" -b, --buffer Display the resolution of the framebuffer\n"); + printf(" -o, --offset Display the offset of the screen\n"); + printf(" -s, --screen Display the size of the screen\n"); + printf(" -h, --help Display this help message\n"); + return 0; + default: + return 1; + } + } + + return 0; +} \ No newline at end of file diff --git a/files/initrd/opt/rr/fbszie b/files/initrd/opt/rr/fbszie new file mode 100644 index 00000000..1a6c1e72 Binary files /dev/null and b/files/initrd/opt/rr/fbszie differ