【每周学习摘要05(23/10/20-23/10/26)】

AllwinnerH616

Embedded E-phy

其实驱动是好的,只是需要先运行udhcpc
source:【v3s】为v3s启用以太网ephy功能,在嵌入式linux内使用网络

Cjktty 中文控制台

Github Repo
sourcecentos 编译安装新内核并添加中文内核补丁(cjktty)模块

启用CCACHE 加速内核编译速度

例子是从DumTux的那个仓库的armbian build 脚本偷的

12:54:45 ztn@ztn-virtual-machine kernel ±|develop ✗|→ export PATH="/usr/lib/ccache:$PATH"
12:54:51 ztn@ztn-virtual-machine kernel ±|develop ✗|→ export PATH="$PATH:/home/ztn/Desktop/Allwinner-H616.bak/toolchains/bin"
12:54:55 ztn@ztn-virtual-machine kernel ±|develop ✗|→ CCACHE_BASEDIR=$(pwd) CROSS_COMPILE="ccache aarch64-none-linux-gnu-" ARCH=arm64 LOCALVERSION="-sun50iw9" make menuconfig

经我自己弄,只需要开启
Library routines -> CJK 16x16 font & CJK 32x32 font,确认勾选。对应的是.config文件CONFIG_FONT_CJK_16x16=y & CONFIG_FONT_CJK_32x32=y
但是我发现5.16.x的补丁里面 font_cjk_32x32.h是空文件
于是只能修改/etc/default/console-setup

CODESET="Arabic"
FONTFACE="VGA"
FONTSIZE="16"

使用Arabic-VGA16字体
最终效果:

st7789/mcp2515移植笔记

PHYS212 错题集

HW5/6

电势能题目

这题其实不需要考虑为四个部分,因为球体和壳体都是导体,那么电势始终为0
完整做题过程:(答案是dE2+dE4),如果壳体和球体都是绝缘体那么就是dE全部

>>> a=2.5e-2
>>> Qin=-3e-9
>>> b=0.06
>>> c=0.09
>>> Qout=2e-9
>>> rou1=Qin/(4/3*pi*(a)**3)
>>> dE1=a**2*rou1/6/ep
>>> dE1
-539.5082816674418
>>> dE2=3e-9/4/pi/ep*(1/b-1/a)
>>> dE2
-629.4263286120154
>>> Vi=4/3*pi*b**3
>>> Vo=4/3*pi*c**3
>>> f = lambda r:((3e-9+4*pi/3*b**3*rou2)/4/pi/ep/r+(rou2*r**2/6/ep))
>>> rou2=Qout/(Vo-Vi)
>>> dE3=f(c)-f(b)
>>> dE3
-113.05485434551656
>>> dE4=-1e-9/4/pi/ep/c
>>> dE4
-99.90894104952628
>>> dE1+dE2+dE3+dE4
-1381.8984056744998
>>> dE4
-99.90894104952628
>>> dE2+dE4
-729.3352696615416

推导过程:

【每周学习摘要04(23/10/13-23/10/19)】

关于Allwinner sunxi社区主线支持的一个疑问

我看linux-sunxi上的Mainlining-effort,比如H616的de33(Display Engine)驱动都支持了,
但是在github上的linux官方仓库https://github.com/torvalds/linux却找不到。
一段摸索过后发现也许是在kernel.org的仓库里git://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux.git,但是也并不是

邮件列表

后来发现linux-sunxi会在邮件列表,发布patch,然后armbian会收录它们在自己的仓库里,在编译镜像的时候会被apply,这点从armbian下载的镜像内提取的dtb可以发现有gpu node
patch/kernel/archive/sunxi-x.y下面,比如说这个为linux-6.1的H616添加的mali gpu patch
patch/kernel/archive/sunxi-6.1/patches.armbian/arm64-dts-allwinner-sun50i-h616-Add-GPU-node.patch
至于邮件列表在哪里找,一般是在仓库顶级MAINTAINER下面找,打个比方

ARM/Allwinner sunXi SoC support
M:  Chen-Yu Tsai <wens@csie.org>
M:  Jernej Skrabec <jernej.skrabec@gmail.com>
M:  Samuel Holland <samuel@sholland.org>
L:  linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
L:  linux-sunxi@lists.linux.dev
S:  Maintained
T:  git git://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux.git
F:  arch/arm/mach-sunxi/
F:  arch/arm64/boot/dts/allwinner/
F:  drivers/clk/sunxi-ng/
F:  drivers/pinctrl/sunxi/
F:  drivers/soc/sunxi/
N:  allwinner
N:  sun[x456789]i
N:  sun[25]0i

M代表Maintainer
L代表Mailing List
S代表Status
T代表Tree
F代表Folder
具体细节在https://www.kernel.org/doc/linux/MAINTAINERS
然后lore.kernel.org可以找到各个邮件列表的归档,比如想找jernej.skrabec@gmail.com在
linux-sunxilinux-arm-kernel上面的mails

Google群组

除此之外他们在google groups上还有一个群组https://groups.google.com/g/linux-sunxi

patchwork.kernel.org

除此之外还有一个专门放patchwork的网站https://patchwork.kernel.org/project/linux-arm-kernel/list/

最后一个疑问

一个H616 GPU的patch在armbian上,但是没有出现在之前任何一个Mailist或者平台上
观察文件发现这个patch是jernej.skrabec@gmail.com于Fri, 15 Oct 2021创建的
sunxi-5.15/patches.armbian/arm64-dts-allwinner-sun50i-h616-Add-GPU-node.patch
sunxi-5.15/patches.armbian/arm64-dts-sun50i-h616-orangepi-zero2-Enable-GPU-mali.patch
然后之后所有的仓库都是基于这个patch的,包括但不限于dumtux/Allwinner-H616EchoHeim/Allwinner-H616,还有Bigtree-CB1,之类的仓库
现在想知道这是否没有发现一个重要的邮件列表,等以后再发现

h616的spi设备,好像正常加载不会打印日志


搞了半天还以为spi没加载,其实是加载了。
那个Dumtux的仓库两个spi总线控制器都没开起来。当我开起来后,再把tft和mcp2515都设置成okay,
/dev/fb0都出来了,
然后mcp2515好像probe失败了,这说明应该是成功读取SPI端口了
还有,设备树在/boot/dtb下,而不是有sun50i后缀那个

总算是把tinalinuxv853编译成功了


Tina-linux 4.9
然后把出错的老sdk删了,新的放在D:\Embedded\Tutorial\100ASK_V853-PRO_V1.0_2023-03-31\07_Tina_SDK,并且把100ASK的patch打包成了tgz文件,这下以后就不用每次git clone了。

【每周学习摘要03(23/10/06-23/10/12)】

Linux

Dumtux Allwinner-H616

如何设置Console文字大小

apt install console-setup
vim /etc/default/console-setup

然后找到 FONTSIZE="8X16",将其改成想要的大小,前提是要有相应的字体(在/usr/share/consolefonts/下)
参考文献(原理):how-does-etc-default-console-setup-work

如何使用mpg123播放音乐

首先先查找alsa设备

首先切换root用户

root@debian:~# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: sndahub [sndahub], device 0: Media Stream sunxi-ahub-aif1-0 [Media Stream sunxi-ahub-aif1-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: sndahub [sndahub], device 1: System Stream sunxi-ahub-aif2-1 [System Stream sunxi-ahub-aif2-1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: sndahub [sndahub], device 2: Accompany Stream sunxi-ahub-aif2-2 [Accompany Stream sunxi-ahub-aif2-2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: allwinnerhdmi [allwinner-hdmi], device 0: hdmi i2s-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: Codec [H616 Audio Codec], device 0: CDC PCM Codec-0 [CDC PCM Codec-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
root@debian:~#

可以看到3.5mm耳机口连的是Card 2, device 0.
然后播放mican.mp3

mpg123 -o alsa:hw:2,0 mican.mp3

2,0 代表Card2, Device 0
成功

root@debian:~# mpg123 -o alsa:hw:2,0 mican.mp3
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
        version 1.26.4; written and copyright by Michael Hipp and others
        free software (LGPL) without any warranty but with best wishes

Terminal control enabled, press 'h' for listing of keys and functions.

Playing MPEG stream 1 of 1: mican.mp3 ...

MPEG 1.0 L III vbr 44100 j-s

Title:   Deadline                                               Artist: mican*
Comment: 163 key(Don't modify):L64FU3W4YxX3ZFTmbZ+8/YbXbFhceJfzVBcDqtugbk+kjqrhPKzfIVXa/qOBTlTyUkB81ivVgOouMvwSprx4wiWVJDEkDSz8AHrw5PtgpdcoOeaTCLZKXqueuaq6kTRm16Gy6C3zAo00T8hBCzf38skn1M26qkQXFKxe+Cux7CcYNd+rNNeGoGi2/WiC8/6OhLMLfBie/YkMEeqjk0oG23dWFrC6SBBb3iXid97/Zjv7JkBpCa+RwKTllMoHEaZNeZTWLwSSXCdEXwaH0nuz+G+O6A68Twby0OUIONHkpb75jwe+t6vaxuUcVOxxwwTI2L12na0AeVuxkhHpKAIYo0/eOOrDfcOqh+d2xkdrWENfZw38xFmEcqORro+xpLPolp45gdPzKor0Zw63F6qeIXxd7nxCWF/DS/ZR9N30Dgz/r7Hv0EmoWYSLSUh7Ey4AlDcZcuTF5iQzYgSGlB9Fe7ICCZh/xkiYjwI6kxM75TagVYnN6znZeoRQ/EU5JV5Ydc3u0CEqriImf00W9wEomaPS9iEKJDEHeCHGWKZELGrIT7eDmAiTOz/zeG7Z/IK/
Album:   ENGAGED DANCEHALL
Year:                                                           Genre:  Unknown

tmux在tty下调整窗口大小

因为Ctrl-B 再加方向键会直接切换窗口,

vim ~/.tmux.conf
bind -n C-H resize-pane -L 1
bind -n C-L resize-pane -R 1
bind -n C-K resize-pane -U 1
bind -n C-J resize-pane -D 1

这样就可以通过Ctrl+HJKL来调整窗口大小,就像用vim一样
参考
How do I resize tmux pane by holding down prefix and arrow key for a while?
How to adjust the Tmux pane size

查询framebuffer子系统设备的大小

root@debian:~# cat /sys/class/graphics/fb0/virtual_size
2560,1440

设置fbcon的旋转

root@debian:~# ls /sys/class/graphics/fbcon
cursor_blink  power  rotate  rotate_all  subsystem  uevent
root@debian:~# echo 1 > /sys/class/graphics/fb
fb0/   fbcon/
root@debian:~# echo 1 > /sys/class/graphics/fbcon/
cursor_blink  power/        rotate        rotate_all    subsystem/    uevent
root@debian:~# echo 1 > /sys/class/graphics/fbcon/rotate_all
root@debian:~# echo 1 > /sys/class/graphics/fbcon/rotate_all
root@debian:~# echo 0 > /sys/class/graphics/fbcon/rotate_all
root@debian:~#

rotate_allrotate文件写入0,1,2,3来控制旋转方向,cursor_blink来控制光标是否闪烁。
参考Querying framebuffer resolution in Linux

如何设置fbcon显示在哪个fbdev上

来源The Framebuffer Console
在boot.cmd中添加bootargs fbcon=map:1 (表示在/dev/fb1上显示)
然后记得不能直接修改boot.scr,因为其包含校验码,得用从u-boot/tools里的mkImage来生产boot.scr
来源
全志v3s学习笔记(4)——u-boot传参(boot.scr)和参数配置(script.bin)文件
linux - Beagleboard-Xm Rev. C1 修改 boot.scr 后无法启动

mkimage -A arm -O linux -T script -C none -n "My Boot" -d boot.cmd boot.scr

如何手动设置时区?

Linux设置和修改时间与时区

Linux Vitual Console(VT),和显示器(dri/fbdev),输入的关系

How VT-switching works

有趣的东西-Linux SillySound

SillySound

tty1 的输出映射到 LCD 显示屏的 fb 设备

【每周学习摘要02(23/09/30-23/10/5)】

GLX/DRM

暂时使用llvmpipe渲染

source:Switching to llvmpipe on a Temporary Basis
Solution

LIBGL_ALWAYS_SOFTWARE=1 [application] [arguments ...]

XFCE4 安装

sudo apt install xfce4 xfce4-goodies xorg

然后发现如果用dmutux那个Allwinner-H616 Build的fork仓库,是不支持panfrost的,但刚好也证明了,只要有drm(显示模块非gpu)的驱动,利用llvmpipe(安装xorg自带的,可以看到llvm也被安装了)也是可以运行桌面的。而且通过配置Xorg的配置文件,甚至可以在fbdev上面运行桌面。可以看下这篇文章,但是有点老了不一定符合现在的Xorg软件配置,但可以参考怎么配置/etc/X11/xorg.conf:Re: Using framebuffer in Xorg (i.MX27 ADS)Re: How to setup Xorg and display drivers?
然后貌似听说新版本的Xorg不需要这些配置,可以自动推断,也不知道是怎么实现的。。

而且好像说是,Xorg通过libmali调用Gpu,是直接用fbdev操控显示屏的

dri模块的位置

/usr/lib/aarch64-linux-gnu/dri/

如何使用fbi?(framebuffer image)

sudo fbi -T 1 -d /dev/fb0

-T 是设置Virtual Terminal,不知道什么意思

查看glx,egl 信息

glxinfo,eglinfo,kmscube,glmark2-drm,modetest
其中modetest(由libdrm提供,隶属于mesa,除非是proprietary libdrm)可以打印色条(modetest -M (驱动,比如rockchip,tinydrm,...))
从eglinfo我可以得知,在联想Y9000P上跑,在最底下会出现三个Device platform:Device #0:vendor NVIDIA;#1::vendor
其中,kmscube,modetest,glmark2-drm只能跑Mesa里面有驱动的程序,比如说i915,nouveau,等等,因此在Nvidia proprietery的驱动下
是检测不到的。对于我的笔记本,可以换到i915下进行测试(在BIOS里选择集显)
当然在nv驱动下,glmark2是可以跑的,因为相当于通过glx套了一层通用接口。
其中一篇针对rk3399平台的文章值得借鉴:
RK3399探索之旅 / Display子系统 / 从modetest 到 DRM
非常地道的一篇介绍fbdev/drm区别的文章:
RK3399 探索之旅 / Display 子系统 / 基础概念

modetest显示彩条
modetest -M rockchip -s 93@64:#1

其中93是一个connector,64是crtc, #1是该crtc下的一个plane(不知道应该是什么专业术语反正可以通过modetest查看,就在crtc条目的下面一行)
切换到i915后启动效果:

关于nouveau和NV驱动能否共存的问题

如何切换到nouveau

Linux

arm启动流程

ARM Linux Boot Sequence
先从arch下的启动文件,再到init下的main.c里面的start_kernel

如何用VSCode插件在linux内核源码中跳转?

How to use the Visual Studio Code to navigate Linux kernel source

AllwinnerH616 Debian Build 如何更改初始package?

其实也适用于任何基于armbian build的项目
路径: Allwinner-H616.bak/external/config/cli/bullseye/main/config_cli_standard
其中bullseye代表了debian版本11,jammy是Ubuntu 2204 focal 是 Ubuntu 2004
然后在packages.additional中添加想要安装的包,记住不要添加错了否则build后会中断下载

RKNN2/RKNPU2


关于驱动更新:
直接把新的librknnrt.so/librknn_api.so放在/usr/lib下面就行

全志H616

H616 Yuzuki SBC

EMAC的问题

  1. GMAC是千兆以太网控制器
  2. MACPHY之间通过RMII/RGMII/MII/GMII 连接
  3. 全志H616的EMAC1是通过直接内部连接到了芯片上集成的一个100M EPHY,所以集成度很高,然后EMAC0 如果要使用得外接PHY芯片(淘宝那种),但是EPHY(EMAC1)需要连接以太网隔离变压器,可能是电平的缘故

每周学习摘要01(23/09/18-23/09/24)

电控

stm32

OpenOCD SWD 时钟频率设置

adapter speed 100

这样可以设置swd时钟频率,而且要放在stm32f4x.cpu configure -rtos chibios前面才能起作用,否则会被Override

Exception handlers

Interrupt Service :Interrupts IRQ0 to IRQ81 are the exceptions handled by ISRs.
Routines (ISRs) :Fault handlers Hard fault, memory management fault, usage fault, bus fault are fault
exceptions handled by the fault handlers.
System handlers: NMI, PendSV, SVCall SysTick, and the fault exceptions are all
system exceptions that are handled by system handlers.
For other information, please refer to PM0214(or sth else) at Section 2.3.3

System Handler priority settings

System handler priority registers (SHPRx) on page 233

OpenOCD 无法使用SWD烧录(包括Stlink和CMSIS-DAP)

在USB DFU模式下利用STM32CubeProgrammer清除flash

ChibiOS

名词解释

oip: ch_os_instance pointer
oicp: ch_os_instance_config pointer

校内学习

linux嵌入式

软件

实时显示按键信息

keyviz

Windows 启动文件夹

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

Windows Explorer崩溃解决方法

[原创]Win10 explorer资源管理器崩溃解决方法

Windows 11下VMware 虚拟机很卡

同样的虚拟机,在Windwos10下就很流畅,但是在Windows11下非常卡,请用管理员权限运行VMWareWorkstation 来源

[vmware]解决虚拟机不能拖拽传递文件的方法

安装vmtools

1.首先安装open-vm-tools和open-vm-tools-desktop两个包
2.其次在虚拟机settings页面options分页找到Guest Isolation,开启Enable drag and drop和Enable copy and paste
3.虚拟机内linux桌面需要用x.org启动而不是Wayland(貌似还未支持)

设置Xorg为default display server(optional)

gdm设置

修改gdm的config

sudo vim /etc/gdm3/custom.conf

WaylandEnable这一行取消注释来关闭Wayland

# Uncomment the line below to force the login screen to use Xorg
WaylandEnable=false