AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-29436

TheMeaningfulEngineer's questions

Martin Hope
TheMeaningfulEngineer
Asked: 2022-06-01 05:07:11 +0800 CST

framebuffer和tty的关系

  • 0

帧缓冲区是允许简化屏幕界面的设备文件。例如,在连接了 HDMI 显示器的 RaspberryPi 上运行以下代码:

cat /dev/urandom > /dev/fb1

有一些命令 ( fbi, fim) 允许将完整图像注入帧缓冲区。

互联网上有多种资源(ref1、ref2、ref3)试图或多或少地成功解释如何添加系统服务,这将导致屏幕上出现图像。

这些资源中的一个共同点是tty与framebuffer. (即两者都fbi可以fim选择传递 a tty)。


我的假设是 atty是与 a 分开的概念framebuffer。使用tty向framebuffer用户输出内容,但帧缓冲区与tty.

ttya和 a背后是否存在隐藏的关系,framebuffer这可以解释为什么将图像打印到 a 的命令framebuffer似乎依赖于 a tty?

tty framebuffer
  • 1 个回答
  • 180 Views
Martin Hope
TheMeaningfulEngineer
Asked: 2020-01-26 03:32:27 +0800 CST

什么负责将 /dev/pts/10 与 stdout/stdin/stderr 连接起来?

  • 1

tty在终端中运行命令时,它会返回/dev/pts/10.

除此之外还有文件/dev/stdout /dev/stdin和/dev/stderr. 与它们交互直接在终端中显示结果。

user@laptop:build$ tty
/dev/pts/10
user@laptop:build$ echo "Test" > /dev/stdout
Test
user@laptop:build$ echo "Test" > /dev/stdin
Test
user@laptop:build$ echo "Test" > /dev/stderr
Test

此外,从 shell 启动的任何 cli 应用程序都将为stdout/ stderr/打开文件描述符stdin。即,如果您运行打印某些内容的脚本,则打印相当于写入stdout.

到目前为止stdout//是 shell 使用的唯一接口stderr。stdin应用程序也是如此。

某些操作系统组件最终会将写入的数据移动stdout到终端,否则我将看不到任何打印的内容。

与终端之间的连接何时何地stdout/stdin/stderr发生,以便与std*终端上的某些东西进行交互?

我想挑战的粗略假设是:

/dev/stdout,/dev/stdin并且/dev/stderr是由运行的 shell 创建的,没有 shell,它们就不存在。

shell 使用代表终端 ( ) 的实际设备文件建立通信通道,并通过、和/dev/pts/10公开终端功能。这样,shell 为应用程序提供了一个简单的文件界面,而不是让每个应用程序都担心如何处理设备文件以进行简单的打印。/dev/stdout/dev/stdin/dev/stderr

更新

即使/dev/pts/10是伪终端,我也会更重视在不引入伪终端概念的情况下能够给出答案的答案。我从一个角度来看,它只会分散问题的答案:

与终端之间的连接何时何地stdout/stdin/stderr发生,以便与/dev/std*终端上的某些东西进行交互?

linux shell
  • 3 个回答
  • 1848 Views
Martin Hope
TheMeaningfulEngineer
Asked: 2019-08-30 08:11:06 +0800 CST

在 BlueZ 中定位 GATT 服务器的对象路径

  • 7

在 Linux 机器上制作蓝牙 GATT 服务器是使用 BlueZ 完成的。使用现代 (5.50) BlueZ 的首选方式是通过 dbus API。

有关此主题的文档指出:

GATT 本地和远程服务共享相同的高级 D-Bus API。本地是指由 BlueZ 插件或外部应用程序导出的基于 GATT 的服务。远程是指对等方导出的 GATT 服务。

我将其解释为:

本地服务(Linux 机器是服务器,其他设备通过蓝牙连接到它)和远程服务(Linux 机器是客户端,它通过蓝牙连接到其他设备)都在 dbus 上表示

这为问题设定了基本假设。

bluez 源代码提供了一个example-gatt-server。您可以执行一个示例,它将正常工作并将您的 Linux 机器转入 GATT 服务器。

在该示例中,引用了一个任意命名的 dbus 对象。它的名字是/org/bluez/example/service

从文档中我希望,一旦./example-gatt-server成功运行,应该有一个/org/bluez/example/service地方。

事实并非如此:

~$ busctl tree org.bluez
└─/org
  └─/org/bluez
    └─/org/bluez/hci0

我正在使用外部设备确认 Linux 机器充当 GATT 服务器,但未/org/bluez/example/service列出。

为什么/org/bluez/example/service在 下找不到作为对象org.bluez?

linux bluetooth
  • 1 个回答
  • 1346 Views
Martin Hope
TheMeaningfulEngineer
Asked: 2019-03-22 04:39:18 +0800 CST

同一个 systemd 服务的“之前”和“想要”?

  • 12

在这个systemd 单元文件的例子中:

# systemd-timesyncd.service
...

Before=time-sync.target sysinit.target shutdown.target
Conflicts=shutdown.target
Wants=time-sync.target

systemd-timesyncd.service应该开始之前 time-sync.target。这定义了一个排序依赖。

但同时systemd-timesyncd.service 想要 time-sync.target。time-sync.target它的需求依赖也是如此

这种关系的用例是什么?为什么它们之间没有冲突?

systemd dependencies
  • 3 个回答
  • 2836 Views
Martin Hope
TheMeaningfulEngineer
Asked: 2019-03-12 06:33:20 +0800 CST

在没有激活时间同步的情况下手动设置时间覆盖(在 VM 中)

  • 0

我试图在 Ubuntu 18.04 (systemd 237) 上设置一个假时间,以测试每月定期任务的执行。

这是在虚拟机(带有来宾添加的虚拟机)上运行的。

即使 ntp 同步已禁用,时间也会在几秒钟后自行重置为正确时间。

例子。

# Disable the sync
timedatectl set-ntp 0
# There aren't any ntp daemons running
systemctl -a | grep ntp    # Returns nothing

# This confirms there is no sync active
timedatectl status         
#                       Local time: Mo 2019-03-11 15:22:13 CET
#                   Universal time: Mo 2019-03-11 14:22:13 UTC
#                         RTC time: Mo 2019-03-11 14:22:13    
#                        Time zone: Europe/Berlin (CET, +0100)
#        System clock synchronized: no                        
# systemd-timesyncd.service active: no                        
#                  RTC in local TZ: no           

# Setting up the fake time       
timedatectl set-time '2015-11-20 16:14:50'

# It worked! Wuhuu!
timedatectl status         
#                       Local time: Fr 2015-11-20 16:14:51 CET
#                   Universal time: Fr 2015-11-20 15:14:51 UTC
#                         RTC time: Fr 2015-11-20 15:14:51    
#                        Time zone: Europe/Berlin (CET, +0100)
#        System clock synchronized: no                        
# systemd-timesyncd.service active: no                        
#                  RTC in local TZ: no

# 5 sec later
timedatectl status         
#                       Local time: Mo 2019-03-11 15:25:35 CET
#                   Universal time: Mo 2019-03-11 14:25:35 UTC
#                         RTC time: Fr 2015-11-20 15:14:51    
#                        Time zone: Europe/Berlin (CET, +0100)
#        System clock synchronized: no                        
# systemd-timesyncd.service active: no                        
#                  RTC in local TZ: no

如果没有同步服务,是什么让它保持同步?

systemd date
  • 2 个回答
  • 1042 Views
Martin Hope
TheMeaningfulEngineer
Asked: 2019-02-26 22:50:44 +0800 CST

写入 /dev/kmsg 会随机显示在 /proc/kmsg 中并且总是在 dmesg 中?

  • 3

/dev/kmsg当在拖尾时向其中写入消息时/proc/kmsg,消息会非常随机地出现, in 永远不会出现在/var/log/kern.log.

但是,dmesg正确获取所有消息。

例子

# Terminal 1
sudo tail -f /proc/kmsg

# Terminal 2 
tail -f /var/log/kern.log

# Terminal 3
sudo sh -c 'echo "<1> Kernel log message" > /dev/kmsg'
sudo sh -c 'echo "<1> Kernel log message" > /dev/kmsg'
sudo sh -c 'echo "<1> Kernel log message" > /dev/kmsg'
sudo sh -c 'echo "<1> Kernel log message" > /dev/kmsg'

结果:

# Terminal 1
# The message is shown at irregular intervals without a clear pattern
sudo tail -f /proc/kmsg
    <9>[37102.185491]  Kernel log message

# Terminal 2 
# No message is ever shown
tail -f /var/log/kern.log

# Terminal 4
# Everything is always here
dmesg
    [37101.556366]  Kernel log message
    [37102.185491]  Kernel log message
    [37103.042422]  Kernel log message

插入 USB 记忆棒时,数据会在/proc/kmsg和的输出之间随机拆分/var/log/kern.log。dmesg再次显示所有消息。

  • 与其他方法有dmesg什么不同?
  • 为什么可以通过让另一个进程监听来破坏 rsyslog 的内核日志记录/dev/kmsg。为什么我的尝试没有被阻止device or resource busy?
  • 为什么 rsyslog 不会记录发送到的消息,/dev/kmsg即使它们偶尔会到达proc/kmsg?
linux-kernel rsyslog
  • 1 个回答
  • 4051 Views
Martin Hope
TheMeaningfulEngineer
Asked: 2018-12-06 02:10:03 +0800 CST

当网络突然终止时 TCP 连接会发生什么

  • 4

假设用户空间应用程序与某个非本地端点建立了 TCP 连接。在某些时候,网络突然中断(即在网络管理器中删除连接,拔下 wifi 加密狗,切断以太网电缆)

内核内部在概念上发生了什么来应对这种情况以及它如何向用户空间应用程序表现出来?

指导子问题:

  • 涉及哪些超时?
  • 内核会在尝试重新连接时尝试从用户空间隐藏连接丢失吗?
  • 等待响应会导致用户空间应用程序不想正常退出吗?
linux networking
  • 1 个回答
  • 905 Views
Martin Hope
TheMeaningfulEngineer
Asked: 2018-11-08 05:03:43 +0800 CST

journald - 将存档日志重新发送到日志记录套接字

  • 1

我有一个嵌入式设备,它同时具有systemd和rsyslog。 journald是本地日志记录和rsyslog远程日志记录的主要机制。rsyslog 并不总是运行,仅在需要调试时才启动。

一旦 rsyslog 启动,它只转发从那个时间点发生的事件。我试图让它转发目前在 journald 中可用的所有日志。

执行此操作的正确方法是$ModLoad imjournal在/etc/rsyslog.conf. 这将允许 rsyslog 读取 journald 的存档文件。

我在一个没有可用于 rsyslog 的 imjournal 模块的嵌入式系统上,我正在寻找解决方法。

一种这样的解决方法是让 journald 将之前的所有存档日志重新发送到 rsyslog 正在侦听的套接字(现在处于活动状态)。

有没有办法做到这一点?

systemd rsyslog
  • 1 个回答
  • 350 Views
Martin Hope
TheMeaningfulEngineer
Asked: 2018-08-24 02:42:57 +0800 CST

检查 /dev/log

  • 19

/dev/log是系统日志记录的默认条目。在 systemd 实现的情况下(本例),它是指向任何/run/systemd/journal/dev-log. 它曾经是 syslog 守护进程处理的 unix 套接字的接收端。

~$ echo "hello" > /dev/log 
bash: /dev/log: No such device or address
~$ fuser /dev/log
~$ ls -la /dev/log 
lrwxrwxrwx 1 root root 28 Aug 23 07:13 /dev/log -> /run/systemd/journal/dev-log

当您尝试写入时弹出错误的说明是什么,为什么没有进程保存该文件(从fuser /dev/log空输出?

日志记录确实在系统上正常工作。

~$ logger test
~$ journalctl --since=-1m
-- Logs begin at Thu 2018-05-24 04:23:46 CEST, end at Thu 2018-08-23 13:07:25 CEST. --
Aug 23 13:07:24 alan-N551JM alan[12962]: test

扩展评论建议

~$ sudo fuser /dev/log 
/run/systemd/journal/dev-log:     1   311
~$ ls -lL /dev/log
srw-rw-rw- 1 root root 0 Aug 23 07:13 /dev/log
linux systemd
  • 3 个回答
  • 22190 Views
Martin Hope
TheMeaningfulEngineer
Asked: 2018-06-19 09:21:25 +0800 CST

通过内核跟踪定义故障 SD 卡的状态?

  • 6

我有一系列失败/有时失败的 SD 卡。它们要么提供以下dmesg输出之一:

完全死掉的(不在 列出/dev/mmcblk0):

[  +0,000010] mmc0: error -110 whilst initializing SD card 
[  +2,819983] mmc0: card never left busy state

失败的(偶尔仍然可以安装):

[Jun16 06:28] mmc0: new high speed SDHC card at address 0001
[  +0,000339] mmcblk0: mmc0:0001 00000 3.68 GiB 
[  +0,002835]  mmcblk0: p1 p2 p3 p4
[ +10,256689] mmcblk0: timed out sending r/w cmd command, card status 0x900
[ +11,264358] mmcblk0: timed out sending r/w cmd command, card status 0x900
[  +0,000016] print_req_error: I/O error, dev mmcblk0, sector 7716736
[ +10,239972] mmcblk0: timed out sending r/w cmd command, card status 0x900
[  +0,000018] print_req_error: I/O error, dev mmcblk0, sector 7716736
[  +0,000008] Buffer I/O error on dev mmcblk0, logical block 964592, async page read
[ +10,239931] mmcblk0: timed out sending r/w cmd command, card status 0x900
[  +0,000009] print_req_error: I/O error, dev mmcblk0, sector 81792
[Jun16 06:29] mmcblk0: timed out sending r/w cmd command, card status 0x900
[  +0,000020] print_req_error: I/O error, dev mmcblk0, sector 1066880
[ +10,240219] mmcblk0: timed out sending r/w cmd command, card status 0x900
[  +0,000011] print_req_error: I/O error, dev mmcblk0, sector 2101120

我得到的最好的结果error -110是它是一种超时,但很少说明 SDCard 实际发生了什么。

这是如何形成的背景

SD卡最终在我正在处理的一些(看似随机的)嵌入式设备上处于这些状态,我试图了解这是否是坏SD卡的问题,或者控制器驱动程序是否有问题正在将牌推向腐败。

大约 5% 的牌已经完全失效,我正在尝试看看其他牌是否会出现这种情况。

我试图强制 SD 卡重现该问题,但被测试的那些(相同品牌、相同类型的设备和相同的软件)在连续写入数百 GB 数据后没有显示任何磨损痕迹作为测试的一部分。我为此使用了压力磁盘。

我不知道设备突然断电的频率,电源是一个常规的 2A AC-DC 适配器,可以满足设备的所有其他需求。

更新

似乎建议以helps me prevent failed SD cards in the future与using Linux to diagnose what is the current state of the SDcards.

让我试着改写一下:

在 Linux 上分析 SD 卡故障的最彻底方法是什么?

  • 是否可以为 MMC 子系统启用调试日志以获取更多信息?
  • 什么是card status 0x900?
  • 是否可以从用户空间嗅探 SD-bus 或 SD-bus 通信以获取卡开始出现故障的迹象?
linux-kernel debugging
  • 1 个回答
  • 4456 Views
Martin Hope
TheMeaningfulEngineer
Asked: 2018-04-17 23:32:29 +0800 CST

Linux 中调制解调器的数据和控制通道?

  • 0

我将 USB 调制解调器检测为设备设备文件 ( /dev/ttyACM0)。将 AT 命令重定向到设备文件似乎在调制解调器响应时起作用。

我采用以下假设,上半部分表示控制信道。通过它可以拨号、设置调制解调器、取消连接……一般来说,无需实际处理data. 我的意思是所有不受控制data的东西(例如 HTTP 数据包)。

数据流发生在哪里?如果是通过同一个文件,那是如何复用的?

同样理想的是,人们希望调制解调器只是一种底层“服务”,它提供一个带有 IP 的网络接口,因此可以将其抽象出来并使用 TCP/IP 套接字。套接字在内核中实现。

/dev/ttyACM0一旦调制解调器暴露在用户空间中,这将如何适应图片?

linux linux-kernel
  • 1 个回答
  • 196 Views
Martin Hope
TheMeaningfulEngineer
Asked: 2018-03-26 14:44:18 +0800 CST

ELF .data 部分中的符号表

  • 5

我试图了解符号表与 ELF 中的 .data 部分有何关系。首先是一些我用来作为基础的假设。

符号是函数或变量的人类可读(或“写在源文件中”)表示,它映射到其实际二进制值(CPU 对其进行操作)。

这是一个例子

//simple.c
int var_global_init = 5;

int main(void)
{
  return 0;
}

让我们构建它并检查二进制文件:

$ gcc simple.c -o simple
$ objdump -t simple | grep var_global_init
  0000000000201010 g     O .data  0000000000000004              var_global_init

它列出了.dataELF 文件部分中的符号。ELF 文档的第 20 页 将该部分定义.data为:

这些部分保存有助于程序内存映像的初始化数据。

好吧,这样的搭配。于是我问自己Does this mean that the symbol table is embedded in the .data section?。但这似乎被下面的例子所反驳:

$ readelf -s simple
  Symbol table '.symtab' contains 66 entries:
  ....
  50: 0000000000201010     4 OBJECT  GLOBAL DEFAULT   23 var_global_init

readelf表明.symtabELF 中有一个专门的部分用于保存该符号。

该.data部分是否需要实际的符号表。第一个示例指出该data部分中有一个,但它不应该只执行二进制值吗?

通过检查hexdump,我只能检测到一个条目,所以要么我的概念错了,要么其中一些在撒谎。:)

binary elf
  • 1 个回答
  • 5753 Views
Martin Hope
TheMeaningfulEngineer
Asked: 2017-12-30 14:59:52 +0800 CST

.tmux.conf 语言

  • -1

我正在定制我的.tmux.conf,并且发现了很多关于其他人定制的其他示例。

这是一个显然使 tmux 窗格拆分更像 vim 的示例:

set-option -g prefix C-w
unbind-key C-w
bind-key C-w send-prefix
set -g base-index 1

bind-key v split-window -h
bind-key s split-window -v
bind-key h select-pane -L
bind-key j select-pane -D
bind-key k select-pane -U
bind-key l select-pane -R

和的语法是什么bind key意思?setset-option

tmux
  • 1 个回答
  • 6833 Views
Martin Hope
TheMeaningfulEngineer
Asked: 2017-12-13 07:36:13 +0800 CST

连接控制器的一致枚举

  • 2

我有一个与 btattach 作为系统服务连接的控制器:

/usr/bin/btattach -B /dev/ttyACM0 -S 1000000

相同的命令似乎会导致不同的枚举。有时它:

$ busctl tree org.bluez
└─/org
  └─/org/bluez
    └─/org/bluez/hci1

其他时间:

$ busctl tree org.bluez
└─/org
  └─/org/bluez
    └─/org/bluez/hci0

有没有办法固定枚举?

linux bluetooth
  • 1 个回答
  • 80 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve