小编The*_*eer的帖子

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

在 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
Run Code Online (Sandbox Code Playgroud)

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

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

linux bluetooth bluez

7
推荐指数
1
解决办法
1024
查看次数

读取目录以查看文件到 inode 的映射

我只是在学习文件系统,据说目录只是一个普通文件,它保留了文件-inode 对的列表。

如果我尝试Downloads使用以下任何一项打开目录cat less tail,它只会输出它的目录并且无法打开。

思路怎么读呢?

filesystems directory

6
推荐指数
1
解决办法
2629
查看次数

内核自带的 Makefile 中的“make install”是做什么的?

我试图确定make install内核的作用以及内核编译后的实际“安装”意味着什么。

问题是,我真的不能识别目标(Makefile文件参考)在“安装” Makefile

user@user-VirtualBox:~/Downloads/linux-3.14.1$ grep install: Makefile 
firmware_install: FORCE
headers_install: __headers
modules_install: _modinst_ _modinst_post
modules modules_install: FORCE
modules_install: _emodinst_ _emodinst_post
Run Code Online (Sandbox Code Playgroud)

我应该从中得出什么结论?

kernel make linux-kernel

6
推荐指数
1
解决办法
802
查看次数

从设备文件跟踪二进制流

我正在调试来自设备文件的二进制流。我希望将输出实时打印为十六进制值。

到目前为止,我已经使用过,tail -f /dev/ttyAPP2 | hexdump -C但是在我开始在输出中丢失一些字节之后,我明白这可能是一个糟糕的选择,因为它在找到换行符之前不会刷新数据。

有一个非官方的二进制尾,但我目前无法使用这种方法,我正在寻找如何用其他方式实现这一目标的建议?

例子

首先将 tty 设置为原始模式。

stty -F /dev/ttyAPP2 raw
Run Code Online (Sandbox Code Playgroud)

这是我在听设备时得到的(这是真实的输出)

root@Vdevice:/dev# hexdump -C < /dev/ttyAPP2
00000000  55 00 21 00 02 26 00 02  0b 00 09 02 06 01 00 01  
00000010  99 0c ec 45 4f 01 03 47  41 54 45 57 41 59 43 54 
Run Code Online (Sandbox Code Playgroud)

但是,预期的包应该是(这不是真正的输出):

root@Vdevice:/dev# hexdump -C < /dev/ttyAPP2
00000000  55 00 21 00 02 26 00 02  0b 00 09 02 06 …
Run Code Online (Sandbox Code Playgroud)

pipe tail binary

6
推荐指数
1
解决办法
4049
查看次数

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

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

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

[  +0,000010] mmc0: error -110 whilst initializing SD card 
[  +2,819983] mmc0: card never left busy state
Run Code Online (Sandbox Code Playgroud)

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

[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 …
Run Code Online (Sandbox Code Playgroud)

debugging linux-kernel sd-card

6
推荐指数
1
解决办法
3989
查看次数

以什么用户身份访问 sshfs 挂载文件夹?

我正在尝试对驱动器进行网络备份。这个过程有两台机器。

电脑1:

  • 带有 2 个硬盘 sda 和 sdb 的远程机器
  • sdb 是需要备份的驱动器
  • 存在两个用户,rootuser

电脑2:

  • 我在的机器
  • 以用户 Alan 身份工作,需要时可以转到 root

我在 PC2 上执行以下操作:

sshfs root@PC1:/dev ~/Desktop/netdisk/
Run Code Online (Sandbox Code Playgroud)

安装得很好。我在 ~/Destkop/netdisk/ 中有可用的 sdb。下一步:

sudo dd if=~/Destkop/netdisk/sdb | gzip -c > ~/Destkop/ddbackup/image.gz
Run Code Online (Sandbox Code Playgroud)

产生错误:

dd: opening `netdisk/sdb': Permission denied
Run Code Online (Sandbox Code Playgroud)

当我检查 sdb 的权限时:

brw-rw---- 1 root    disk    0, 0 Jan  3 10:47 sdb
Run Code Online (Sandbox Code Playgroud)

由于我以root@ PC1 的身份通过 ssh 连接到 PC1,这是否意味着我对作为 sshfs 挂载的文件具有 root 访问权限?

从这个例子看来它没有,这里有我遗漏的概念吗?

ssh mount sshfs

5
推荐指数
1
解决办法
4682
查看次数

内核模块中的故障一定会导致系统崩溃吗?

或者是否有可能克服错误,因为代码不在内核的整体部分?

linux kernel-modules linux-kernel

5
推荐指数
1
解决办法
2791
查看次数

用dd备份ubi文件系统?

A 在闪存驱动器上有一个根文件系统(文件系统 - 图像包含文件夹结构和内容)。闪存驱动器使用 UBI 作为底层文件系统文件系统 - 数据块映射到文件的方式,就像你说你使用的是 ext4)。

rootfs on / type rootfs (rw)
ubi0:root on / type ubifs (rw,sync)
Run Code Online (Sandbox Code Playgroud)

当有一个物理驱动器作为第一个参数时,我知道如何使用 dd 进行备份(例如。而不是rootfs有一个/dev/sda),但是在这里我不知道如何在当前场景中寻址驱动器(什么是的路径rootfs)。

我如何检测到哪个文件footfsubi0:root对应于哪个文件?

filesystems mount disk-image ubifs

5
推荐指数
1
解决办法
5961
查看次数

为什么“用户”和“系统”时间在多次执行时会有所不同?

有一个很好的问答来解释“真实”、“用户”和“系统”之间的关系。

它解释了为什么“真实”会发生变化的原因,并将“用户”和“系统”定义为进程在处理器上实际运行的时间。

现在让我们完全忽略“真实”。我注意到多次运行同一个应用程序时,它给出了不同的“系统”和“用户”。

$time dummy_app
user    0m0.032s
sys     0m0.064s

$time dummy_app
user    0m0.020s
sys     0m0.084s
Run Code Online (Sandbox Code Playgroud)

dummy_app 只是一个从 0 到 100000 计数的 for 循环。

同一个二进制文件的执行会在处理器上花费不同时间的原因是什么?换句话说,为什么同一个应用程序的“用户”和“系统”不总是相同的?

process scheduling time

5
推荐指数
1
解决办法
2019
查看次数

ELF .data 部分中的符号表

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

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

这是一个例子

//simple.c
int var_global_init = 5;

int main(void)
{
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

$ gcc simple.c -o simple
$ objdump -t simple | grep var_global_init
  0000000000201010 g     O .data  0000000000000004              var_global_init
Run Code Online (Sandbox Code Playgroud)

它列出了.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 …
Run Code Online (Sandbox Code Playgroud)

linker elf binary

5
推荐指数
1
解决办法
4395
查看次数