分类 随手记 下的文章

这是我写的DS18B20用户态驱动

Goodspeed最近好像比较清闲,所以这位有点闲的同学跑来远程我的OrangePi Zero2 完成了一份正经的单总线驱动。实现后效果如下:

root@orangepizero2:~# cd /sys/bus/w1/devices/28-0721c061a6ac/
root@orangepizero2:/sys/bus/w1/devices/28-0721c061a6ac# ls
alarms eeprom_cmd hwmon power temperature
conv_time ext_power id resolution uevent
driver features name subsystem w1_slave
root@orangepizero2:/sys/bus/w1/devices/28-0721c061a6ac# cat w1_slave
bb 01 4b 46 7f ff 0c 10 74 : crc=74 YES
bb 01 4b 46 7f ff 0c 10 74 t=27687

显而易见大约27摄氏度,详细过程会在他的博客写好后在下方公开。(人比人气死人:)

给香橙派 Zero 2 适配 1-wire 总线

给香橙派 Zero 2 适配 1-wire 总线————William Goodspeed
在向Goodspeed抱怨此事之前,香橙派官方4群里邹明燊先生也曾经写过一个dts文件,也是根据其他已经支持1-wire的设备简单改写的(如下),但是我通过orangepi-add-overlay xxx.dts 添加后会在日志中看到错误信息,即我上一篇文章里写被占用的哪些错误信息,并且经过测试dts生成的dtb文件没有正常工作。而Goodspeed提供的截图中可以看到,这个dts文件并没有写错,只是设置的GPIO不同。

/dts-v1/;
/plugin/;

/ {
    compatible = "allwinner,sun50i-h616";

    fragment@0 {
        target = <&pio>;
        __overlay__ {
            w1_pins: w1_pins {
                pins = "PC9";
                function = "gpio_in";
            };
        };
    };

    fragment@1 {
        target-path = "/";
        __overlay__ {
            onewire@0 {
                compatible = "w1-gpio";
                pinctrl-names = "default";
                pinctrl-0 = <&w1_pins>;
                gpios = <&pio 2 9 0>; /* PC9 */
                status = "okay";
            };
        };
    };
};

二者的主要不同在于Goodspeed是在 arch/arm64/boot/dts/allwinner/overlay/Makefile 中加入一行 sun50i-h616-w1-gpio.dtbo,make dtbs让构建系统编译新的 overlay,而邹明燊先生试图让我直接通过orangepi-add-overlay将改写好的单总线支持dts文件编译并自动添加到overlay路径。
这两者方法不太一样,Goodspeed的方法是从orange-pi-5.16-sunxi64 linux分支源码中自动编译生成dtbo文件,而邹明燊先生是自己写dts从写好的dts去编译得到dtbo文件。但是不知道为什么后者无法生效,从内核日志里的报错看是和pinctl冲突了,也就是说比pinctl抢先占用了pin,但是理论上应该先由pinctl统一管理,驱动应该基于pinctl运行。从这点看,由linux分支源码去自动编译可能会得以避开这一问题,但是具体避开抢占问题的原理就不得而知了,我也不打算深究。

Goodspeed编译好的单总线设备树overlay文件

prebuilt-dtbs.tar

关于linux设备树,请参考如下内容深入浅出理解Linux设备树(DTS)
Dts:DTS即Device Tree Source,是一个文本形式的文件,用于描述硬件信息。一般都是固定信息,无法变更,无法overlay。
Dtsi:可以理解为dts的公共部分,添加、变更非常灵活。Dtsi包含在dts中。
Dtb:Dtb编译出来的二进制
Dtbo:Overlay编译出来的二进制
dtbo-base:指定overlay是以哪个dtb为base来覆盖的。
Node:树的节点
Property:属性

OrangePiZero2IO 2022-07-11T10:09:56.png

研究一番发现官方没有现成的单总线驱动可用,必须得自己写一个驱动驱动单线设备。

 +------+-----+----------+------+---+  Zero 2  +---+------+----------+-----+------+
 | GPIO | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | GPIO |
 +------+-----+----------+------+---+----++----+---+------+----------+-----+------+
 |      |     |     3.3V |      |   |  1 || 2  |   |      | 5V       |     |      |
 |  229 |   0 |    SDA.3 |  OUT | 1 |  3 || 4  |   |      | 5V       |     |      |
 |  228 |   1 |    SCL.3 |  OUT | 1 |  5 || 6  |   |      | GND      |     |      |
 |   73 |   2 |      PC9 |  OUT | 1 |  7 || 8  | 1 | OUT  | TXD.5    | 3   | 226  |
 |      |     |      GND |      |   |  9 || 10 | 1 | OUT  | RXD.5    | 4   | 227  |
 |   70 |   5 |      PC6 |  OUT | 1 | 11 || 12 | 1 | OUT  | PC11     | 6   | 75   |
 |   69 |   7 |      PC5 |  OUT | 1 | 13 || 14 |   |      | GND      |     |      |
 |   72 |   8 |      PC8 |  OUT | 1 | 15 || 16 | 1 | OUT  | PC15     | 9   | 79   |
 |      |     |     3.3V |      |   | 17 || 18 | 1 | OUT  | PC14     | 10  | 78   |
 |  231 |  11 |   MOSI.1 |  OUT | 1 | 19 || 20 |   |      | GND      |     |      |
 |  232 |  12 |   MISO.1 |  OUT | 1 | 21 || 22 | 1 | OUT  | PC7      | 13  | 71   |
 |  230 |  14 |   SCLK.1 |  OUT | 1 | 23 || 24 | 1 | OUT  | CE.1     | 15  | 233  |
 |      |     |      GND |      |   | 25 || 26 | 1 | OUT  | PC10     | 16  | 74   |
 |   65 |  17 |      PC1 |  OUT | 1 | 27 || 28 |   |      |          |     |      |
 |  272 |  18 |     PI16 |  OUT | 1 | 29 || 30 |   |      |          |     |      |
 |  262 |  19 |      PI6 |  OUT | 1 | 31 || 32 |   |      |          |     |      |
 |  234 |  20 |     PH10 | ALT3 | 0 | 33 || 34 |   |      |          |     |      |
 +------+-----+----------+------+---+----++----+---+------+----------+-----+------+
 | GPIO | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | GPIO |
 +------+-----+----------+------+---+  Zero 2  +---+------+----------+-----+------+

端口占用情况:
已占用:
PC1,pin PC1 already requested by onewire@0; cannot claim for 300b000.pinctrl:65
PC5,pin PC5 already requested by onewire@0; cannot claim for 300b000.pinctrl:69
PC9,pin PC9 already requested by onewire@0; cannot claim for 300b000.pinctrl:73
PC6, pin PC6 already requested by onewire@0; cannot claim for 300b000.pinctrl:70
PC8,pin PC8 already requested by onewire@0; cannot claim for 300b000.pinctrl:72
PC10,pin PC10 already requested by onewire@0; cannot claim for 300b000.pinctrl:74
PC11,pin PC11 already requested by onewire@0; cannot claim for 300b000.pinctrl:75
PC12,PC13是两个板载LED
PH3,w1-gpio onewire@0: gpio_request (pin) failed

为什么没有叕?因为这是有记载的第三次。(实际是第N次)
原服务器:阿里云 老云翼转享1c2g5m
现服务器:腾讯云 某活动轻量2c2g4m
下次迁移:一年后
2022年7月11日:
我貌似迁移的时候把api.xfox.fun整个站点漏过去了,程序和数据全无。啊啊啊啊啊啊啊啊啊😢

主题来源:https://www.xfce-look.org/p/1591292/ (看了Linux.cn那一篇文章发现的。)

这个主题大部分默认是挺好的,但是不知道为什么关机/登出的提示面板也就是:xfce4-session-logout 这个程序的背景很黑,所以我必须修改以下。
先去主题文件安装目录:/usr/share/themes/
找到windows-11文件夹,用VSC打开,全局搜索文件 找xfce4-session-logout,但是很遗憾没找到。那就盲猜以下,试试搜索logout
果然,如图,可以找到多个和xfsm-logout-dialog相关的内容,把gtk3里和xfsm-logout-dialog相关的的background修改下,我这里已经修改为.xfsm-logout-dialog {background: rgba(238,244,249, 0.85); border-radius: 15px;}了。这个rgba是照抄了xfce-look 上的win11主题文件里xfce4-session-logout背景色设置。
2022-06-26T05:07:58.png
改完保存重启PC即可。
如果你觉得还不够,还可以自行调整按钮背景色和文本背景色,以确保xfce4-session-logout所有内容清晰可见。不过我改第一条就足够清楚了,其他的就不做修改。
最后放一张我的桌面预览图。
2022-06-26T05:18:40.png

先来感慨一下:如图,装完常用软件的两个系统是这样的:
2022-06-24T10:11:30.png
Linux Mint20.3Una的占用和Windows10比起来几乎可以忽略,这就不得不提一提国产垃圾软件用的一个又一Electron 外壳了。:)
我必须承认,我的显示器在WIndows下才能取得更好的显示效果,为什么这样说呢?
因为我在Linux下只能使用19201080 、1280 720分辨率,在windows下我还可以额外使用1600900和1366768。好在Linux下DPI可以调整,经过调整后体验也可以勉强接受。

所以我为什么要降低自己的使用体验?

哦,这你不如问问微软是怎么把用户数据(包括但不限于你正在运行的进程和使用时间)传到自己的服务器的。很遗憾我不是一个喜欢在隐私保护上委屈自己的人,但是这也意味着我就不可避免的要在其他地方委屈一下自己了。

视觉效果区别:

Windows10下1600*900分辨率无缩放:
2022-06-24T10:27:15.png
LinuxMint20.3Una下1920*1080分辨率调整DPI后:
2022-06-24T12:02:30.png

更改NTFS分区为EXT4分区

有手就行略