1

目前我正在尝试在 2.6.39 linux 内核上使用 systemd 检查 Tixi 板的启动时间。为此,我创建了一个服务文件,该文件调用一个设置和使用 gpio 的 bash 脚本。问题是我的系统不允许我更改 gpio 的值。我可以成功地导出它,改变它的方向,但不能改变它的值。我已连接示波器以检查硬件中的值是否已更改,但未按照某些论坛的建议在文件中更新,但它是相同的:值只是没有改变!我还应该指出,如果我使用系统 V,相同的脚本正在工作,内核、busybox 和文件系统的配置完全相同。

这很讽刺,因为我已经是系统的根,但是即使更改文件的权限,也不允许我更改其值。内核也没有反馈说该操作是不可能的,而是看起来好像是可能的,但是当我检查值时,它和以前一样。

我还尝试使用 3.12(我将其更改为 systemd)在 Raspbian 中运行它,实际上它是可以做到的,只是从用户空间以正常方式。

如果您有任何想法,我将不胜感激,因为我已经没有想法了,可能是什么问题。

谢谢

PS:这是应该在 bash 行上工作的代码:

echo 0 > /sys/class/gpio/gpio104/value
more /sys/class/gpio/gpio104/value
// I get 1 not 0 as I requested

尽管如此,如果我使用 systemV,同一块板上的相同代码行可以工作,但如果我使用 systemd,则不能

4

2 回答 2

1

可能是由于您的新设置中缺少 udev,这会更改 /sys/class 中那些 gpio 的权限。您可能只想放回 udev 以查看它是否可以解决您的问题。

我不知道您的图像设置,但每个 gpio 引脚都需要在使用前导出。你是这样做的还是自动完成的?如果您有 omap mux 内核开关,您可以执行以下操作:

echo 0x104 > /sys/kernel/debug/omap_mux/cam_d5 (set mode 4 as stipulate in TI Sitara TRM)
echo 104 > /sys/class/gpio/export (export the pin)
echo out > /sys/class/gpio/gpio104/direction (set the pin as output)

也做一个 dmesg | grep gpio 看看gpio mux是否有初始化问题。

于 2014-08-07T20:32:48.470 回答
0

实际上我遇到了一个类似于你的问题,即无法手动更改 gpio pin 的值

最后得到的结果是,即使该引脚的名称是 gpio,它也只能用于输入(DM3730 gpiO_114 和 gpio_115)。

所以请参考数据表并确认它可以用于 I/O 操作。

于 2014-08-06T09:22:40.353 回答