【每周学习摘要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-sunxi 和 linux-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-H616和EchoHeim/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_all
或rotate
文件写入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 Vitual Console(VT),和显示器(dri/fbdev),输入的关系
有趣的东西-Linux 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驱动能否共存的问题
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的问题
GMAC
是千兆以太网控制器MAC
和PHY
之间通过RMII/RGMII/MII/GMII 连接- 全志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嵌入式
软件
实时显示按键信息
Windows 启动文件夹
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
Windows 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