问题:
我通过串行端口(又名 RS-232)插入设备(即 GSM 调制解调器),我需要查看/dev/
该设备与文件系统中的哪个文件绑定,以便能够与其进行通信。不幸的是/dev/
,dmesg
输出中没有新创建的文件,也看不到任何内容。所以这似乎是一个很难回答的问题。
背景:
我从来没有使用过串口设备,所以昨天,当出现需要时,我尝试谷歌它但找不到任何有用的东西。我花了几个小时寻找,我想分享一个找到的答案,因为它可能对某人有所帮助。
我在VirtualBox 中安装了 Debian (用于通常破坏我系统的各种实验)并尝试启动 VirtualBox 来宾插件脚本。我以 root 身份登录并尝试启动autorun.sh
,但我得到“权限被拒绝”。ls -l
表明该脚本具有可执行权限。
抱歉,我无法复制输出——VirtualBox 没有插件绝对没有用,因为共享目录和共享剪贴板都不起作用。但为了让你确定,我手工复制了权利:
#ls -l ./autorun.sh
-r-xr-xr-x 1 root root 6966 Mar 26 13:56 ./autorun.sh
Run Code Online (Sandbox Code Playgroud)
起初我认为可能是脚本执行了一些导致错误的事情。我试图/bin/sh
用类似的东西替换#/pathtorealsh/sh -xv
,但我没有输出——似乎脚本甚至无法执行。
我什至不知道是什么导致了它。
问题是撰写键工作正常,但某些应用程序不接受其中的某些字符。例如,我可以?
在 Emacs ( Compose+ 8+ 8) 中输入字符,但这在 FireFox、Konsole 和 Kate 中不起作用。但是许多其他字符,例如在€
那里输入(在 FireFox、Konsole 和 Kate 中)使用Compose工作得很好。此外,我可以通过简单的复制粘贴(从两个剪贴板中的任何一个)插入问题符号。
那么,是什么原因造成的,如何解决呢?
抱歉,我不知道如何研究这个问题。我发现有些人的 Compose 键在某些应用程序中根本不起作用,但在我的情况下它是有效的,尽管部分原因。
设置:在/etc/default/keyboard
KDE 和 KDE 键盘设置中,组合键都绑定到右侧的 Super 键。
我将 ubuntu 14.04 升级到 ubuntu 16.04,但互联网连接出现问题。具体来说,更新后的 DNS 停止工作。出于调试目的,我设置了唯一的 DNS 8.8.8.8
,但名称解析仍然不起作用。的输出nmcli device show wlan1 | grep IP4
是:
pc@pc:~$ nmcli device show wlan1 | grep IP4
IP4.ADDRESS[1]: 192.168.1.3/24
IP4.GATEWAY: 192.168.1.1
IP4.ROUTE[1]: dst = 169.254.0.0/16, nh = 0.0.0.0, mt = 1000
IP4.DNS[1]: 8.8.8.8
The output from dig @8.8.8.8 google.com and dig google.com:
dig @8.8.8.8 google.com
; <<>> DiG 9.10.3-P4-Ubuntu <<>> @8.8.8.8 google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: …
Run Code Online (Sandbox Code Playgroud) 我想为匹配模式的每个文件执行一个命令。但是似乎正确的命令对我不起作用,我不知道为什么。
$ find . -type f -name '*.c' -or -name '*.h' -or -name '*.cpp' -exec ls {} \;
$ ls
script.sh test.c test.h
Run Code Online (Sandbox Code Playgroud) 我正在尝试像这样捕获数据tcpdump
:
$ sudo tcpdump -Xi eth0
Run Code Online (Sandbox Code Playgroud)
我已将设备和 PC 相互连接。在双方上,我启动一个简单的测试应用程序,向对方发送消息。
问题是,虽然双方都收到了消息,但tcpdump
没有打印任何内容。有时只能看到 ARP 请求(ARP 请求当前未连接到 LAN 的另一台 PC)。
$ ifconfig
eth0 Link encap:Ethernet HWaddr 00:0f:ea:62:ce:d6
inet addr:10.5.57.197 Bcast:10.5.255.255 Mask:255.255.0.0
inet6 addr: fe80::20f:eaff:fe62:ced6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:66497 errors:0 dropped:4334 overruns:0 frame:0
TX packets:3785 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:6539170 (6.5 MB) TX bytes:553828 (553.8 KB)
Interrupt:21
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING …
Run Code Online (Sandbox Code Playgroud) 折腾了半天,还是想不通,为什么用execl
call启动的dash就变成僵尸了。
下面是一个最小的测试用例——我只是 fork 一个孩子,复制 std [in,out,err]描述符,然后启动sh。
#include <cstdio>
#include <fcntl.h>
#include <cstring>
#include <stdlib.h>
#include <cerrno>
#include <unistd.h>
int main() {
int pipefd[2];
enum {
STDOUT_TERM = 0,
STDIN_TERM = 1
};
if (pipe(pipefd) == -1) { //make a pipe
perror("pipe");
return 0;
}
pid_t pid = fork();
if (pid == 0)
{// Child
dup2(pipefd[STDIN_TERM], STDIN_FILENO);
dup2(pipefd[STDOUT_TERM], STDOUT_FILENO);
dup2(pipefd[STDOUT_TERM], STDERR_FILENO);
execl("/bin/sh","sh", (char*)NULL);
// Nothing below this line should be executed by child process. If so, …
Run Code Online (Sandbox Code Playgroud) 当我在设备(如gdbserver :2345 myapp
)上运行 gdbserver 时,gdbserver 完全阻止终端。添加 & 符号&
或按下都不会^z使其在后台运行。我还检查过:它在 Kubuntu 上也可以重现。
我确实需要使用 shell 命令,而且由于我不知道如何通过 gdbserver 执行这些命令,所以在它运行后我感觉自己瘫痪了。
shell ×3
api ×1
bash ×1
c ×1
c++ ×1
compose-key ×1
debugging ×1
devices ×1
dns ×1
exec ×1
executable ×1
find ×1
internet ×1
kde ×1
networking ×1
patterns ×1
serial-port ×1
tcpdump ×1
terminal ×1
tty ×1
ubuntu ×1
upgrade ×1
virtualbox ×1
wildcards ×1
x11 ×1