小编Ark*_*aik的帖子

在没有 kermit 和 lrzsz 的情况下通过串行检索文件

我在定制板上有一个嵌入式 Linux,我想通过其串行端口发送和接收文件。

与该设备进行通信的唯一方式是通过串行,并且该设备在该串行端口上提供了一个控制台。

这个板子kermit既没有busybox rx也没有lrzsz

- 发送文件到远程

我能够按照此线程将文件发送到董事会。

Host side                              Remote side

cat file | base64 > file_b64
                                       cat > file_b64
minicom's ctrlA-S => send 'file_b64'
                                       cat file_b64 | base64 --decode > file
Run Code Online (Sandbox Code Playgroud)

- 从远程获取文件

现在我想从远程系统检索文件。

Minicom 有一个接收文件的工具,但由于我只有串行端口的控制台使用 minicom 在远程端发出命令,我找不到如何去做。

我曾尝试在主机端使用 kermit,但似乎我还需要在远程端使用 kermit。


编辑:

我也尝试反转发送方法,但没有成功,因为我从主机端的串行端口没有收到任何信息。

Host side                              Remote side

                                       cat file | base64 > file_b64
                                       (sleep 10; cat file_b64 > /dev/ttyS0) &
                                       minicom's ctrlA-X => exit minicom
cat /dev/ttyUSB0 > file_b64
Run Code Online (Sandbox Code Playgroud)

无法使用Minicom的接收工具,因为它仅支持 …

file-transfer serial-port serial-console minicom uart

9
推荐指数
2
解决办法
8042
查看次数

Pulseaudio 守护程序未针对 pacmd 运行

我目前正在尝试使 HSP 蓝牙配置文件在基于 Atmel SAMA5D2 的自定义板上工作。我正在使用由 Buildroot-2017-08 制作的自定义 Linux。

我正在尝试配置pulseaudio。pulseaudio 包是来自 buildroot 的包,我勾选了“作为系统守护进程启动”。

系统启动时,pulseaudio 好像在运行

# ps aux | grep pulse
  174 pulse    usr/bin/pulseaudio --system --daemonize --disallow-exit --disallow-module-loading
  197 root     grep pulse
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试与守护进程通信时,它失败了

# pacmd 
No PulseAudio daemon running, or not running as session daemon.
# pacmd info
No PulseAudio daemon running, or not running as session daemon.
# pactl info
Connection failure: Access denied
Run Code Online (Sandbox Code Playgroud)

我意识到如果我导出以下环境变量,消息会发生变化

# export PULSE_RUNTIME_PATH="/run/pulse"
# pacmd info
Daemon not responding.
# pactl info
Connection failure: …
Run Code Online (Sandbox Code Playgroud)

linux embedded pulseaudio

8
推荐指数
1
解决办法
3万
查看次数

无法连接到 PAN 蓝牙接入点

我目前正在尝试通过蓝牙在两块板之间实现 PAN 连接。

第一个板是 Raspberry Pi Zero,第二个是基于 Atmel Sama5d2 的定制板。
主板分别运行 Linux 4.9.75+ 和 Linux 4.9.30,并使用 BlueZ v5.43 和 BlueZ v5.46。

我能够使用bt-pan脚本连接到我手机的蓝牙连接与两块板的连接。

这是连接到我手机的系留连接的痕迹

# bt-pan --debug client 60:45:CB:2F:C6:4C --wait
DEBUG:root:Using local device (addr: B8:27:EB:20:54:45): /org/bluez/hci0
DEBUG:root:Using remote device (addr: 60:45:CB:2F:C6:4C): /org/bluez/hci0/dev_60_45_CB_2F_C6_4C
DEBUG:root:Connected to network (dev_remote: /org/bluez/hci0/dev_60_45_CB_2F_C6_4C, addr: 60:45:CB:2F:C6:4C) uuid 'nap' with iface: bnep0
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所做的(使用 rpi 作为客户端和自定义板作为服务器):

板配对

服务器端

[bluetooth]# paired-devices
Device B8:27:EB:20:54:45 raspberrypi[/code]
Run Code Online (Sandbox Code Playgroud)

客户端

[bluetooth]# paired-devices
Device 00:16:A4:0A:15:13 BlueZ 5.46
Run Code Online (Sandbox Code Playgroud)

在服务器端设置桥接接口

#brctl addbr bnep0
#brctl setfd bnep0 0 …
Run Code Online (Sandbox Code Playgroud)

linux networking bluetooth

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

检查磁盘映像文件系统类型

如何检查磁盘映像的文件系统格式?

我知道我可以检查file命令,但我想自动化该行为。

$ file img.raw
img.raw:   data

$ file img.ext4
img.raw:   Linux rev 1.0 ext4 filesystem data, UUID=346712e7-1a56-442b-a5bb-90ba4c6cc663 (extents) (64bit) (large files) (huge files)

$ file img.vfat
img.vfat:  DOS/MBR boot sector, code offset 0x3c+2, OEM-ID "mkfs.fat", sectors/cluster 16, reserved sectors 16, root entries 512, Media descriptor 0xf8, sectors/FAT 256, sectors/track 32, heads 64, sectors 1024000 (volumes > 32 MB) , serial number 0x4b5e9a12, unlabeled, FAT (16 bit)
Run Code Online (Sandbox Code Playgroud)

我想检查给定的图像磁盘是否使用给定的格式进行格式化。

例如,checkfs <image> <format>如果图像包含“格式”文件系统,则返回 0,否则返回另一个值。

我想过做类似的事情file <image> | …

linux filesystems disk-image

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

将 Linux 系统配置为 OTG 设备

我想知道是否有可能让 Linux 系统看起来像一个 USB 外围设备。

就像智能手机可以根据它们连接的设备从主设备切换到从设备一样,我想知道是否有可能与 Linux 系统具有相同的行为。

例如,我在带有 USB 连接器的卡上有一个嵌入式 Linux,当我将 USB 密钥插入该卡时,USB 密钥被检测为从设备并安装在文件系统上。现在,如果我将卡连接到计算机,我也希望将其识别为 USB 从设备。

你认为这可能吗?

我发现了一个类似的问题,但没有回答将 Linux 目录用作 Android 手机的 USB-OTG 设备?


由于这些原因,我最终选择尝试将系统配置为 MTP 设备,而不是将其显示为大容量存储:

  • 防止并发文件访问
  • 防止系统因并发文件访问或错误挂载/卸载而崩溃或损坏
  • 无需卸载或停止即可公开根文件系统
  • 可以共享多个设备

由于我在配置它时遇到了一些问题,因此我在这里为感兴趣的人打开了一个新问题。

embedded usb usb-otg

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

带有 configfs 的 USB 大容量存储设备未显示 UDC

我目前正在尝试使 USB 大容量存储小工具在树莓派零 W 上工作。

我的主要目标是将 Mass_storage 和 mtp 响应器功能实现到一个小工具中,但稍后会实现。

我按照此文档Equivalent of g_mass_storage with configfs编写了以下脚本,该脚本通过 configfs 和 functionfs 初始化 USB 海量存储小工具的配置。

#!/bin/sh

set -e

CONFIGFS="/sys/kernel/config"
GADGET="$CONFIGFS/usb_gadget"
VID="0x0525"
PID="0xa4a2"
SERIAL="0123456789"
MANUF="Myself"
PRODUCT="MyProduct"

case "$1" in
    start)
        echo "Creating the USB gadget"
        echo "Loading composite module"
        modprobe libcomposite

        echo "Creating gadget directory g1"
        mkdir -p $GADGET/g1

        cd $GADGET/g1
        if [ $? -ne 0 ]; then
            echo "Error creating usb gadget in configfs"
            exit 1;
        else
            echo "OK"
        fi

        echo "Creating …
Run Code Online (Sandbox Code Playgroud)

usb-drive usb-device

3
推荐指数
1
解决办法
6207
查看次数

Systemd 超时,因为它没有检测到守护进程分叉

我目前正在开发一个 systemd 守护进程。我面临的问题是守护进程在蜜蜂启动后 1 分 30 秒被杀死,因为没有检测到分叉。

我正在使用该int daemon(int nochdir, int noclose)函数来守护进程。

int main()
{
    openlog("shutdownd", LOG_PID, LOG_DAEMON);

    if(daemon(0, 0) != 0)
    {
        syslog(LOG_ERR, "Error daemonizing process : %s\n", strerror(errno));
        exit(EXIT_FAILURE);
    }
    syslog(LOG_NOTICE, "Daemon started !\n");

    pthread_create(&threads[0], NULL, &alimThread, NULL);
    pthread_create(&threads[1], NULL, &extinctThread, NULL);
    pthread_create(&threads[2], NULL, &blinkThread, NULL);

    while(1)
    {
    }

    syslog(LOG_NOTICE, "Daemon stopped !\n");
    exit(EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)

这是服务文件 /etc/systemd/system/shutdownd.service

[Unit]
Description=Shutdown Daemon
After=syslog.target

[Service]
Type=forking
PIDFile=/var/run/shutdownd.pid
ExecStartPre=/bin/rm -f /var/run/shutdownd.pid
ExecStartPre=/usr/bin/shutdownd-exportGpio.sh
ExecStart=/usr/bin/shutdownd
Restart=on-abort

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

守护程序函数应该派生进程并将其与终端分离,我还关闭文件描述符并将工作目录更改为 /。

然而,systemd 似乎没有检测到分叉,因为它在 …

linux fork systemd timeout daemon

3
推荐指数
1
解决办法
5983
查看次数

Udev - 未捕获网络电缆热插拔事件

我正在基于 Atmel Sama5d2 的定制板上运行 buildroot 定制 Linux(内核 4.9.87)。

我正在尝试仅在热插拔时使用 dhcp 在 eth0 接口上配置网络。

最初,该接口是在启动时使用auto eth0into配置的/etc/network/interfaces

我将其更改为allow-hotplug eth0具有以下文件

# cat /etc/network/interfaces 

auto lo
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet dhcp
Run Code Online (Sandbox Code Playgroud)

进行此更改后,udhcpc 不会在启动时运行,并且如果未插入电缆,也不会再阻止 linux 启动 30 秒。

但是,当我插入或拔出电缆时,没有任何反应。

如果我手动运行,ifup -a我会在接口上获得一个 IP 地址eth0

从这个结果来看,我认为问题不是来自网络配置,而是更多来自处理低级事件。

我尝试使用 udevadm 监视电缆的插入/拔出,但在插入和拔出电缆时看不到任何内核事件(但我可以看到来自 USB 子系统的事件)。

我还编写了一条 udev 规则来记录事件,以防 udevadm 未中继此子系统事件。

# cat /etc/udev/rules.d/20-network.rules 
SUBSYSTEM=="net", ACTION=="add", RUN+="/test.sh add"
SUBSYSTEM=="net", ACTION=="remove" , RUN+="/test.sh remove" 
Run Code Online (Sandbox Code Playgroud)

然而,这条规则也不会触发任何事情。


所以现在我认为我在检测网络电缆热插拔时遇到问题。

我可能是内核配置错误以及硬件接线错误。

我真的不知道如何在硬件级别检测插入/拔出事件,但我认为该事件要么由驱动程序本身直接发送到 udev,要么由部署它的众多内核框架之一发送到 …

udev ethernet hot-plug buildroot network-interface

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

Posix shell 脚本 - 将多行命令输出保存到变量

当我将包含多行变量的命令输出直接保存到我的终端中时,我得到以下结果:

$ dirs=$(ls -1d /mnt/*/)
$ echo $dirs
/mnt/ext4/ /mnt/local/ /mnt/remote/ /mnt/test/
$ echo "$dirs"
/mnt/ext4/
/mnt/local/
/mnt/remote/
/mnt/test/
Run Code Online (Sandbox Code Playgroud)

但是,当从 posix shell 脚本使用它时,结果是不同的。这是脚本

#!/bin/sh

dirs=$(ls -1d $1)
echo "inline"
echo $dirs
echo "multiline"
echo "$dirs"
Run Code Online (Sandbox Code Playgroud)

这是脚本输出

$ ./test.sh /mnt/*/
inline
/mnt/ext4/
multiline
/mnt/ext4/
Run Code Online (Sandbox Code Playgroud)

即使我使用 bash 而不是 sh,也会发生这种情况。

有谁知道我如何将输出保存ls -1d /mnt/*/到保持完整输出的变量中?
我想解析 for 循环中的四个目录路径中的每一个。

command-line shell shell-script posix

0
推荐指数
1
解决办法
3972
查看次数