bash 可以用来直接和硬件通信吗?
Can bash be used to communicate directly with hardware?
如果可能的话,我有兴趣在 bash 中编写自己的工具来代替我当前的网络控制器 (wpa_supplicant)。例如,如果我想发出命令以与路由器的外部注册商开始 wps 身份验证会话,是否可以在不使用任何预构建工具的情况下与内核通信以直接访问硬件?我被告知我可以通过名为 ctypes.sh
的 bash plugin 实现我想要的,但我不太确定。
不,这通常是不可能的。 Shell 脚本可以在 /proc 中乱七八糟,但它们不具备执行任意 IOCTL 甚至多步交互式 IO 的能力。这是工作的错误工具。
一般来说,Linux内核可以通过以下机制与user-space交互:
- 系统调用
/dev
中的设备
/sys
中的条目
/proc
中的条目
无法直接从 Bash 使用系统调用,但您至少需要通过 C 程序进行绑定。
您可以创建一个 Linux 内核驱动程序或模块,其中 reads/writes 数据位于 /proc
或 /sys
下的条目中,然后使用 bash 程序与之互动。即使在技术上可行,我个人认为这是一种矫枉过正,通常 C/C++ 在 /dev
中具有适当条目的用户级编程要好得多。
如果可能的话,我有兴趣在 bash 中编写自己的工具来代替我当前的网络控制器 (wpa_supplicant)。例如,如果我想发出命令以与路由器的外部注册商开始 wps 身份验证会话,是否可以在不使用任何预构建工具的情况下与内核通信以直接访问硬件?我被告知我可以通过名为 ctypes.sh
的 bash plugin 实现我想要的,但我不太确定。
不,这通常是不可能的。 Shell 脚本可以在 /proc 中乱七八糟,但它们不具备执行任意 IOCTL 甚至多步交互式 IO 的能力。这是工作的错误工具。
一般来说,Linux内核可以通过以下机制与user-space交互:
- 系统调用
/dev
中的设备
/sys
中的条目
/proc
中的条目
无法直接从 Bash 使用系统调用,但您至少需要通过 C 程序进行绑定。
您可以创建一个 Linux 内核驱动程序或模块,其中 reads/writes 数据位于 /proc
或 /sys
下的条目中,然后使用 bash 程序与之互动。即使在技术上可行,我个人认为这是一种矫枉过正,通常 C/C++ 在 /dev
中具有适当条目的用户级编程要好得多。