Skip to the content.

vt

看看

https://unix.stackexchange.com/questions/32884/which-virtual-terminal-is-a-given-x-process-running-on https://stackoverflow.com/questions/3034567/how-do-i-find-the-current-virtual-terminal https://askubuntu.com/questions/33078/what-is-a-virtual-terminal-for

vt

没有图形界面,默认进入的就是 vt

bmc 的时候也是如此的

static void sysrq_handle_showregs(u8 key)
{
	struct pt_regs *regs = NULL;

	if (in_hardirq())
		regs = get_irq_regs();
	if (regs)
		show_regs(regs);
	perf_event_print_debug();
}
[  248.671749] sysrq: HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all
-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) powe
roff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked
-tasks(w) dump-ftrace-buffer(z)
[  252.998756] sysrq: Show Regs
[  253.002434] CPU: 10 PID: 0 Comm: swapper/10 Kdump: loaded Tainted: G           OE     martins3-4.19.x86
_64 #1
[  253.014003] Hardware name: Suma R6240H0/62DB32, BIOS CXYH051029 09/06/2023
[  253.021573] RIP: 0010:native_safe_halt+0xe/0x10
[  253.026796] Code: eb bd 90 90 90 90 90 90 90 90 90 90 e9 07 00 00 00 0f 00 2d f6 0c 53 00 f4 c3 66 90 e9 07 00 00
00 0f 00 2d e6 0c 53 00 fb f4 <c3> 90 0f 1f 44 00 00 41 55 41 54 55 53 e8 b0 6f 85 ff 65 8b 2d c9
[  253.046926] RSP: 0018:ffffb2dd0025fea8 EFLAGS: 00000246 ORIG_RAX: ffffffffffffffde
[  253.055184] RAX: ffffffffa90d7160 RBX: 000000000000000a RCX: 7fffffc5f636d1aa
[  253.063021] RDX: 7fffffffffffffff RSI: 000000000000000a RDI: ffff956cff8a3d40
[  253.070862] RBP: 000000000000000a R08: ffff956cff89dc80 R09: 0000000000000000
[  253.078705] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000
[  253.086549] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
[  253.094393] FS:  00007f6d9fb79740(0000) GS:ffff956cff880000(0000) knlGS:0000000000000000
[  253.103199] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  253.109672] CR2: 00007f6d92e31020 CR3: 0000007830c0a000 CR4: 00000000003406e0
[  253.117542] Call Trace:
[  253.120735]  default_idle+0x1c/0x140
[  253.125063]  do_idle+0x1aa/0x250
[  253.129020]  cpu_startup_entry+0x6f/0x80
[  253.133667]  start_secondary+0x18d/0x1e0
[  253.138310]  secondary_startup_64+0xb6/0xc0
[  253.143207] CPU#10: active:     0000000000000001
[  253.148535] CPU#10:   gen-PMC0 ctrl:  0000000000530076
[  253.154384] CPU#10:   gen-PMC0 count: 0000fffb7a1b6a0d
[  253.160215] CPU#10:   gen-PMC0 left:  000000051f5c2910
[  253.166032] CPU#10:   gen-PMC1 ctrl:  0000000000000000
[  253.171839] CPU#10:   gen-PMC1 count: 0000000000000000
[  253.177627] CPU#10:   gen-PMC1 left:  0000000000000000
[  253.183399] CPU#10:   gen-PMC2 ctrl:  0000000000000000
[  253.189154] CPU#10:   gen-PMC2 count: 0000000000000000
[  253.194899] CPU#10:   gen-PMC2 left:  0000000000000000
[  253.200638] CPU#10:   gen-PMC3 ctrl:  0000000000000000
[  253.206366] CPU#10:   gen-PMC3 count: 0000000000000000
[  253.212076] CPU#10:   gen-PMC3 left:  0000000000000000
[  253.217782] CPU#10:   gen-PMC4 ctrl:  0000000000000000
[  253.223474] CPU#10:   gen-PMC4 count: 0000000000000000
[  253.229152] CPU#10:   gen-PMC4 left:  0000000000000000
[  253.234811] CPU#10:   gen-PMC5 ctrl:  0000000000000000
[  253.240451] CPU#10:   gen-PMC5 count: 0000000000000000
[  253.246077] CPU#10:   gen-PMC5 left:  0000000000000000

drivers/tty/vt/keyboard.c 中

这里也会调用 show_state ,和 sysrq 一样的

如果使用 fn_show_ptregs 需要判断 in_hardirq() 吗?

sysrq_handle_showallcpus 中判断过,但是这里是没有的,而且奇怪的是,这样的话,岂不是 sysrq 和 vt 的功能是重叠的

static void fn_show_ptregs(struct vc_data *vc)
{
	struct pt_regs *regs = get_irq_regs();

	if (regs)
		show_regs(regs);
}

测试下,n100 中不要包含 drm 驱动,会有什么影响?

我猜测 vt console 直接无法显示吧

原来 drivers/tty/vt/keyboard.c 中的代码一直都是可以调用的

@[
    fn_enter+5
    kbd_event+959
    input_handle_events_default+66
    input_pass_values+289
    input_event_dispose+322
    input_event+83
    hidinput_report_event+55
    hid_report_raw_event+320
    hid_input_report+251
    hid_irq_in+464
    __usb_hcd_giveback_urb+145
    usb_giveback_urb_bh+169
    process_one_work+325
    bh_worker+555
    tasklet_hi_action+19
    handle_softirqs+220
    irq_exit_rcu+161
    common_interrupt+133
    asm_common_interrupt+38
    cpuidle_enter_state+198
    cpuidle_enter+45
    do_idle+412
    cpu_startup_entry+41
    start_secondary+247
    common_startup_64+300
]: 6

似乎 Ctrl + Alt + F2 和 Ctrl + Alt + F1 都不是一个东西

功能定位有不同的

有趣的 manual

https://manpages.ubuntu.com/manpages/plucky/man4/vt.4freebsd.html

想不到 windows 也是考虑这个的

https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences

理解这个

https://wiki.archlinux.org/title/Linux_console

这个 freebsd 也是有的

https://docs-archive.freebsd.org/doc/11.4-RELEASE/usr/local/share/doc/freebsd/handbook/consoles.html

看看,写的相当好,可以看看 vt 去掉之后的效果

https://www.reddit.com/r/linux/comments/10eccv9/config_vtn_in_2023/

依赖 VT 的一些 config

CONFIG_VT=y
CONFIG_CONSOLE_TRANSLATIONS=y
CONFIG_VT_CONSOLE=y
CONFIG_VT_CONSOLE_SLEEP=y
# CONFIG_VT_HW_CONSOLE_BINDING is not set

CONFIG_VGA_CONSOLE=y
CONFIG_DUMMY_CONSOLE=y
CONFIG_DUMMY_CONSOLE_COLUMNS=80
CONFIG_DUMMY_CONSOLE_ROWS=25

注意, 把 VT 去掉之后,console=ttyS0 不受影响

只有 vnc 功能收到影响

忽然意识到,vt 是非常复杂的,他是需要键盘鼠标的

在 vnc 中 enter 的效果

@[
    fn_enter+5
    kbd_event+959
    input_handle_events_default+66
    input_pass_values+289
    input_event_dispose+322
    input_event+83
    atkbd_receive_byte+1689
    ps2_interrupt+158
    serio_interrupt+71
    i8042_handle_data+240
    i8042_interrupt+17
    __handle_irq_event_percpu+71
    handle_irq_event+56
    handle_edge_irq+139
    __common_interrupt+59
    common_interrupt+128
    asm_common_interrupt+38
    default_idle+15
    default_idle_call+48
    do_idle+437
    cpu_startup_entry+41
    start_secondary+247
    common_startup_64+300
]: 5

原来如此:

@[
    fbcon_putcs+0
    con_write+32
    n_tty_write+380
    file_tty_write.isra.0+300
    redirected_tty_write+268
    vfs_write+544
    ksys_write+120
    __arm64_sys_write+36
    invoke_syscall.constprop.0+88
    do_el0_svc+72
    el0_svc+64
    el0t_64_sync_handler+268
    el0t_64_sync+408
]: 1
🧀  cat /sys/class/vtconsole/vtcon*/name
(S) dummy device
(M) frame buffer device
🧀  ls /sys/class/graphics/fb*
/sys/class/graphics/fb0:
bits_per_pixel  console  dev     mode   name  power   state   subsystem  virtual_size
blank           cursor   device  modes  pan   rotate  stride  uevent

/sys/class/graphics/fbcon:
cursor_blink  power  rotate  rotate_all  subsystem  uevent

cat /sys/class/graphics/fb*/name hibmcdrmfb

i915drmfb : intel 机器

🧀  ls -la /sys/class/drm/
lrwxrwxrwx    - root  6 Apr 14:46 card0 -> ../../devices/pci0000:00/0000:00:11.0/0000:03:00.0/drm/card0
lrwxrwxrwx    - root  6 Apr 14:46 card0-VGA-1 -> ../../devices/pci0000:00/0000:00:11.0/0000:03:00.0/drm/card0/card0-VGA-1
.r--r--r-- 4.1k root  6 Apr 14:46 version

大致的关联关系是这个样子的: /dev/tty0 -> /sys/devices/virtual/tty/tty0 -> vtcon1 -> /sys/class/graphics/fb0 -> /sys/class/drm/card0

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。