Trm文档简写问题

我先 echo 443 > /sys/class/gpio/export 之后再# echo 444 > /sys/class/gpio/export, 现在就有了;

這個操作聽起來不合理. 我覺得你還是reset一下再重新測一次吧…

即使这样


pin电平都是0v

基本上現在有幾件事情要先確認

  1. 你用register改值的狀況下, 你pin有沒有辦法看到除了0v以外的結果
  2. 你的register值在sysfs的方法echo 1/0給value之後有沒有改變
  3. 其他根的gpio狀況也是這樣 ?

换为pin324 就可以输出 0/1;
难道是我的驱动代码有问题?
还是pinmux电子表中


改动到导致的。但我印象中在我没有驱动代码,变更pinmux电子表的时候,应该是不能export的

你前面的狀況到底在討論你的driver還是在討論sysfs?

核心讨论问题是:如果驱动中可以使用寄存器的方式,那么为何我的代码不工作,是那里错了吗; 如果驱动必须用设备树的方式,那么怎么把我的驱动和设备树绑定在一起,实现功能。其余的都是次要问题

我建議一下請你可不可以把你完整的dts貼上來? 我知道分享整份檔案有點麻煩, 但你這種截圖分享的方法說實話我真的不知道你在改哪個檔案

另外

  1. 你討論的核心問題說實話不是太重要 你現在想討論你的code是不是有問題, 我說實話這不是我關心的
    請你就用最簡單的方法, 比方說devmem tool去改你想改的那個register. 在這個狀況下你到底能不能看到這根PP.04 pin的gpio出現你要的值
    如果連devmem這種公用tool跑出來的結果都不是你要的, 那根本不用討論你的code.

  2. GPIO不需要一定跟device tree綁定在一起… 但是你的pinmux spreadsheet有些內容可能會影響… 比方說你上面截圖寫INT PD, 代表你設定成internal pull down.

tegra234-p3701-0000-plugin-manager.txt (4.1 KB)
我找不到在那里添加自定义节点比较合适,于是我就找了个比较干净的文件在其内部添加,其余的dts和dtsi都保持不变;

基于你的建议2 问个问题,比如下载下来的pinmux spreadsheet中pp4默认是input模式,但我实际的板子需要out功能,那我需要在pinmux spreadsheet中更改吗? 还是说不需要更改直接在设备树中添加一个pp4_out的节点即可?

现在PP.04 pin 用 devmem這種公用tool 可以实现0/1输出了。我也不想研究为何以前就不行了。

最后就是即使用tool 可以实现0/1输出,那么驱动中应该是用api去控制把,这些api那里有?

Hi,

我直接講明白一點, 我們不會幫你的driver去debug.

但是我可以給你API範例然後請你參考範例.
kernel/kernel-5.10/drivers/gpio/gpiolib-sysfs.c

但是這個範例本身就是gpio sysfs的driver. 所以請你先回答我們,到底你的gpio sysfs在這根pin上能不能正常運作?
不然我給你這driver code也沒有用

這根pin上能正常運作

1 Like

如果我要使用PP4,那么设备树中是用分割线上面的形式还是下面的形式?

  1. 你那個pinctrl_gpio_led1是pinmux設定, 這東西只能寫在mb1 bct dtsi裡面, 跟kernel dts是不同的東西. 這寫在kernel dts會沒有用

  2. gpio_for_led 那的是給你的kernel driver用的, 這東西只能寫在kernel dts.

mb1 bct dtsi 具体的名称是什么?
kernel dts 具体的名称是什么?
那比如我就使用pp4, 给在那些文件中加入什么内容,
跪求明示啊,给个demo。
你把我说模糊了,那意思这里加都是无效的内容?

你说的mb1 bct dtsi其实就是pinmux电子表个生成的dtsi文件把,所以29行应该是 <&soc_gpio23_pp4>;即可;32行到40行的内容删除。
修改完之后 那我应该使 用分割线上面的形式还是下面的形式?

就是该不该有 pinctrl-name 和 pinctrl-0 属性

hello , i am waiting online , give me a response

那我现在是 写在 kernel dts. 里了吗?

我理解的kernal dts 应该是 tegra234-p3701-0005-p3737-0000.dts 文件 及其 include 近来的所有dts和dtsi文件,应该都是你所说的 kernal dts 把

Pinmux spreadsheet 建出來的檔案應該要放在Linux_for_Tegra/bootloader/t186ref/BCT底下
至於到底是要哪個檔案可以從你的flash log看出來. 這些檔案最後都是dtsi結尾, 你不用做build dtb的動作

你現在改的應該是kernel dts沒錯, 這最後會被build成kernel放進Linux_for_Tegra/kernel/dtb