查看树莓派温度

树莓派官方提供了相关的工具,叫做vcgencmd,vc代表了Video Core,在树莓派上就指的一整个SoC。说明文档: https://www.raspberrypi.com/documentation//computers/os.html#vcgencmd ,或者直接man vcgencmd。
通过vcgencmd measure_temp来显示温度。

树莓派显卡驱动

显卡驱动vc4-fkms-v3d的解释: https://forums.raspberrypi.com/viewtopic.php?t=260994 ,只有启用该内核模块才能启用显卡的硬件加速。

fkms is “fake kms mode”, in this mode the kernel selects the screen mode(s) for the screen(s) but the videocore firmware manages the video output path. This contrasts with “legacy” mode where the videocore firmware manages everything and “full kms” mode where the kernel manages everything.

v3d is the videocore 3D driver for the standard mesa/linux 3D stack that runs on the CPU, in contrast to the legacy 3D driver which runs on the VPU and avoids all the usual linux mechanisms.

I presume vc4 is in the name, because when the overlay was named it was the only version of videocore that the Pi had. Even though the overlay is used for both vc4 and vc6 nowadays.

4K 60Hz设置

用树莓派桌面时,发现树莓派并不能达到60Hz,这篇文章解释了具体的原因和如何修改配置: https://cloud-atlas.readthedocs.io/zh_CN/latest/arm/raspberry_pi/startup/pi_4b_4k_display.html

放弃

在树莓派的桌面环境下试了一会儿,我决定放弃使用树莓派作为日常开发环境了,性能太弱了,易用性太差。

  • CPU的性能太差,渲染网页要等待很久。
  • IO性能太差,TF卡的IOPS和标准的PCIE SSD没法比。
  • UI的缩放比不统一,在27寸4K屏幕下做不到全局200%,很累眼。

硬件购入和组装

单纯是为了娱乐,买了树莓派和智能小车。

  • 树莓派4B 8GB
  • 树莓派AI视觉四驱小车
  • 闪迪64GB TF卡 ×2
  • 纯铜散热片
    上周末用了一整天拼装完毕。然后烧录官方镜像,在手机上安装官方提供的APP,即可进行蓝牙连接进行控制,WIFI连接查看摄像头视频。
    到此为止已经可以作为一个遥控赛车的玩具了,但我们显然不会止步于此,接下来要着手学习如何通过GPIO来控制机械部件,以及如何用OpenCV和TensorFlow进行视频处理。
    官方镜像中提供了很多示例代码,但我不打算使用官方镜像,而是自己从Raspberry Pi OS逐步搭建环境,所以直接在Windows上用7Zip把官方镜像Home目录中的文件全部解压出来使用。

wiringPi控制GPIO

C++代码:

1
2
3
4
5
git clone https://github.com/WiringPi/WiringPi.git
cd WiringPi && sudo ./build
gpio -v
gcc red.c -o red -lwiringPi
./red
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// red.c
#include <wiringPi.h>
int LED_R = 3; //wiringPi的编码和物理编码、BCM编码都不同
int main()
{
wiringPiSetup();
pinMode(LED_R, OUTPUT);
while (1)
{
digitalWrite(LED_R, HIGH);
delay(1000);
digitalWrite(LED_R, LOW);
delay(1000);
}
return 0;
}

Python代码更简单,树莓派官方系统默认安装了需要的包:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import RPi.GPIO as GPIO
import time
LED_R = 22
GPIO.setmode(GPIO.BCM)
# 在树莓派上,GPIO引脚可以有多种不同的编号方式。其中两种最常见的编号方式是:BOARD和BCM。

# BOARD: 这种方式是基于物理引脚的编号方式。也就是说,当你看向树莓派的GPIO连接器,从1开始数到最后一个引脚,这就是BOARD编码。

# BCM: 这是基于Broadcom SOC Channel的编号方式。BCM是树莓派上所使用的处理器芯片的名称(例如BCM2835, BCM2836等)。BCM编码方式是基于Broadcom芯片内部的引脚编号方式。
GPIO.setup(LED_R, GPIO.OUT)
while True:
    GPIO.output(LED_R, GPIO.HIGH)
    time.sleep(1)
    GPIO.output(LED_R, GPIO.LOW)
    time.sleep(1)
GPIO.cleanup()

问题描述

TPM(Trusted Platform Module,可信赖平台模块)是用于保证安全启动的硬件模块,现在主流的CPU平台都已经支持TPM,但是实现方式不尽相同。
AMD提供了firmware TPM,也就是这次出问题的fTPM实现,和discrete TPM,两种实现方式。前者不需要外置的TPM芯片,也就是集成在CPU中。这样带来的一个问题是,TPM中记录的秘钥信息等内容需要外置到SPIROM中,通过SPI来通信。而AMD的AM4 CPU,会在通过SPI通信的时候,hang住一小段时间,大概在1s左右,完全无响应。
现象就是在Windows下打游戏的时候或者做任何事情时,一天会有那么几次随机卡住1s,完全动动不了。

解决方案

明白了原理,解决的方案就比较明确了:

更新BIOS

AMD声称在AMD AGESA 1207及更新的BIOS中解决了问题。那么需要查看主板的官网,看主板BIOS是否对应到了AMD AGESA 1207及更新的版本。我的主板是华硕B550-PLUS,BIOS更新网址是 https://www.asus.com/motherboards-components/motherboards/all-series/tuf-gaming-b550-plus/helpdesk_bios/?model2Name=TUF-GAMING-B550-PLUS
通过dmidecode检查BIOS版本发现当前主板更新到了3002的BIOS版本,对应了AGESA的1208版本。
但是根据最近网络上的反馈,似乎并没有完全解决这个问题。

切换为dTPM

dTPM因为是用的主板板载独立TPM芯片,所以不会有CPU进行SPI通信的环节,可以从根源上解决这个问题。
需要在BIOS页面中找到 AMD fTPM configuration ,然后切换为Discrete TPM。
这样会导致已经启用TPM的操作系统无法引导,需要注意先清除操作系统对TPM的依赖,比如关闭Bitlocker。

禁用TPM

如果系统完全不依赖于TPM,那还是关了为好。
我的AMD CPU主机是用来运行PVE做Server的,完全不需要TPM,可以通过BIOS直接关掉。
不过我暂时没有遇到卡住的问题,这台服务器Archimedes已经运行了22天18个小时了,等到下一次拆机维护的时候再修改BIOS配置。

Learn In Public

最近看到Learn In Public这篇文章,深以为然,不以输出为导向的学习很难取得实质性的效果,而最好的输出方式之一便是将学习的内容向公众展示,于是我重新捡起了自己的博客,要求自己坚持写博客到今年年底。先不要考虑质量如何,优先培养自己向外输出的习惯,尽量每天一篇。

Hexo博客

当前有自己的服务器、域名、证书、备案和hexo模板,但是已经太久没有写博客,导致开发环境没有了,怎么更新也忘掉了,这次正好记录下来,也便于他人复用端到端的方案。

之前使用hexo时,hexo init便是将官方的demo仓库 https://github.com/hexojs/hexo-starter 拉取到了本地,其中已经有了一个package.json文件,其中记录了所有依赖的npm包和要用到的scripts,所以只需要npm run build就可以完成构建了。

之前安装hexo时,并没有选择安装到全局路径下,而是只为当前用户安装,所以环境变量中并没有hexo,需要通过npx来运行: npx hexo new learn-in-public 来创建新的文章。然后编辑文章内容:vim ~/hexo-blog/source/_posts/learn-in-public.md。最后生成静态网页内容:npm run build

我的NGINX指向了hexo的public目录,所以build之后,NGINX就会显示最新的内容。但是在浏览器中因为缓存的问题,需要强制刷新(Chrome中Ctrl+Shift+R)来显示最新的内容。

最后就是把博文内容git add . && git commit -m "New post: learn-in-public." && git push推送到代码仓库中。

这个世界是真实的么

You ever have that feeling where you’re not sure if you’re awake or still dreaming?
你是否也曾和Neo一样,无法确认是在睡梦中,还是清醒着?你是否也怀疑过这个世界是否是Matrix构造出来的幻象?换句话说,你是否也曾经问过:这个世界是真实的么?
这个世界指的是什么?真实是什么?
What is “real”? How do you define “real”? If you are talking about what you can feel…what you can smell, what you can taste and see…then “real” is simply electrical signals interpreted by your brain.
“真实”是大脑的一种感觉,我们讲“这个世界”是否“真实”,其实是在问世界在大脑中的投影是否真实,即感官和大脑是否可信。
我们无法摆脱感官来认知世界,康德对于物自体的论述已经很清楚了。那么,问题就变成了,我们的大脑是可靠的么?或者更具体来讲,我们大脑的理性是可靠的么?

理性与绝对真理

工业革命带来的摧枯拉朽的生产力,让绝大多数人都开始相信,理性是至高无上的,绝对真理是存在的。就像牛顿一样,每一个接受自然科学训练的人,都会在很长一段时间折服于数学和物理学的普适性,从而倾向于相信在纷繁复杂的表象背后,存在一个统一一切的绝对真理,包罗万象,而我们的使命就是找到这个绝对真理。

假设绝对真理存在,或者换个表述,假设对这个世界的彻底认知是存在的,我们能够获得这个彻底认知么?

相对论的基础,非欧几里德几何学,否定了平行公设,我们开始意识到,所谓显而易见的事情并不是显而易见和正确的。数学哲学开始转向结构主义——数学是研究某些结构上的性质的学科,并不代表绝对真理。
那么我们研究这些结构性质的武器是否可靠呢?集合论是否可靠呢?在集合论的基础上自洽,完备,可判定性是否可满足?选择公理就不是那么让人信服,而哥德尔不完备定理,图灵停机问题更让人对这一问题的答案充满怀疑。

换句话说,数学的本质,也就是我们的理性和逻辑,能带我们走向绝对真理么?我想现在人们更倾向于认为是否定的。

到现在为止,上面提到的都还只是传统的纯思辨的分析方法。生命科学的发展让我们对人脑的运作方式终于有初步的了解。人脑是神经元细胞的自组织系统,无论是否在意识层面存在量子效应,这都是从单细胞生物进化来的产物,人脑相对于其他动物的大脑,不应该存在原理上的不同。让我们来用演化的角度来看待人脑,人脑不过是自然选择作用下,对地球环境的适应性的产物,是对地球环境复杂性的映射,这样的产物相比于宇宙的复杂度而言还太过简单。

举个比方,实数域的生物是无法理解复变函数的,感官提供给我们的就是0和1,大脑和理性则提供了加减乘除运算律,而世界的真理却蕴含在复数域中,在这样的感官和大脑基础上,世界的真理就是不可认知的。

这是不可知论么?并不是。承认当下的认知的局限性,反而能看到更多的可能性。就像从地心说,到日心说,到这个宇宙没有中心,我们的认知在一步步修正。
用《实践论》的句话说,这是永恒的局限性,认识的加深是永恒的话题,对于我们如何认知这个世界,静态的、绝对的观点必然不能给出令人满意的答案,只有承认认识是辩证发展的,从实践中来,到实践中去,才是最令人满意的答案。

人生的意义

对真理的追问,必然伴随的是对意义的追问。不难得到同样的论断,对意义的论断都有相同的局限性,如果认为有绝对的意义,或者说能找到绝对的意义,就是认为有绝对真理,或者能找到绝对真理,都是对认知来自实践的否定。认知和实践都是迭代加深的,所以对人生意义的理解也是如此,正确的道路,是投身到最前沿的认知和实践中去,不断探索,永不止步。

时常感慨,还好人生的意义是没有答案的,绝对真理是不存在的,否则这个世界多么无趣呀。对我这样一个神经元自组织系统来讲,最好的奖励和反馈就是自己的适用范围越来越广。
了解了一些大脑的基础知识后,我更加坚信人脑没有什么特别的,特别的是这个世界的内禀复杂度,正是世界是奇特的,有趣的,所以能够映射这个世界的大脑才是有趣的。 正因为世界是运动的发展的,是不断腐朽的,所以才有不朽的乐趣。不朽的事业,是不朽的变化和发展。神经元构成的大脑必然有它的局限性,元数学还刚刚起步,逻辑不代表一切,图灵机永不停机,我们对这世界知道的还太少,这世界真是太有趣了。

总结

我一直都是用无拘意志Unboundwill作为网名,直接来源是《魔兽世界》中术士的技能——无拘意志,最初的效果是牺牲20%生命值解除所有的控制效果。但对我而言,无拘意志根源来自于小时候读霍金的《果核中的宇宙》,开篇引用的那句《哈姆雷特》中的名言:“即使把我困在果核之中,仍自以为无限宇宙之王。”我坚信人的可贵在于意识的可贵,真正的自由是意识的自由,是无拘意志。

长久以来,我的思考一直都没有用严谨的方式组织,从今年开始,我注册了unboundwill.com的域名,试着开始将自己的思考记录下来。因为随着阅历的增加,我发现,对真理的追寻一定是殊途同归,会执着地思考世界真实性、真理绝对性、认知局限性的人,都会走上相同的道路,无论这条道路是鲜花遍地,还是荆棘密布。这条道路,从来都不孤单。

0%