本节用于书写我们的在Linux上的第一个驱动Helloworld
我之前在clash搭建科学梯子 | ﹏Resona丶一纸折鸢ζ这篇文章里介绍过如何在树莓派上搭建一个clash代理服务器,还有如何添加一个clash-dashboard的网页UI。
后来再继续逛github的时候,看到了另一个好看的主题,github项目地址如下:haishanh/yacd at gh-pages (github.com)
操作方法和之前一样:
首先进入到clash的安装目录
pi@raspberrypi:~/clash $ cd /home/pi/clash
然后clone一下UI源码
git clone https://github.com/haishanh/yacd.git
然后切换到已经制作好产出的分支
cd yacd
git checkout gh-pages
然后配置一下clash的配置文件/home/pi/.config/clash/config.yaml
修改参数
external-controller: :9090
sercet: 'xxxxx'
external-ui: /home/pi/clash/yacd-gh-pages/
配置完成之后,运行clash即可
./clash-linux-armv7-v1.4.2
linux网桥支持vlan filtering过滤功能后,我们不再需要通过子接口的形式进行vlan划分,简化了vlan配置。
1. bridge vlan说明
man bridge可以了解到,linux通过如下命令进行vlan filtering的配置:
bridge vlan { add | del } dev DEV vid VID [ pvid ] [ untagged ] [ self ] [ master ]
选项说明:
pvid:端口的默认vlan,所有从该端口输入的没有携带vlan的报文,会被打上该vlan标签,该选项只对输入报文有效。
untagged:端口的untag vlan,输出报文携带该vlan时,会被剥离。
一般情况下pvid和untagged是同时使用的,对应于cisco的switchport trunk native vlan
self
master
这两个选项在帮助手册上是这么解释的:
self the vlan is configured on the specified physical device. Required if the device is the bridge device.
master the vlan is configured on the software bridge (default).
续接上一篇文章,我们在第二种方法中提到了DefaultPVID参数,那么我们该如何理解DefaultPVID参数呢,它的作用是什么?
DefaultPVID的释意
在systemd.netdev (www.freedesktop.org)中可以看到DefaultPVID的解释:
DefaultPVID=
This specifies the default port VLAN ID of a newly attached bridge port. Set this to an integer in the range 1–4094 or "none" to disable the PVID.
这指定了新连接的桥接端口的默认端口 VLAN ID。将其设置为 1–4094 范围内的整数或“无”以禁用 PVID。
以上内容便说明了通过systemd方式配置网桥时,br0.netdev文件中DefaultPVID参数的作用就是给所有加入该网桥的网络端口配置一个PVID,包括网桥自己。
那么这个PVID和普通的VLAN ID有什么区别呢?暂时先保留这个疑问往下看。
pvid和untagged的作用
首先看一下bridge命令的选项说明:
bridge vlan { add | del } dev DEV vid VID [ pvid ] [ untagged ] [ self ] [ master ]
选项说明:
pvid:端口的默认vlan,所有从该端口输入的没有携带vlan的报文,会被打上该vlan标签,该选项只对输入报文有效。
untagged:端口的untag vlan,输出报文携带该vlan时,会被剥离。一般情况下pvid和untagged是同时使用的。
由上述说明可以看到,在bridge命令中,pvid和untagged参数是高度关联的。那么,这个tag又是什么东西呢?Tagged和Untagged又是什么?
背景
在FCU2303的开发板上,有八个千兆网,分别是fm1-mac1,fm1-mac2,fm1-mac3,fm1-mac4,fm1-mac5,fm1-mac6,fm1-mac9,fm1-mac10,还有一个5G模块eth0。
客户有一个需求是想在这个板子上划分出两个VLAN(Virtual Local Area Network,中文名为”虚拟局域网”,工作在OSI参考模型的第2层和第3层。),一个是将这八个千兆网口划为一个VLAN,VLANID暂时定为100;另一个是将这八个网口中的任一网口和5G模块划为一个VLAN,VLANID暂时定为200,划分示意图如下图所示:
这样的话,VLAN100中的设备就无法直接访问5G模块的流量,只能先将数据转发到fm1-mac1网口上,然后fm1-mac1再将数据转发到5G模块eth0。因为fm1-mac1是既在VLAN100中,又在VLAN200中,所以它充当了连接两个VLAN的桥梁,这时候如果在fm1-mac1中外接一台电脑用于监控流通此网口的流量的话,就实现了监听VLAN100中其他网口通过5G模块上网的数据内容。
背景:
之前写过两个文章来记录了wm8960音频播放出现砰砰声的问题的原因和其对应的解决方法。后来为了简单起见就选择了将MCLK时钟改为12MHz的方法,也解决了客户的问题。昨天生产部门又反馈新一批的板子又有大批量出现音频播放声音不正常的现象,不同于上次出现的砰砰声,这次是播放时直接出现嗞啦的声音,而且几秒钟的音频文件要播放几分钟才播放完毕,看来又出现新的问题了。
排查过程:
出现这个现象,可以很确定的判断大概率是音频芯片工作不正常的问题,为了验证想法,我们可以拿示波器量一下wm8960音频芯片的BCLK和LRC的时钟频率。原理图的引脚如下:(PS:芯片的引脚顺序是从芯片上的小圆点开始是第一脚,逆时针方向数)
测量发现BCLK有11MHz之高,LRC时钟也很不正常。结合WM8960的时钟分频图来看,这个时钟很不对。
平台总线(platform_bus)的需求来源?
随着soc的升级,S3C2440->S3C6410->S5PV210->4412,以前的程序就得重新写一遍,做着大量的重复工作,
人们为了提高效率,发现控制器的操作逻辑(方法)是一样的,只有寄存器地址不一样,如果将与硬件有关的
代码(platform_device)和驱动代码(platform_driver)分开,升级soc后,因为驱动方式一样,
只需要修改与硬件有关的代码就可以,实现一个驱动控制多个设备。
平台(platform)总线是一种虚拟的总线,在 /sys/bus/platform 目录可以看到。
平台总线三要素:平台总线、平台设备、平台驱动
平台总线原则:先分离,后合并
在线画图工具
首先就是画图工具,我想了一下,程序员经常接触的无非也就是流程图、思维导图、原型图、UML图、网络拓扑图、组织结构图等等这些。
下面这三个在线画图网站我想应该足够了,其中那个processon是我用得最多的,历史文章中几乎所有相关的图形都是用它绘制,然后导出图片的。
- 在线画图工具ProcessOn:https://www.processon.com/
- 在线画图工具draw.io:https://app.diagrams.net/
- 在线思维导图工具:http://www.mindline.cn/webapp
- PlantUML在线编辑器:http://haha98k.com/
在线开发辅助工具
在做开发和写代码的过程中,经常要用到的辅助工具其实还挺多,这段时间我重点就在整理归纳这个。
以我个人的情况为例,日常开发经常会用到一些辅助工具我总结为8大类,包括:编解码工具、转换工具、正则工具、编译工具、网络工具、格式化工具、可视化工具、在线生成器、以及其他工具等等。
backports概念
Backport的含义是”向后移植”,就是将软件新版本的某些功能移植到旧版本上来,这就称为backport。
Debian向来以稳定性著称,所以就存在一个问题,官方源分发的软件版本比软件本身的版本总是要慢不少,所以就有了 backports 源。 backports 主要从 testing 源,部分安全更新从unstable源重新编译包,使这些包不依赖于新版本的库就可以在 debian 的 stable 发行版上面运行。所以 backports 是 stable 和 testing 的一个折衷。
backports源码压缩包位置:
dl/backports-5.10.16-1.tar.xz
backport的patch目录:
target/linux/generic/backport-5.4/020-backport_netfilter_rtcache.patch
backport源码目录(已经打完了patch):
build_dir/target-aarch64_generic_musl/linux-layerscape_armv8_64b/backports-5.10.16-1
linux内核源码压缩包位置:
dl/linux-5.4.111.tar.xz
linux内核的patch目录:
target/linux/layerscape/patches-5.4/
linux内核使用的config文件:
target/linux/layerscape/armv8_64b/config-5.4
linux内核的源码目录(已经打完了patch):
build_dir/target-aarch64_generic_musl/linux-layerscape_armv8_64b/linux-5.4.111