我在定制板上有一个嵌入式 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的接收工具,因为它仅支持 …
我目前正在尝试使 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) 我目前正在尝试通过蓝牙在两块板之间实现 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) 如何检查磁盘映像的文件系统格式?
我知道我可以检查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 系统看起来像一个 USB 外围设备。
就像智能手机可以根据它们连接的设备从主设备切换到从设备一样,我想知道是否有可能与 Linux 系统具有相同的行为。
例如,我在带有 USB 连接器的卡上有一个嵌入式 Linux,当我将 USB 密钥插入该卡时,USB 密钥被检测为从设备并安装在文件系统上。现在,如果我将卡连接到计算机,我也希望将其识别为 USB 从设备。
你认为这可能吗?
我发现了一个类似的问题,但没有回答将 Linux 目录用作 Android 手机的 USB-OTG 设备?
由于这些原因,我最终选择尝试将系统配置为 MTP 设备,而不是将其显示为大容量存储:
由于我在配置它时遇到了一些问题,因此我在这里为感兴趣的人打开了一个新问题。
我目前正在尝试使 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) 我目前正在开发一个 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 似乎没有检测到分叉,因为它在 …
我正在基于 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,要么由部署它的众多内核框架之一发送到 …
当我将包含多行变量的命令输出直接保存到我的终端中时,我得到以下结果:
$ 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 循环中的四个目录路径中的每一个。
linux ×4
embedded ×2
bluetooth ×1
buildroot ×1
command-line ×1
daemon ×1
disk-image ×1
ethernet ×1
filesystems ×1
fork ×1
hot-plug ×1
minicom ×1
networking ×1
posix ×1
pulseaudio ×1
serial-port ×1
shell ×1
shell-script ×1
systemd ×1
timeout ×1
uart ×1
udev ×1
usb ×1
usb-device ×1
usb-drive ×1
usb-otg ×1